一台搬瓦工小机器,用于部署 Grafana 展示监控数据;另一台部署 Influxdb 存储监控数据,Telegraf 也部署在同一台机器,Telegraf 既可以上报当前物理机的数据,也可以作为服务接收数据。
设置时区
需要保证服务器时间的统一,不然数据会查询不到。
# Ubuntu 18.04
root@dc8:~# tzselect
4
9
1
1
root@dc8:~# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 查看时间
root@dc8:~# date
Thu Jun 3 20:02:36 CST 2021
部署 Grafana 监控面板
docker run -d --name grafana -p 3000:3000 -v /etc/localtime:/etc/localtime:ro grafana/grafana:main
默认用户名及密码:admin / admin
部署 InfluxDB 数据库
# 下载镜像
docker pull influxdb:1.8-alpine
# 创建数据目录
mkdir /opt/influxdb-data
# 启动容器
docker run \
-d \
--name influxdb \
-p 8086:8086 \
-v /opt/influxdb-data:/var/lib/influxdb \
-v /etc/localtime:/etc/localtime:ro \
influxdb:1.8-alpine
2.0 版本
mkdir /opt/influxdb-data
mkdir /opt/influxdb
# 获取配置文件
docker run \
--rm influxdb:2.0.6 \
influxd print-config > /opt/influxdb/config.yml
# 启动容器
docker run \
-d \
--name influxdb \
-p 8086:8086 \
-v /opt/influxdb-data:/var/lib/influxdb2 \
-v /opt/influxdb/config.yml:/etc/influxdb2/config.yml \
influxdb:2.0.6
#容器创建后,web 页面初始化
http://IP:8086/
创建数据库
# 进入容器
docker exec -it influxdb /bin/bash
# 进入数据库操作终端
influx
> CREATE DATABASE mydb
> CREATE DATABASE telegraf
查看数据库
> SHOW DATABASES
name: databases
---------------
name
_internal
mydb
telegraf
安装 Telegraf
# 创建目录
mkdir /opt/telegraf
# 获取镜像
docker pull telegraf:alpine
# 获取配置
docker run --rm telegraf:alpine telegraf config > /opt/telegraf/telegraf.conf
# 修改配置文件
参考下方 telegraf.conf 配置
# 创建数据库
> CREATE DATABASE telegraf
# 启动容器,监控容器宿主机
docker run -d --name=telegraf \
-p 8125:8125/udp \
-v /opt/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro \
-v /:/hostfs:ro \
-e HOST_ETC=/hostfs/etc \
-e HOST_PROC=/hostfs/proc \
-e HOST_SYS=/hostfs/sys \
-e HOST_VAR=/hostfs/var \
-e HOST_RUN=/hostfs/run \
-e HOST_MOUNT_PREFIX=/hostfs \
telegraf:alpine
telegraf.conf
设置 influxdb 位置,设置内存与磁盘上报字段(CPU上报是默认开启的)
[[outputs.influxdb]]
urls = ["http://influxdb:8086"]
database = "telegraf"
exclude_database_tag = true
username = ""
password = ""
[[inputs.statsd]]
max_tcp_connections = 250
tcp_keep_alive = false
service_address = ":8125"
delete_gauges = true
delete_counters = true
delete_sets = true
delete_timings = true
percentiles = [90.0]
metric_separator = "."
parse_data_dog_tags = false
datadog_extensions = false
allowed_pending_messages = 10000
percentile_limit = 1000
tagexclude = ["metric_type"]
fielddrop = ["count", "stddev", "sum"]
[[inputs.mem]]
fieldpass = ["used_percent", "total"]
[[inputs.disk]]
fieldpass = ["used_percent", "total"]
配置 Grafana 面板
1,首先添加数据源,URL:http://IP:8086
2,Query Language 选择 InfluxQL(1.8版本是InfluxQL,2版本支持Flux)
3,填写刚才创建的数据库,例如创建 “telegraf” 用于存储 Telegraf 上报的本机状态信息。
4,默认 Influx 1.8 没有认证,添加后点击“Save & test” 即提示添加成功。
如果为 InfluxQL 2.0 版本的数据库,首先在 http://IP:8086/ 的 Token 页面申请 Token,然后在 Grafana 的数据源处添加数据源。
添加 Grafana Panel
InfluxQL
-- 内存
SELECT mean("used_percent") FROM "mem" WHERE $timeFilter GROUP BY time($__interval) fill(null)
-- 磁盘
SELECT mean("used_percent") FROM "disk" WHERE $timeFilter GROUP BY time($__interval) fill(null)
-- CPU
SELECT mean("usage_user") FROM "cpu" WHERE $timeFilter GROUP BY time(1m) fill(null)
(可选)为 Grafana 绑定域名
创建 Nginx 容器,统一网关及HTTPS
创建配置:/opt/nginx/grafana.conf
server {
listen 80;
server_name grafana.yasking.org;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://127.0.0.1:3000;
}
}
启动服务
sudo docker run -d --name nginx --net host -v /opt/nginx/:/etc/nginx/conf.d/ -v /etc/localtime:/etc/localtime:ro --restart=unless-stopped nginx:alpine
创建域名 A 记录指向服务器就可以通过域名访问 Grafana 查看监控数据了 http://grafana.yasking.org/
一个基本的基于 Grafana + InfluxDB + Telegraf 的示例就搭建完成了。