用Grafana、InfluxDB和Telegraf搭建监控系统
记录下监控系统的搭建,现在平台监控是必须的,不然出了问题全靠猜。我们先用Grafana+InfluxDB+Telegraf来搭一个。为了方便,全部用Docker部署,Docker的知识就不介绍了。
搭建InfluxDB
监控数据的特点是采样频率高,每个数据点都带时间属性,对于写的速度和连续时间的查询速度要求高,因此传统的关系型数据库不适合。这时,时序数据库(TSDB)就是我们的首选。InfluxDB是一个知名的时序数据库,也被广泛使用,它的单机版是免费的,企业级的集群版要收费,而且还不便宜,但对于一般云平台的监控场景,免费版足够了。
我们用”docker run”来拉镜像并启动容器,假设我们把数据存储挂载在本地”/home/user/influxdb”下
$ docker run -d -p 8086:8086 -v /home/user/influxdb:/var/lib/influxdb --name=influxdb influxdb
注意,不挂载本地目录的话,每次重启容器,数据会丢失。
通过”docker ps”查看下容器是否启动成功
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a755dd9ce59 influxdb "/entrypoint.sh i…" 2 minutes ago Up 2 minutes 0.0.0.0:8086->8086/tcp influxdb
访问InfluxDB的HTTP接口进行测试
$ curl -G http://localhost:8086/query?pretty=true --data-urlencode "q=show databases"
你可以得到类似下面这串JSON
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "databases",
"columns": [
"name"
],
"values": [
[
"telegraf"
],
[
"_internal"
]
]
}
]
}
]
}
安装Telegraf
Telegraf负责服务器端的数据采集,并将数据写入数据库中。它与InfluxDB都是属于InfluxData公司的,免费使用,并且同InfluxDB完美融合。Telegraf需要安装在被监控的主机上,可以上官网下载安装包。
首先下载并安装Telegraf,我的Ubuntu环境采用deb包安装,CentOS可以用rpm包安装
$ wget https://dl.influxdata.com/telegraf/releases/telegraf_1.13.4-1_amd64.deb $ sudo dpkg -i telegraf_1.13.4-1_amd64.deb
安装完后telegraf会作为Linux的服务自动启动,可通过
$ service telegraf status
来查看状态打开”/etc/telegraf/telegraf.conf”,找到”[[outputs.influxdb]]“部分,将以下几行的注释去掉
[[outputs.influxdb]]
# ...
urls = ["http://127.0.0.1:8086"] # 这里配置InfluxDB的地址
# ...
database = "telegraf"
# ...
skip_database_creation = false
# ...
timeout = "5s"
多个主机的Telegraf服务可以指向同一InfluxDB数据库,采集的数据自动带有”host”主机名标签
记得重启下telegraf服务
$ sudo service telegraf restart
你可以执行以下查询,看看数据有没有往InfluxDB里送
$ curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=telegraf" --data-urlencode "q=SELECT * FROM cpu"
数据太长,我就不贴出来了。
部署Grafana
Grafana是非常强大的监控数据可视化工具,而且开源。我见过各家平台对于数据采集和存储有各种不同的工具,但可视化基本上都用Grafana。
我们依然采用Docker部署
$ docker run -d -p 3000:3000 -v /home/user/grafana:/var/lib/grafana --name=grafana grafana/grafana
这里挂载的目录”/home/user/grafana”需要先创建,并给与777权限。
部署完后,通过
$ docker ps
命令确认容器是否启动成功访问
http://<yourserver>:3000
,打开登录首页,默认用户名密码都为”admin”。首次登录会要求你改密码登录后,根据主页向导开始配置,首先添加数据源
- 选择InfluxDB做为数据源
- 按下图配置数据源,填写名称,地址,数据库名即可。默认安装的InfluxDB不需要用户名和密码。另外,这边要注意,因为我们是容器安装,所以数据库地址不能用”localhost”,必须是InfluxDB的容器地址
- 保存并测试,通过后点返回。然后进入下一步,创建仪表盘,我们选择新建一个查询
- 参考下图示例填上你的查询条件,可以添加多个查询条件
- 点设置图标,填上图例名称,然后点右上角的保存,在弹出框填上仪表盘名称
- 保存成功后,你就可以看到下图这样的仪表盘了
我当前使用的Grafana版本是v6.7,不同版本的话,设置界面和流程会有些区别。
使用Docker Compose
这里有一个Docker Compose样例,可以直接用$ docker-compose up -d
来启动Grafana和InfluxDB容器,这样就不用记住容器启动命令了。另外,Grafana容器里可以通过”influxdb”直接找到InfluxDB容器,也不用再去找IP地址了。
version: "3.1"
services:
influxdb:
container_name: influxdb
image: influxdb
restart: always
ports:
- "8086:8086"
volumes:
- ./influxdb:/var/lib/influxdb
networks:
- net-db
grafana:
container_name: grafana
image: grafana/grafana
restart: always
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
networks:
- net-db
links:
- influxdb
networks:
net-db: