statsd + Telegraf + influxdb + grafana 配置网站性能监控

statsd + Telegraf + influxdb + grafana 配置网站性能监控

本文默认开发环境为 CentOS

statsd

StatsD 最早是 2008 年 Flickr 公司用 Perl 写的针对 Graphite、datadog 等监控数据后端存储开发的前端网络应用,2011 年 Etsy 公司用 node.js 重构。后来其他语言也开发了此功能,它收集数据时基于两大功能:Counting & Timing

StatsD 其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和influxdb等,再通过grafana等展示。

现在通常指StatsD系统,包括客户端(client)、服务器(server)和后端(backend)三部分。客户端植入于应用代码中,将相应的metrics上报给StatsD server。

为什么使用 statsd

  • 协议简单外面可以非常方便的对接使用,rust也有相关的library。
  • 使用UDP,速度快,client这边即使频繁发送,也不会降低系统性能。
  • StatsD还支持多种backend,我们可以将StatsD收集到的信息转发到其他的系统譬如graphite,influxdb,prometheus上面。

Telegraf

监听本地UDP端口(默认8125),聚合StatsD数据后写入InfluxDB;

influxdb

是一个时间序列数据库,用于存储历史性能能检测数据;

grafana

用于展示性能采集数据。

第一步:InfluxDB安装和设置

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

启动

systemctl start influxdb 

登录 influxDB 并且创建账号和数据库

influx                             # 启动influx客户端
create database telegraf           # 创建名为telegraf的数据库
use telegraf                       # 切换到telegraf库下

下面创建用户名telegraf 密码为telegraf的用户,注意用户名用双引号,密码用单引号

create user "telegraf" with password 'telegraf' 

设置数据保留策略,如果不设置则采用默认策略(autogen),数据永久保存。

其目的是让InfluxDB知道哪些数据可以丢弃

CREATE RETENTION POLICY "1_year" ON telegraf DURATION 365d REPLICATION 1
ALTER RETENTION POLICY "1_year" ON telegraf DURATION 365d REPLICATION 1 default

注意:如果库已有数据,再修改数据保留策略,会出现数据丢失的假象。
若要访问旧数据,需要带旧策略名称(autogen):

select count(*) from autogen.my_measurement

或者重新将autogen设置为默认策略

ALTER RETENTION POLICY autogen ON telegraf default

第二步: Telegraf的安装和设置

Telegraf也是InfluxData公司开发的,安装方法类似

相关文献: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 相关配置

[[inputs.statsd]]
      protocol = "udp"
      service_address = ":8125"

修改 InfluxDB 相关配置

[[outputs.influxdb]]
    urls = ["http://localhost:8086"]
    database = "telegraf"
    username = "telegraf"
    password = "telegraf"

启动 telegraf

systemctl start telegraf    # 启动 telegraf
netstat -naup|grep 8125     # 确认端口已监听

第三步: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     # 启动

第四步:Python 为例发送 statsd 打点信息

代码示例

云服务器需要开启 udp 协议,入规则,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

你可能感兴趣的:(statsd + Telegraf + influxdb + grafana 配置网站性能监控)