1 总览
自动化运维监控展示三剑客:Telegraf+Influxdb+ Grafana。
Telegraf 收集数据:是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。内存占用小,通过插件系统可轻松添加支持其他服务的扩展。
Influxdb存储数据: 是一个开源的分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。
Grafana:展示数据。
2 Influxdb 2.4
2.1 Influxdb存储的数据结构
infludb中存储的是时间序列数据,比如说某个时间点系统负载、服务耗时等信息,时间序列数据可以包含多个值。关于什么是时间序列数据,简单来来说就是数据是和一个时间点关联的,结合mysql中的记录与id关系来看就是时间序列数据的主键就是时间点(timestrap)。
infludb中的一条数据至少包括measurement(对应mysql中表概念)、timestamp、至少一个k-v结构的field,再加上0个或者多个k-v结构的tag。对比mysql来看,measurement就是一张表,其主键是timestamp时间戳,tag和field对应就是表中列,tag和field都是k-v接口,k对应列的名字,v对应该列存储的值,tag和field不同的是,tag是有索引的而field没有(如果查询条件为tag则会扫描所有查询到的数据),对于mysql表的有索引列和无索引列。注意mysql中的表需要提前定义结构,而influxdb中的measurement无需提前定义,其null值也不会被存储。
points的数据结构:
2.2 Windows安装
下载地址:https://docs.influxdata.com/influxdb/v2.4/install/?t=Windows
2.3 运行influxdb
打开cmd,切换到influxdb目录,运行,如下图
2.4 浏览器访问influxdb
http://localhost:8086/
输入下面初始用户名、密码、org、bucket。
就可以进入下面页面了。
2.5 Token
访问influxdb需要token,可以到如下位置找到
2.6 python写数据到influxdb
下面代码利用point写入。首先pip install influxdb-client
from datetime import datetime
import time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
# You can generate an API token from the "API Tokens Tab" in the UI
token = "z-6hRtR4VeNQZCVQGmvOm5I-NHdxXC-lo4GwIDDt2fIX_vvVnZjDhZYtkJMF01BTZs_SqqunX6Tr7KXVYDyZZA=="
org = "test"
bucket = "test1"
with InfluxDBClient(url="http://localhost:8086", token=token, org=org) as client:
write_api = client.write_api(write_options=SYNCHRONOUS)
for i in range(30):
point = Point("mem").tag("host", "host1").field("used_percent", 23.43234543+i).time(datetime.utcnow(), WritePrecision.NS)
write_api.write(bucket, org, point)
time.sleep(1)
client.close()
2.7 查看influxdb中数据
我们在上节通过python写到influxdb的名为mem的measurement. 如下图filter中选择的men。就可以在上面看到数据了。
3 grafana
3.1 windows安装
下载:https://grafana.com/grafana/download?platform=windows
下载后直接运行安装。
默认端口号为3000,但有可能与其他端口号冲突,启动不了,可在defaults.ini中修改为其他。我改成了8087.
打开cmd,到安装目录:C:\Program Files\GrafanaLabs\grafana\bin,运行grafana-server.exe启动。
3.2 浏览器访问
我用chrome访问报错“If you’re seeing this Grafana has failed to load its application files”
尝试修改serve_from_sub_path=true,allow_embedding = true都不起作用。最后下载了firefox,可以使用。http://localhost:8087/
输入默认的账号密码:admin\admin. 重置完密码可以使用:
3.3 加载influxdb 2数据
选择首页的DATA SOURCES. 接着选择influxdb。
Influxdb 2 需要使用Flux查询语言,不是influxQL(influxdb 1使用这个,类似sql).
输入url:http://localhost:8086
输入org、token、bucket。测试成功。
3.4 查看数据
新建New dashboard,然后输入查询语句,展示下图。
FLux查询语句如下:
from(bucket: "test1")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "mem")
|> filter(fn: (r) => r._field == "used_percent")
4 Telegraf
4.1 下载与安装
在influx官网可以下载telegraf。地址:https://www.influxdata.com/get-influxdb/。
Windows版直接解压缩即可:
4.2 集成influxdb
我直接修改telegraf.conf里的influxdb_v2不行,后台报“[outputs.influxdb] Failed to write metric (will be dropped: 401 Unauthorized):”。
所以,现在influxdb里新建telegraf配置,然后覆盖telegraf.conf解决的。
第一步,loaddata选择telegraf,然后create configuration。
第二步,选择system。
第3步,给配置随便起个名字。
第4步,点击finish。
第5步,点击刚刚建立的配置。
全量负责下面配置
第6步,将上面的配置直接全量覆盖telegraf的telegraf.conf。并修改token。
4.3 启动telegraf
上面集成完influxdb后,就可以启动telegraf了。支持cmd里运行telegraf即可。
4.4 在influxdb里看数据
如2.7节讲的,在data explorer中可以查看
点击上图的SCRIPT EDITOR可以查看flux查询语言,会在grafana中使用。
from(bucket: "telegraf_test")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_system")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
4.5 Grafana展示
我尝试import现有的模板,始终不展示数据,或者顶多展示个CPU,故我直接新建dashboard了,然后采用flux语言自己查数据。
如下图新建dashboard。
新建一个panel
将上一节的flux语言copy到下图相应位置,就可以了。然后save。
保存后如下图。
类似的,可以再加个内存的。