Smokeping+Promethues+Grafana搭建网络质量监控
一、Smokeping容器化部署
Smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),Smokeping会向目标设备和系统发送各种类型的测试数据包,测量、记录,并通过rrdtool制图方式,图形化地展示网络的时延情况,进而能够清楚的判断出网络的即时通信情况,如:延迟、丢包率、是否是BGP多线等。
二、Promethues容器化部署
2.1 时序数据库介绍
时序数据库强调的是以时间为主坐标,根据时间的流逝来记录事物的变化关系。关系型数据库主要是描述事物与事物之间的变化关系,这个关系相对于时间就比较复杂,比如一对多,多对多。而时间相对简单,只需要简单记录在这个时间点的某个事物发生的变化。监控数据恰恰符合这个时间变化,我们只需要记录某个指标在时间流逝当中的变化即可。
时序数据库非常适合"变化"。比如在关系型数据库中描述事物的关系,使用表结构,一旦定义下来,就遵循这个表结构不断的采集数据,如果发生变化,比如新增一个采集维度,那就要变更表结构,DDL操作对于关系型数据库来说,是非常大的代价。然后这对于时序数据库来说,并没有这个烦恼,时间序列数据集跟踪整个系统的改动并不断插入新数据,而不是更新原有数据。所以,对于监控数据来说,采集新的数据维度对于整个表结构不会有任何影响,因为它压根就没有表结构。
2.2 Promethues架构
官网组件下载:https://prometheus.io/download/
官网介绍:https://prometheus.io/docs/introduction/overview/#architecture
2.3 Promethues容器部署
(1)查询Prometheus镜像
[root@10-27-0-224 ~]# docker search prometheus NAME DESCRIPTION STARS OFFICIAL AUTOMATED prom/prometheus 1354
(2)运行Prometheus容器,拷贝一份配置文件
[root@10-27-0-224 ~]# docker run -d -p 9090:9090 --name prometheus prom/prometheus [root@10-27-0-224 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./ [root@10-27-0-224 ~]# ll total 4 -rw-r--r-- 1 root root 934 Aug 11 09:56 prometheus.yml [root@10-27-0-224 ~]# vim prometheus.yml # my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["localhost:9090"] # 指定prometheus监控项
(3)持久化数据到本地,重新运行容器
[root@10-27-0-224 ~]# docker rm -f prometheus [root@10-27-0-224 ~]# mkdir /data/prometheus/ [root@10-27-0-224 ~]# cp prometheus.yml /data/prometheus/ [root@10-27-0-224 ~]# docker run -d -p 9090:9090 --name prometheus \ -v /data/prometheus/:/etc/prometheus/ \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ prom/prometheus
2.4 Prometheus pushgateway部署
(1)查询Prometheus pushgateway镜像
[root@10-27-0-224 ~]# docker search pushgateway NAME DESCRIPTION STARS OFFICIAL AUTOMATED prom/pushgateway The Prometheus Pushgateway allows ephemeral … 57 [OK]
(2)部署Prometheus pushgateway容器
[root@10-27-0-224 ~]# docker run -d --name="prometheus_pushgateway" -p 9091:9091 prom/pushgateway
(3)修改prometheus配置,添加pushgateway
[root@10-27-0-224 ~]# vim /data/prometheus/prometheus.yml - job_name: prometheus_pushgateway honor_labels: true # 避免收集数据本身的 job 和 instance被pushgateway实例信息覆盖 static_configs: - targets: ['10.27.0.224:9091'] labels: instance: pushgateway [root@10-27-0-224 ~]# docker restart prometheus
(4)prometheus web界面,target里查看pushgateway状态是否为UP
2.5 metric推送与删除
(1)metric推送数据
[root@10-27-0-224 ~]# echo "stargao_metric 999" | curl --data-binary @- http://$IP:9091/metrics/job/stargao_job # 可在pushgateway或prometheus web页面上查看 # --data-binary 表示发送二进制数据,它是使用POST方式发送的!
[root@10-27-0-224 ~]# cat <<EOF | curl --data-binary @- http://$IP:9091/metrics/job/stargao_job/instance/some_instance # TYPE some_metric counter some_metric{label="val1"} 999 # TYPE another_metric gauge # HELP another_metric Just an example. another_metric 2398.283 EOF
(2)删除某个组下的所有数据
[root@10-27-0-224 ~]# curl -X DELETE http://10.27.0.224:9091/metrics/job/stargao_job
(3)删除某个组下某个实例的所有数据
[root@10-27-0-224 ~]# curl -X DELETE http://10.27.0.224:9091/metrics/job/stargao_job/instance/some_instance
【注】可以发现 pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。因为 Prometheus 配置 pushgateway 的时候,也会指定 job 和 instance, 但是它只表示 pushgateway 实例,不能真正表达收集数据的含义。所以在 prometheus 中配置 pushgateway 的时候,需要添加 honor_labels: true 参数, 从而避免收集数据本身的 job 和 instance 被覆盖。另外,为了防止 pushgateway 重启或意外挂掉,导致数据丢失,我们可以通过 -persistence.file 和 -persistence.interval 参数将数据持久化下来。
2.6 Smokeping采集的数据推送到Prometheus
把smokeping采集的数据通过rrdtool读取之后,按照一定的格式推送到prometheus的gateway,时间间隔是1分钟。
(1)获取定时推送脚本
[root@10-27-0-224 ~]# git clone https://github.com/UStarGao/idc_ping_monitor.git Cloning into 'idc_ping_monitor'... remote: Enumerating objects: 127, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (3/3), done. remote: Total 127 (delta 0), reused 0 (delta 0), pack-reused 124 Receiving objects: 100% (127/127), 416.12 KiB | 0 bytes/s, done. Resolving deltas: 100% (36/36), done. [root@10-27-0-224 ~]# mkdir /usr/local/smokeping [root@10-27-0-224 ~]# cp idc_ping_monitor/collection_to_prometheus.py /usr/local/smokeping/
(2)修改脚本配置
[root@10-27-0-224 ~]# vim /usr/local/smokeping/collection_to_prometheus.py 'LOG_FILE' : '/tmp/smoking_pushgateway.log' # 日志文件 'prometheus_gateway' : 'http://10.27.0.224:9091' # Prometheus gateway地址 'data_dir' : '/data/smokeping/data' # smokeping rrd文件的存放地址
(3)配置定时任务
[root@10-27-0-224 ~]# crontab -e * * * * * python /usr/local/smokeping/collection_to_prometheus.py
三、Grafana容器化部署
官网介绍:https://grafana.com/docs/grafana/latest/
3.1 Grafana容器部署
[root@10-27-0-224 ~]# mkdir /data/grafana-storage [root@10-27-0-224 ~]# chmod 777 /data/grafana-storage/ [root@10-27-0-224 ~]# docker run -d -p 3000:3000 \ --name grafana \ -v /data/grafana-storage:/var/lib/grafana \ -e "GF_SECURITY_ADMIN_PASSWORD=ucloud.cn" \ grafana/grafana
3.2 Grafana WEB访问
(1)浏览器访问验证,用户名:admin 密码:ucloud.cn
(2)添加数据源
3.3 监控模板添加
作者:UStarGao
链接:https://www.starcto.com/monitor/216.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-09-04Linux磁盘UUID冲突解决方案
- 2021-04-04Linux服务器配置Google二次验证登录
- 2021-08-05Redis持久化机制之AOF日志与RDB快照
- 2021-06-28Linux 升级内核方法
- 2021-02-28Linux账户风险和安全策略