本篇文章基于Prometheus-Operation,收集Redis、MySQL、RabbitMQ的监控信息并报警
Redis钉钉报警
数据收集
首先启动一个Redis的信息收集的应用程序
代码语言:javascript复制docker run -d --name redis_exporter -e REDIS_ADDR="redis://172.16.40.170:6379" -e REDIS_PASSWORD="123456”-p 9121:9121 oliver006/redis_exporter
此时我们打开浏览器,访问ip:9121这个地址就可以获取到redis的监控信息了。
数据保存
这一步就是把上方应用程序收集的监控数据保存到prometheus中 将信息收集程序通过Endpoints、Service、ServiceMonitor与k8s中的prometheus绑定
代码语言:javascript复制apiVersion: v1
kind: Endpoints
metadata:
name: redis-metrics
namespace: monitoring
labels:
k8s-app: redis-metrics
subsets:
- addresses:
- ip: 172.16.40.170
ports:
- name: redis-exporter
port: 9121
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: redis-metrics
namespace: monitoring
labels:
k8s-app: redis-metrics
spec:
type: ClusterIP
clusterIP: None
ports:
- name: redis-exporter
port: 9121
protocol: TCP
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: redis-metrics
namespace: monitoring
labels:
app: redis-metrics
k8s-app: redis-metrics
prometheus: kube-prometheus
release: kube-prometheus
spec:
selector:
matchLabels:
k8s-app: redis-metrics
namespaceSelector:
matchNames:
- monitoring
endpoints:
- port: redis-exporter
interval: 15s
数据展示
此时在grafann中添加一个模板763即可成功展示刚刚收集到的数据
报警
首先你需要在一个钉钉群建一个报警集群人,集群人类型选择自定义,然后在这个机器人身上你会发现一个token,记住这个token哦
紧接着需要对prometheus做一下改造,来到安装包的 contrib/kube-prometheus/manifests/目录 在这个目录下新建一个alertmanager.yaml文件
代码语言:javascript复制global:
resolve_timeout: 5m
route:
group_by: ['job']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: webhook
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://172.16.40.165:32505'
send_resolved: true
通过如下命令替换原有的配置
代码语言:javascript复制kubectl delete secret alertmanager-main -n monitoring
kubectl create secret generic alertmanager-main --from-file=alertmanager.yaml -n monitoring
因为钉钉与普罗米修斯的数据格式是不一样的,所以在这里还不能直接把普罗米修斯的数据发给钉钉。 上方有一个url地址,这个地址呢,需要我们自己写个小程序,把普罗米修斯发来的数据经过格式转换后发给钉钉,而钉钉的格式要求可见这个文档
代码语言:javascript复制https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
MySQL钉钉报警
使用如下方式收集MySQL监控信息
代码语言:javascript复制docker run -d --name mysql_exporter -e DATA_SOURCE_NAME="root:123456@(172.16.40.159:3306)/" -p 9104:9104 prom/mysqld-exporter
数据存储参见上方Redis的配置 数据展示使用Grafan模板736
RabbitMQ钉钉报警
使用如下方式收集MySQL监控信息
代码语言:javascript复制docker run -d --name rabbitmq --env RABBIT_URL="http://172.16.40.169:15672" --env RABBIT_USER="monitoring" --env RABBIT_PASSWORD="monitoring" -p 9419:9419 kbudde/rabbitmq-exporter
注意RabbitMQ的用户必须具有monitoring权限,否则会报如下错误
代码语言:javascript复制time="2019-08-07T01:17:08Z" level=error msg="Error while retrieving data from rabbitHost" error="<nil>" host="http://172.16.40.169:15672" statusCode=401
time="2019-08-07T01:17:08Z" level=warning msg="retrieving node failed" error="Error while retrieving data from rabbitHost"
数据存储参见上方Redis的配置 数据展示使用Grafan模板4279