栏目头部广告

Smokeping+Promethues+Grafana搭建网络质量监控

一、Smokeping容器化部署

Smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),Smokeping会向目标设备和系统发送各种类型的测试数据包,测量、记录,并通过rrdtool制图方式,图形化地展示网络的时延情况,进而能够清楚的判断出网络的即时通信情况,如:延迟、丢包率、是否是BGP多线等。

文章推荐:SmokePing网络PING探测监控解决方案

二、Promethues容器化部署

2.1 时序数据库介绍

时序数据库强调的是以时间为主坐标,根据时间的流逝来记录事物的变化关系。关系型数据库主要是描述事物与事物之间的变化关系,这个关系相对于时间就比较复杂,比如一对多,多对多。而时间相对简单,只需要简单记录在这个时间点的某个事物发生的变化。监控数据恰恰符合这个时间变化,我们只需要记录某个指标在时间流逝当中的变化即可。

时序数据库非常适合"变化"。比如在关系型数据库中描述事物的关系,使用表结构,一旦定义下来,就遵循这个表结构不断的采集数据,如果发生变化,比如新增一个采集维度,那就要变更表结构,DDL操作对于关系型数据库来说,是非常大的代价。然后这对于时序数据库来说,并没有这个烦恼,时间序列数据集跟踪整个系统的改动并不断插入新数据,而不是更新原有数据。所以,对于监控数据来说,采集新的数据维度对于整个表结构不会有任何影响,因为它压根就没有表结构。

2.2 Promethues架构

官网组件下载:https://prometheus.io/download/    
官网介绍:
https://prometheus.io/docs/introduction/overview/#architecture

Smokeping+Promethues+Grafana搭建网络质量监控(图1)

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

Smokeping+Promethues+Grafana搭建网络质量监控(图2)

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方式发送的!

Smokeping+Promethues+Grafana搭建网络质量监控(图3)

[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

Smokeping+Promethues+Grafana搭建网络质量监控(图4)

(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

Smokeping+Promethues+Grafana搭建网络质量监控(图5)

(2)添加数据源

Smokeping+Promethues+Grafana搭建网络质量监控(图6)

Smokeping+Promethues+Grafana搭建网络质量监控(图7)

Smokeping+Promethues+Grafana搭建网络质量监控(图8)

3.3 监控模板添加

Smokeping+Promethues+Grafana搭建网络质量监控(图9)

Smokeping+Promethues+Grafana搭建网络质量监控(图10)

作者:UStarGao
链接:https://www.starcto.com/monitor/216.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`