k8s集群+传统服务器集群自定义监控node_exporter

9/1/2021 k8s集群+传统服务器集群自定义监控node_exporter

# k8s集群+传统服务器集群自定义监控node-exporter

# 由于我的项目是在两套环境上运行:k8s集群+传统服务器集群所以记录下在传统服务器集群自定义监控node-exporter

# Prometheus监控平台配置node_exporter

源码包上边有直接下载解压

tar -xvf node_exporter-*.linux-amd64.tar.gz -C /usr/local/

mv node_exporter-0.18.1.linux-amd64/ node_exporter

可以修改默认端口

vim node_exporter    #查找9100,然后重启node_exporter

image

将node_exporter设置为系统服务开机自启

cat > /etc/systemd/system/node_exporter.service << "EOF"
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter

[Service]
ExecStart=/usr/local/node_exporter/node_exporter
ExecStart=                                                                                                   #新加参数的前一行需要添加占位
ExecStart=/usr/local/node_exporter/node_exporter --collector.textfile.directory=/usr/local/node_exporter/key #如果不做自定义监控不是node_exporter添加系统服务可以不加此行
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

systemctl enable node_exporter

systemctl start node_exporter

systemctl status node_exporter

[root@pro-zab-test3 key]# lsof -i:9100
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node_expo 11798 root    3u  IPv6  87556      0t0  TCP *:jetdirect (LISTEN)

http://ip:9100/metrics访问 image

# prometheus配置

传统方式 安装的prometheus打开prometheus.yml 如果是按照我之前的在k8s中部署的prometheus 打开prometheus-configmap.yaml

进行添加 | 修改

    - job_name: linux-node
      static_configs:
      - targets:
        - 172.22.254.87:9100   #node_exporter主机
        - 172.22.254.86:9100   #node_exporter主机

image

传统方式直接重启prometheus即可 k8s方式 kubectl apply -f prometheus-configmap.yaml 更新configmap配置文件到prometheus ,再热更新使配置文件生效 curl -X POST http://10.1.230.219:9090/-/reload

# 在传统服务器上自定义node_exporter监控

首先创建目录key目录

cd /usr/local/node_exporter/ && mkdir key

创建监控程序或服务脚本key.sh,我这里做了案例,其他程序或者服务思路一致

#!/bin/bash
#node_exporter_status_scripts
status=`systemctl status node_exporter | grep "Active" | awk '{print $2}'`

if [ $status=="active" ]
then
  echo "node_exporter_status 0"
else
  echo "node_exporter_status 1"
fi
#alertgo_status_scripts

alertgostatus=`lsof -i:8088`

if [ "$?" = 0 ]
then
  echo "alertgo_status 0"
else
  echo "alertgo_status 1"
fi
chmod +x key.sh

配置计划任务

vim /etc/crontab

* * * * * root bash /usr/local/node_exporter/key/key.sh > /usr/local/node_exporter/key/key.prom

由于新加了自定义监控配置项,所以需要把自定义配置项的保存目录告诉node_exporter,我们的node_exporter使用以系统服务来启动的,所以需要在node_exporter中加入以下内容,在部署上边node_exporter中有提到

ExecStart=
ExecStart=/usr/local/node_exporter/node_exporter --collector.textfile.directory=/usr/local/node_exporter/key

到此就结束了,如果配置正确,重启一下node_exporter再次刷新页面可以看到 根据服务的启停可以看到

[root@pro-zab-test3 key]# cat key.prom 
node_exporter_status 0
alertgo_status 0

image image

在prometheus 中也可以用promSql进行查询制表

image image

# 模拟故障

在prometheus-rules.yaml中添加rules规则,传统部署正常添加即可,我这里用k8s方式示例

linux-node.rules: |
    groups:
    - name: linux-node.rules
      rules:
      - alert: alertgoDone
        expr: |
           alertgo_status==1
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }}: alertgo is lost\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
 kubectl apply -f prometheus-rules.yaml 更新configmap配置文件到prometheus ,再热更新使配置文件生效 curl -X POST http://10.1.230.219:9090/-/reload 

我这里alertgo是go开发的二进制,我直接杀掉进程即可模拟 查询进程号

[root@pro-zab-test3 key]# lsof -i:8088
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
alertGoV6 11984 root    3u  IPv6  89542      0t0  TCP *:radan-http (LISTEN)

[root@pro-zab-test3 key]# cat key.prom 
node_exporter_status 0
alertgo_status 0

杀死进程

kill 11984

再次查看key.prom,发现value为1

[root@pro-zab-test3 key]# cat key.prom 
node_exporter_status 0
alertgo_status 1

查看prometheus alerts 1630393080(1) 钉钉已报警

1630393114(1)

# grafana部分后续更新

1630466573

1630466575(1)