版本及环境介绍
ip | hostname | 服务 |
---|---|---|
172.18.138.10 | guojing | prometheus、grafana |
172.18.138.8 | zunshang | node-exporter |
各节点systemd 管理相关服务
此部署过程跳过
prometheus 配置文件修改
prometheus.yml 修改成如下
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: ["guojing:9090"]
relabel_configs:
- source_labels: [ "__address__" ]
regex: "(.*):(.*)"
target_label: "instance"
replacement: $1
- job_name: "node-exporter"
scrape_interval: 15s
scrape_timeout: 10s
file_sd_configs:
- files:
- node-info.yml
relabel_configs:
- source_labels: [ "__address__" ]
regex: "(.*):(.*)"
target_label: "instance"
replacement: $1
node-info.yml 配置文件
[root@guojing prometheus]# cat node-info.yml
- targets: ["zunshang:9100","luodiyebei:9100","luodiyezhu:9101","dingdan:9100","guanggao:9100","guojing:9100"]
重新加载prometheus配置文件
[root@guojing prometheus]# netstat -tunlp|grep prometheus
tcp 0 0 172.18.138.10:9090 0.0.0.0:* LISTEN 6094/prometheus
kill -1 6094
grafana 展示 及 告警
展示job为node-export 所有服务器的系统资源信息
展示job为node-export dingdan服务器的系统资源信息
该模板导入过程跳过
使用grafana自带的邮件告警
由于该模板使用变量,告警无法使用
解决方法:在查询语句中用确定的值
用上述模板重新导入一份dashbord
修改查询语句
原查询语句
alert 配置介绍
- 定义规则名称
- 每隔多少时间评估
- 如果警报规则已配置并且查询违反了配置的阈值,则它会从 OK 变为 Pending。Grafana 不会针对该更改发送任何通知。一旦警报规则的触发时间超过持续时间,警报就会更改为 Alerting 并发送警报通知。 超过设置阈值的持续时间
- 查询的类型,可选项有很多,最大值、最小值、平均值等等
- (A,1m,now)A 是Query的查询语句得到的值,如A,B,C,D。 1m,now 指的是当前查询语句1min内的平均值、最大值、最小值等等。
- 设定的阈值 ,可选项有高于、低于、超出范围,在范围内等
node-exporter 查询语句详解
- 查询磁盘利用率
round((1 - (node_filesystem_avail_bytes{fstype=~"ext3|ext4|xfs|nfs"} / node_filesystem_size_bytes{fstype=~"ext3|ext4|xfs|nfs"} ))* 100)
node_filesystem_avail_bytes: 可用磁盘空间字节
node_filesystem_size_bytes:磁盘总空间字节
fstype=~“ext3|ext4|xfs|nfs”:通配相关的文件系统
round():四舍五入为最接近的整数
磁盘使用率 =( 1 - 可用磁盘空间字节/磁盘总空间字节 ) * 100
- 查询cpu利用率
(1 - (sum(increase(node_cpu_seconds_total{mode="idle"}[1m]))by (instance) ) / (sum(increase(node_cpu_seconds_total[1m])) by (instance) )) * 100
increase(node_cpu_seconds_total{mode=“idle”}[1m]):cpu空闲时间1分钟内增量
increase()[1m]: 表示变量在1分钟产生增量
sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))by (instance):每一个服务器所有的cpu空闲时间的总合
sum() by (instance): 先把所有的服务器空闲时间加在一起,在以 instance 标签 分开统计(即每台服务器)
node_cpu_seconds_total:cpu 所有类型时间的总合如下图所示
cpu 利用率 = 1 - 空闲cpu利用率
- 查询服务器负载
node_load1{} #1分钟负载
node_load5{} #5分钟负载
node_load15{} #15分钟负载
- 查询内存使用率
ceil((1 - (node_memory_MemAvailable_bytes{} / (node_memory_MemTotal_bytes{})))* 100 )
node_memory_MemAvailable_bytes{}:内存可用字节数
node_memory_MemTotal_bytes{}):内存最大字节数
ceil: 向上取整数
内存使用率= (1 - 内存可用字节数/内存最大字节数) * 100
- 文件句柄打开数
node_filefd_allocated{}
- 等待关闭的TCP连接数
node_sockstat_TCP_tw{}
- 网络流量流出 Mb/s
irate(node_network_transmit_bytes_total{instance="guojing",device!~"tap.*|veth.*|br.*|docker.*|virbr*|lo*"}[5m])*8 /1024/1024
- 网络流量流入 Mb/s
(irate(node_network_receive_bytes_total{instance="guojing",device!~"tap.*|veth.*|br.*|docker.*|virbr*|lo*"}[5m]))*8 / 1024 /1024
- 磁盘读 KB/s
sum (irate(node_disk_read_bytes_total{device!~"dm-0"}[5m]) /1024) by (instance)
- 磁盘写 KB/s
sum (irate(node_disk_read_bytes_total{device!="dm-0"}[5m]) /1024) by (instance)