暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Prometheus监控非K8S集群内机器

F6技术 2022-03-15
1901

背景

目前我们大部分的服务器都已经在k8s集群中,通过prometheus可以很方便的监控集群内的服务器。
但是目前我们还有一少量部分服务器还没上k8s,之前都是通过zabbix进行监控,监控相对比较分散,而且和k8s集群内监控也不够统一,在经历过几次可用区迁移,已经出现过多次监控漏迁移的情况。
因此我们迫切希望那些非k8s集群内的机器也能过通过prometheus进行监控。

安装NodeExporter

Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
node-exporter用于采集服务器层面的运行指标,包括机器的loadavg、filesystem、meminfo等基础监控,类似于传统主机监控维度的zabbix-agent。
node-export由prometheus官方提供、维护,不会捆绑安装,但基本上是必备的exporter。
https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
在需要监控的ecs上下载node-exporter 并启动node-exporter即可。

创建系统级别的用户和组

此用户帐户将用于运行node_exporter程序服务。

1groupadd -r prometheus 
2useradd -s /sbin/nologin -r -g prometheus prometheus

下载NodeExporter二进制文件

参考:https://github.com/prometheus/node_exporter/releases

1wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
2tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz
3mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin

查看node-exporter版本

1node_exporter --version

配置Systemd服务

https://github.com/prometheus/node_exporter/tree/master/examples/systemd

 1cat > /etc/systemd/system/node_exporter.service << 'EOF'
2[Unit]
3Description=Node Exporter
4Wants=network-online.target
5After=network-online.target
6
7[Service]
8User=prometheus
9ExecStart=/usr/local/bin/node_exporter
10
11[Install]
12WantedBy=default.target
13EOF

启动NodeExporter服务

1systemctl enable --now node_exporter

浏览器访问以下地址,查看node-exporter收集的metrics指标:

1curl http://xx.xx.xx.xx:9100/metrics

prometheus-operator配置

首先我们新建一个ServiceMonitor,用来统一监控非k8s集群内的ecs机器,名称就定为ecs-exporter。
另外我们还需要定义一个被监控机器的svc和endpoint。由于node-exporter默认端口是9100,所以endpoint中的port设置成9100即可。
这里以ocr这台ecs作为例子:
Service:

 1apiVersion: v1
2kind: Service
3metadata:
4  name: ocr-node-exporter
5  namespace: monitoring
6  labels:
7    app: ecs-exporter
8    ecs-app: node-exporter
9spec:
10  clusterIP: None
11  type: ClusterIP

Endpoints:

 1apiVersion: v1
2kind: Endpoints
3metadata:
4  name: ocr-node-exporter
5  namespace: monitoring
6
7subsets:
8  - addresses:
9      - ip: xx.xx.xx.xx
10    ports:
11      - name: http-metrics
12        port: 9100
13        protocol: TCP

ServiceMonitor:

 1apiVersion: monitoring.coreos.com/v1
2kind: ServiceMonitor
3metadata:
4  name: ecs-exporter
5  namespace: monitoring
6  labels:
7    app: ecs-exporter
8spec:
9  selector:
10    matchLabels:
11      app: ecs-exporter
12  jobLabel: ecs-app
13  endpoints:
14    - port: http-metrics
15      interval: 15s
16      honorLabels: true
17      scheme: http

小技巧

yaml文件apply -f之后如果想快速让配置生效,可以通过下面这个命令进行快速reload

1curl -X POST http://prometheus.xxx.com/-/reload

配置完成后就可以在prometheus的target中看到了
http://prometheus.xxx.com/targets

image.png

由于job的名称默认是endpoints的名称,为了能复用k8s node节点的告警规则,我们需要将job的名称也改成node-exporter,但是由于node-exporter这个名称的ServiceMonitor已经存在,所以只能想别的办法
这里我们使用jobLabel这个标签来实现job名称的替换。

 1// By default, generate a safe job name from the service name.  We also keep
2// this around if a jobLabel is set in case the targets don't actually have a
3// value for it.
4relabelings = append(relabelings, yaml.MapSlice{
5    {Key: "source_labels", Value: []string{"__meta_kubernetes_service_name"}},
6    {Key: "target_label", Value: "job"},
7    {Key: "replacement", Value: "${1}"},
8})
9if m.Spec.JobLabel != "" {
10    relabelings = append(relabelings, yaml.MapSlice{
11        {Key: "source_labels", Value: []string{"__meta_kubernetes_service_label_" + sanitizeLabelName(m.Spec.JobLabel)}},
12        {Key: "target_label", Value: "job"},
13        {Key: "regex", Value: "(.+)"},
14        {Key: "replacement", Value: "${1}"},
15    })
16  }

这里我们统一使用ecs-app这个标签进行配置,在svc中标签ecs-app值设置成node-exporter。
然后在ServiceMonitor中设置jobLabel 为ecs-app即可,这样就可以将job统一替换成node-exporter了。

同样我们从configuration中也看到替换的规则
访问 http://prometheus.xxx.com/config

接入Grafana

image.png

使用grafana 的仪表盘模板导入ID=10604的仪表盘 ,点击 import导入即成功。
通过以上配置我们就可以使用grafana原有看板看到新加的ecs监控内容了。
image.png


后续如果要增加别的ecs监控,也可以通过上述方法,只需要增加新的svc和enpoint即可,另外注意在svc中增加ecs-app:node-exporter
标签,这样就能复用k8s node节点的告警规则了。

参考文献

https://www.kancloud.cn/willseecloud/prometheus/1904334



文章转载自F6技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论