statsd + Telegraf + influxdb + grafana 配置網(wǎng)站性能監(jiān)控

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的安裝和配置

官方網(wǎng)站

安裝 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容