statsd + Telegraf + influxdb + grafana 配置網(wǎng)站性能監(jiān)控
本文默認(rèn)開(kāi)發(fā)環(huán)境為 CentOS
statsd
StatsD 最早是 2008 年 Flickr 公司用 Perl 寫(xiě)的針對(duì) Graphite、datadog 等監(jiān)控?cái)?shù)據(jù)后端存儲(chǔ)開(kāi)發(fā)的前端網(wǎng)絡(luò)應(yīng)用,2011 年 Etsy 公司用 node.js 重構(gòu)。后來(lái)其他語(yǔ)言也開(kāi)發(fā)了此功能,它收集數(shù)據(jù)時(shí)基于兩大功能:Counting & Timing
StatsD 其實(shí)就是一個(gè)監(jiān)聽(tīng)UDP(默認(rèn))或者TCP的守護(hù)程序,根據(jù)簡(jiǎn)單的協(xié)議收集statsd客戶(hù)端發(fā)送來(lái)的數(shù)據(jù),聚合之后,定時(shí)推送給后端,如graphite和influxdb等,再通過(guò)grafana等展示。
現(xiàn)在通常指StatsD系統(tǒng),包括客戶(hù)端(client)、服務(wù)器(server)和后端(backend)三部分??蛻?hù)端植入于應(yīng)用代碼中,將相應(yīng)的metrics上報(bào)給StatsD server。
為什么使用 statsd
- 協(xié)議簡(jiǎn)單外面可以非常方便的對(duì)接使用,rust也有相關(guān)的library。
- 使用UDP,速度快,client這邊即使頻繁發(fā)送,也不會(huì)降低系統(tǒng)性能。
- StatsD還支持多種backend,我們可以將StatsD收集到的信息轉(zhuǎn)發(fā)到其他的系統(tǒng)譬如graphite,influxdb,prometheus上面。
Telegraf
監(jiān)聽(tīng)本地UDP端口(默認(rèn)8125),聚合StatsD數(shù)據(jù)后寫(xiě)入InfluxDB;
influxdb
是一個(gè)時(shí)間序列數(shù)據(jù)庫(kù),用于存儲(chǔ)歷史性能能檢測(cè)數(shù)據(jù);
grafana
用于展示性能采集數(shù)據(jù)。
第一步:InfluxDB安裝和設(shè)置
influxDB 官方介紹
下載
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.7.x86_64.rpm
安裝
sudo yum localinstall influxdb-1.3.7.x86_64.rpm
啟動(dòng)
systemctl start influxdb
登錄 influxDB 并且創(chuàng)建賬號(hào)和數(shù)據(jù)庫(kù)
influx # 啟動(dòng)influx客戶(hù)端
create database telegraf # 創(chuàng)建名為telegraf的數(shù)據(jù)庫(kù)
use telegraf # 切換到telegraf庫(kù)下
下面創(chuàng)建用戶(hù)名telegraf 密碼為telegraf的用戶(hù),注意用戶(hù)名用雙引號(hào),密碼用單引號(hào)
create user "telegraf" with password 'telegraf'
設(shè)置數(shù)據(jù)保留策略,如果不設(shè)置則采用默認(rèn)策略(autogen),數(shù)據(jù)永久保存。
其目的是讓InfluxDB知道哪些數(shù)據(jù)可以丟棄
CREATE RETENTION POLICY "1_year" ON telegraf DURATION 365d REPLICATION 1
ALTER RETENTION POLICY "1_year" ON telegraf DURATION 365d REPLICATION 1 default
注意:如果庫(kù)已有數(shù)據(jù),再修改數(shù)據(jù)保留策略,會(huì)出現(xiàn)數(shù)據(jù)丟失的假象。
若要訪問(wèn)舊數(shù)據(jù),需要帶舊策略名稱(chēng)(autogen):
select count(*) from autogen.my_measurement
或者重新將autogen設(shè)置為默認(rèn)策略
ALTER RETENTION POLICY autogen ON telegraf default
第二步: Telegraf的安裝和設(shè)置
Telegraf也是InfluxData公司開(kāi)發(fā)的,安裝方法類(lèi)似
相關(guān)文獻(xiàn):https://www.influxdata.com/blog/getting-started-with-sending-statsd-metrics-to-telegraf-influxdb/
下載安裝
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.4.3-1.x86_64.rpm
sudo yum localinstall telegraf-1.4.3-1.x86_64.rpm
配置修改
vim /etc/telegraf/telegraf.conf
修改 statsd 相關(guān)配置
[[inputs.statsd]]
protocol = "udp"
service_address = ":8125"
修改 InfluxDB 相關(guān)配置
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "telegraf"
username = "telegraf"
password = "telegraf"
啟動(dòng) telegraf
systemctl start telegraf # 啟動(dòng) telegraf
netstat -naup|grep 8125 # 確認(rèn)端口已監(jiān)聽(tīng)
第三步:Grafana的安裝和配置
安裝 Grafana
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.1-1.x86_64.rpm
sudo yum localinstall grafana-4.6.1-1.x86_64.rpm
systemctl start grafana # 啟動(dòng)
第四步:Python 為例發(fā)送 statsd 打點(diǎn)信息
代碼示例
云服務(wù)器需要開(kāi)啟 udp 協(xié)議,入規(guī)則,8125端口
import statsd
from time import sleep, time
from random import random
STATSD_HOST = 'xx.xx.xx.xx'
client = statsd.StatsClient(host=STATSD_HOST, port= 8125, prefix='test.statsd')
def push_data_to_statsd():
service_id = 'abcd1234'
total_time = random() * 100.0
res = client.incr('service.%s.success' % service_id)
client.timing('service.%s.total_time' % service_id, total_time)
with client.timer('service.%s.calling_time' % service_id):
sleep(random())
if __name__ == '__main__':
while True:
push_data_to_statsd()
sleep(1)
Grafana 配置

avatar