Grafana+Collectd+InfluxDB监控Openwrt-玩
背景
之前编译的时候,把OP上的监控面板去掉了,只留下了Collectd,但是又没Web看数据。
刚好最近在弄些Docker的东西,就看上了Grafana,弄着试试,纯记录贴。
介绍
主要会用到以下几个应用,其中Telegraf因为现在InfluxDB不是很直接获取Collectd数据,作为中转的存在,另外为什么用Collectd而不用Prometheus,主要是Collectd够轻量,单机服务也足够,说实话就是不想装Prometheus插件,麻烦
Collectd:一个轻量级的系统性能统计守护进程(daemon),用于定期收集服务器、应用和服务的性能数据(如 CPU、内存、磁盘、网络等)。
InfluxDB:一个开源的时间序列数据库(Time Series Database, TSDB) ,专门用于高效存储和查询带有时间戳的数据(如监控指标、传感器数据等)。
Telegraf:InfluxData 公司开发的数据收集代理,属于 TICK Stack(Telegraf、InfluxDB、Chronograf、Kapacitor)的一部分。
Grafana:一个开源的数据可视化与监控平台,支持多种数据源(如 InfluxDB、Prometheus、Elasticsearch 等)。

准备
主要准备是在OP上的Collectd,装好需要监控设备的插件就行,需要什么就装什么

安装好后,需要再Collectd设置中启用这些插件,还是那句话,需要监控什么就装什么

其中最重要插件是Network,后面能否进行数据交互就靠它了

tips:如果除Collectd外,其他应用都在另一个服务器上,需要将types.db从OP共享出来,可以用Ksmbd等网络共享插件实现,然后在另一个系统上挂载就行,后面Telegraf配置的时候会用上

在Network编辑,设置服务器接口,其中服务器主机为Telegraf所在IP,端口随意,后面Telegraf设置监听这个端口

在OP上设置防火墙,放行端口和转发到Telegraf上

InfluxDB、Telegraf、Grafana部署
这里选择比较简单的部署方式,用portainer部署,用maclan网络,统一网络,容器名互指访问,至于宿主机怎么访问,后面在开贴了。
services:
influxdb:
image: influxdb:latest
container_name: influxdb
restart: always
networks:
ipv6_maclan: #这里用maclan ,其他桥接也简单
ipv4_address: 192.168.x.x
ipv6_address: 240e:xx:xx:xx::1
volumes:
- /usr/docker/influxdb2:/var/lib/influxdb2
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin #可自定义
- DOCKER_INFLUXDB_INIT_PASSWORD=admin #可自定义
- DOCKER_INFLUXDB_INIT_ORG=myorg
- DOCKER_INFLUXDB_INIT_BUCKET=mybucket
ports:
- "8086:8086" #maclan网络下其实可以不用写,留着后面怕忘了端口
grafana:
image: grafana/grafana-enterprise:main
container_name: grafana
user: "472:472" #设置与宿主机映射路径相同权限
restart: always
networks:
ipv6_maclan:
ipv4_address: 192.168.x.x
ipv6_address: 240e:xx:xx:xx::2
volumes:
- /you_dir/grafana:/var/lib/grafana #/you_dir/grafana,需要设置472权限
environment:
- GF_SERVER_HTTP_ADDR=0.0.0.0
- GF_SERVER_HTTP_PORT=3000
depends_on:
- influxdb
ports:
- "3000:3000"
telegraf:
image: telegraf:latest
container_name: telegraf
restart: always
networks:
ipv6_maclan:
ipv4_address: 192.168.x.x
ipv6_address: 240e:xx:xx:xx::3
volumes:
- /you_dir/telegraf.conf:/etc/telegraf/telegraf.conf #这里可能需要先创建一个空telegraf.conf配置文件,不然可能会报错。
- /you_dir/types.db:/usr/share/collectd/types.db # 挂载 types.db
environment:
- INFLUXDB_TOKEN=INFLUXDB_TOKEN # 使用 InfluxDB 初始化时设置的 Token,需要先进InfluxDB 拿到token后设置
- INFLUXDB_ORG=myorg
- INFLUXDB_BUCKET=collectd
depends_on:
- influxdb
ports:
- "25826:25826/udp"
networks:
ipv6_maclan:
external: true
influxdb配置
Load Data -->Buckets,右边点CREATE BUCKET创建新的(bucket)“桶”

设置名称,数据存储时间(OLDER THAN),根据自己需求设置,设置完点“CREATE”,“桶”创建完成

刚创建完的“桶”里面没有数据的

Load Data --> API Token,选择“API TOKENS”,点击“GENERATE API TOKEN”创建给Telegraf、Grafana用的toekn,可以创建一个,另外嫌麻烦可以直接选第一个来创建token

都是填写名称,第二个稍微麻烦点,需要自己选择开放的权限,设置好后点“SAVE”


把这里的token记录复制即可

Load Data --> Telegraf 创建Telegraf 的配置文件,默认会有很多示例,根据自己需求创建,这个就是telegraf.conf配置,容器路径/etc/telegraf/telegraf.conf,如果映射出来可以直接填写,然后重启生效

influxdb配置
Load Data -->Buckets,右边点CREATE BUCKET创建新的(bucket)“桶”

设置名称,数据存储时间(OLDER THAN),根据自己需求设置,设置完点“CREATE”,“桶”创建完成

刚创建完的“桶”里面没有数据的

Load Data --> API Token,选择“API TOKENS”,点击“GENERATE API TOKEN”创建给Telegraf、Grafana用的toekn,可以创建一个,另外嫌麻烦可以直接选第一个来创建token

都是填写名称,第二个稍微麻烦点,需要自己选择开放的权限,设置好后点“SAVE”


把这里的token记录复制即可

Load Data --> Telegraf 创建Telegraf 的配置文件,默认会有很多示例,根据自己需求创建,这个就是telegraf.conf配置,容器路径/etc/telegraf/telegraf.conf,如果映射出来可以直接填写,然后重启生效
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
hostname = ""
omit_hostname = false
[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"] #这里根据环境填,桥接127.0.0.1:8086,其他环境就要具体ip和端口,
token = 'influxdb_token' #前面创建的token,在docker-compose的配置文件也需要用这个
organization = "myorg"
bucket = "you_bucket" #存储数据用的Buckets
[[inputs.socket_listener]]
service_address = "udp://0.0.0.0:25826" #op上Collectd开放的server服务器
data_format = "collectd"
collectd_typesdb = ["/usr/share/collectd/types.db"] #根据docker-compose设置的映射路径填
collectd_parse_multivalue = "split"
telegraf配置
telegraf主要就是把上面示例配置放进telegraf.conf文件中,重启即可,如果通了的话,influxdb这边会有数据

Grafana设置
设置中文:在Grafana右边点击头像,选择ProFile

在Language选择中文,点save

连接-->添加新连接,搜索influxdb,点击进去

在点击右边按钮,添加新数据源

Query language填写flux(influxdb2.x选择)
HTTP填写influxdb的IP地址
Organization填写influxdb信息,可以去看看是什么,根据自己信息填写
Token填写influxdb创建的api token
default bucket填写influxdb存储“桶”

这里可以直接创建关联仪表盘

成果

总结
没多大用
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
