一、grafana基本使用与promethues模版导入

一、部署grafana并添加promethues数据源

1、部署并访问grafana,账密都是amdin

2、添加数据源(如果修改了数据需要等会才能生效)
设置——data source——add data source——prometheus——填写prometheus地址并保存测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、grafana添加prometheus官网提供的页面展示模版
1、访问grafana官网https://grafana.com/grafana/dashboards/下载页面展示插件模版
这里输入exporter表示监控系统资源,还可以输入mysql等资源,数据源选择prometheus,下面是下载量和评分
在这里插入图片描述
点进去可以看到模版页面示例图、DownloadJSON按钮和下载ID
在这里插入图片描述
2、导入prometheus展示页面模版
如果网络比较好就直接导入ID:15172
在这里插入图片描述
在这里插入图片描述
如果网络不好就导入json文件
在这里插入图片描述
在这里插入图片描述
查看导入效果(我所有的agent客户端节点都是通过consol自动发现的)
坑:如果是consol自动发现模式job这里没做分组,在ResourceDverview界面下的consol:Overall total 5m load中Cpu Cores是所有节点的总和
在这里插入图片描述
三、添加一个新的dashboard(仪表盘)面板

0、添加之前先在grafana上测试一些是否可以查到数据,这一步相当于在prometheus面板的Graph页面
在这里插入图片描述
• Metric表示查询的数据源,Label filters表示筛选条件
• Operations表示添加函数:Range functions/Rate是时间函数
• node_network_receive_bytes_total: 查询网络接收/下载/入口总流量
• 点击Run query查询后会生成一条promeql语句
• 过去5分钟的数据:rate(node_network_receive_bytes_total{instance=“192.168.1.202:9100”, device=“ens33”}[5m])
在这里插入图片描述
• 如果想直接输入promeql语句就选择code
在这里插入图片描述
1、选择dashboards——> new dashboard——> add a new panel(面板)
在这里插入图片描述
2、添加一个ping延迟的面板图形
(1) 自定义添加内容,选择apply保存到指定目录下
metric:表示监控项目
在这里插入图片描述
#这个地方可以选择图形样式
在这里插入图片描述
#这个地方可以选择显示单位(想要什么就搜索)
在这里插入图片描述
在这里插入图片描述
#这里可以选择最小值 最大值 平均值
在这里插入图片描述
(2) 展示成图
在这里插入图片描述

(3) 添加新的监控面板和面板
在这里插入图片描述
(4) 添加监控面板时选择自定义显示标签
(1) 本来标签有这么多
在这里插入图片描述
(2) 通过option选项添加自定义标签
optin——>legend——>custom
在这里插入图片描述
在这里插入图片描述
3、查询上传和下载的每秒速度
下载速率:rate(node_network_receive_bytes_total{instance=“192.168.1.201:9100”, device=“ens33”}[1m])
上传速率:rate(node_network_transmit_bytes_total{instance=“192.168.1.201:9100”, device=“ens33”}[1m])
在这里插入图片描述

二、在客户端部署pushgateway

pushgateway是用于通过脚本自定义监控项的,而node_exporter是系统自动采集数据

pushgateway只需要部署一台就可以了可以在某个客户端部署也可以在promehteus上部署,然后其他客户端通过脚本往pushgateway推送数据就行了,但是客户端太多的话会导致pushgateway将来会成为瓶颈。
pushgateway部署在客户端后查看 http://xxxx:9091/metrcs/ 页面是没有任何数据的,还需要写脚本抓取数据并推送给pushgateway才能有数据,然后pushgateway再把数据推送给prometheus
1、在客户端下载并安装pushgateway
官网 https://prometheus.io/download/

(1) 解压pushgateway
# tar xvf pushgateway-1.5.1.linux-amd64.tar -C /usr/local/

(2) 启动pushgateway
# vim /usr/lib/systemd/system/pushgateway.service
[Unit]
Description=pushgateway
After=network.target

[Service]
User=root
Type=simple
ExecStart=/usr/local/pushgateway-1.5.1.linux-amd64/pushgateway
Restart=on-failure

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable pushgateway
# systemctl start pushgateway
# netstat -anputl|grep 9091
tcp6       0      0 :::9091                 :::*                    LISTEN      105574/pushgateway  
tcp6       0      0 192.168.1.202:9091      192.168.1.200:35082     ESTABLISHED 105574/pushgateway 

2、配置prometheus发现pushgateway

# cat /usr/local/prometheus/prometheus.yml
  - job_name: 'PUSHGATEWAY'
    static_configs:
    - targets: ['pushgateway:9091']     # 这里需要提前host写好pushgateway地址
    #- targets: ['192.168.1.202:9091']  # 也可以使用ip地址

# 重启Prometheus,然后访问prometheus就可以查看到pushgateway时up状态了

在这里插入图片描述
3 写脚本抓取tcp连接数并推送给pushgateway

(1) 写脚本抓数据并推送给pushgateway
# cat /usr/local/pushgateway-1.5.1.linux-amd64/pushgateway.sh 
#!/bin/bash
# from Mr.wen

instance_name='192.168.1.201'     # 这里不要用ifconfig截取ip,否则下面instance_name取不到值
job_name=`hostname|cut -d. -f1`
echo ${job_name}
if [[ ${job_name} == "localhost" ]]
then
    echo "the hostname not localhost"
    exit 1
fi

# 采集time_wait连接数
label="count_netstat_wait_counnections"  # 定义一个key
count_netstat_wait_connections=`netstat -anputl|grep -i wait|wc -l`   # 定义一个value
echo "$label $count_netstat_wait_connections" | curl --data-binary @- http://192.168.1.202:9091/metrics/job/${job_name}/instance/${instance_name}

# 采集系统负载
label2="count_load_counnections"
count_load_counnections=`uptime |awk -F "[ ,]" '{print $(14)}'`
echo "$label2 $count_load_counnections" | curl --data-binary @- http://192.168.1.202:9091/metrics/job/${job_name}/instance/${instance_name}

-------------解析-----------------
curl --data-binary是将http post 请求中的二进制数据发送给http服务服务器,这里的http服务器指的就是pushgateway服务器http://192.168.1.202:9091/metrics
job/${job_name}: 这里指当前被监控服务器主机名标签(可以自定义)
instance/${instance_name}: 这里是系统提前定义好的被监控服务器ip地址

(2) 采集数据(可以多台客户端写脚本往一台pushgateway上推数据)
#指定脚本采集数据

# bash pushgateway.sh
#写入定时任务采集每隔15秒采集一次数据
# crontab -l
* * * * * sleep 15; cd /usr/local/pushgateway-1.5.1.linux-amd64/; bash pushgateway.sh > /dev/null 2>&1

#查看pushgateway的页面,这时发现Metrics已经有数据了(我这里有2个客户端都在向pushgateway推送数据)
http://192.168.202:9091/#
这里的job对应脚本中的job_name, instance对应脚本中的instance_name

在这里插入图片描述
#查看Prometheus server的页面,输入我们的key:count_netstat_wait_connections,已经能查出来数据了
exported_instance=“192.168.1.201” 对应上面脚本中的 i n s t a n c e n a m e e x p o r t e d j o b = " n g i n x 201 " 对于上面脚本中的 {instance_name} exported_job="nginx201" 对于上面脚本中的 instancenameexportedjob="nginx201"对于上面脚本中的{job_name}
instance=“pushgateway:9091” 对应prometheus.yml中的targets参数(指pushgateway服务器地址)
job=“PUSHGATEWAY” 对应prometheus.yml中的job_name参数
在这里插入图片描述
(3) 删除数据

删除某个组下某实例的所有数据
curl -XDELETE http://pushgateway.example.org:9091/metrics/job/some_job/instance/some_instance

删除某个组下的所有数据
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job

删除所有,需要开启 --web.enable-admin-api
curl -X PUT http://pushgateway.example.org:9091/api/v1/admin/wipe

清除promethues下的历史查询数据
curl -X POST -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?match[]=count_netstat_wait_counnections'

清除pushgateway收集的数据

在这里插入图片描述

4、抓取ping丢包率和延迟推送给pushgateway

(1) 写脚本
[root@nginx201 pushgateway]# cat ping_pushgateway.sh 
#!/bin/bash
# from Mr.wen
# time:2023-02-19

#instance_name=`ifconfig ens33|sed -nr '2p'|awk -F " " '{print $2}'`. # 这里不要这样写下面取不到值
instance_name='192.168.1.210'
job_name=`hostname|cut -d. -f1`
echo ${job_name}
if [[ ${job_name} == "localhost" ]]
then
    echo "the hostname not localhost"
    exit 1
fi

domain_name='gitee.com'

# 采集ping延迟
lable="network_packet_loss"   # 定义key
network_packet_loss=`ping -c 3 -i 0.0001 ${domain_name}|tail -2|head -1|awk -F "[ %]" '{print $6}'` # 定义value
echo "$lable ${network_packet_loss}" | curl --data-binary @- http://192.168.1.202:9091/metrics/job/${job_name}/instance/${instance_name}

# 采集ping丢包率
lable2="network_rrt"   # 定义key
network_rrt=`ping -c 30 -i 0.0001 gitee.com|tail -1|awk -F "/" '{print $5}'` # 定义value
echo "$lable2 ${network_rrt}" | curl --data-binary @- http://192.168.1.202:9091/metrics/job/${job_name}/instance/${instance_name}

(2) 通过任务计划执行脚本

* * * * * sleep 3; /bin/bash ping_pushgateway.sh >/dev/null 2>&1 #没3秒执行一次

在这里插入图片描述

三、grafana备份与导入

1、备份
点击你要备份的dashboard——设置——JSON Model——复制并存储为dashboard-date.json
这里的save as只能在本地另存为一份dashboard以便于临时调试
在这里插入图片描述
在这里插入图片描述
2、导入
选择import——upload file
在这里插入图片描述
在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐