Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,AlertManager管理这些报警信息,包括silencing、inhibition,聚合报警信息过后通过email、PagerDuty、HipChat、Slack 等方式发送消息提示。
**自定义监控**
网上的教程大多为使用prometheus监控k8s系统自身的指标,这里写一下使用自定义监控去采集业务pod中输出的指标。
1,以java程序为例,首先需要在代码中使用prometheus-sdk开放metrics接口,在外部节点通过get接口可以查询到指标,访问pod的ip结果如下:

2,在prometheus-configmap.yaml中添加采集job
~~~
- job_name: backend-prod
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- action: keep
regex: true
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_backend
- action: replace
regex: (https?)
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_scheme
target_label: __scheme__
- action: replace
regex: (.+)
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_path
target_label: __metrics_path__
- action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
source_labels:
- __address__
- __meta_kubernetes_service_annotation_prometheus_io_port
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: kubernetes_namespace
- action: replace
source_labels:
- __meta_kubernetes_service_name
target_label: kubernetes_name
~~~
__meta_kubernetes_service_annotation_prometheus_io_backend
annotation后面的prometheus_io_backend
是自定义的,通过这个标签去发现指定的service;
__meta_kubernetes_service_annotation_prometheus_io_path
__meta_kubernetes_service_annotation_prometheus_io_port
这两个也是自定义的字段,设置的是用path和port指定的端口和路径替换prometheus默认值,去抓取目标。
修改后重新加载prometheus配置
deployment的service中增加annotations字段
~~~
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/backend: 'true'
prometheus.io/port: '8123'
prometheus.io/path: 'metrics'
~~~

查看prometheus中已经采集到了service对应的endpoints的metrics
详细过程参考:https://prom-int.rouchi.com
**创建报警规则**
查看 prometheus-configMap.yaml,先定义rule_files的文件位置/etc/prometheus/rules ,然后通过rules.yml | 创建该文件,添加报警规则只需要在此部分写规则;

**定义报警媒介**

两个webhool为钉钉和邮件,钉钉配置[参考官网](https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.6LZJ6G&treeId=257&articleId=105735&docType=1)
一个报警信息在生命周期内有下面3中状态:
inactive: 表示当前报警信息既不是firing状态也不是pending状态;
pending: 表示在设置的阈值时间范围内被激活了;
firing: 表示超过设置的阈值时间被激活了;
**部署prometheus-webhook-dingtalk**
上面截图中的webhook_configs -url:并不是钉钉机器人的地址,
而是自己单独部署的一个转发服务,钉钉机器人对数据格式有严格要求,直接将prometheus数据发送到钉钉机器人是不通的,需要自己搭建转发服务,将报警数据发送到此服务,再有此服务处理格式后转发到钉钉
部署参考源站:
https://github.com/timonwong/prometheus-webhook-dingtalk/blob/master/README.md
**注**:修改configMap并更新后,需要重启prometheus才能生效,由于使用k8s部署无法重启,这时需要用到prometheus的reload接口,此功能需要开启lifecycle, 4-prometheus-alertmanager-deploy.yaml中已经设置好了:--web.enable-lifecycle,并且增加了一个自动reload的镜像,apply后会自动加载。或者手动 curl -X POST {你的IP}:30003/-/reload,即可重启prometheus。
- 部署介绍
- 一,系统初始化操作
- 二,创建TLS证书
- 三,创建kubeconfig文件
- 四,安装etcd集群
- 五,部署master节点
- 六,部署node节点
- 附,新增node节点
- 七,网络插件calico
- 八,安装DNS组件
- 九,安装dashboard
- 十,服务发布nginx-ingress
- 十一,prometheus监控部署
- 十二,prometheus自定义监控和报警
- 十三,Harbor私有仓库
- 十四,NFS数据持久化
- 其他
- linux相关文档
- centos7.4搭建openvpn
- docker-compose搭建ldap
- docker-compose搭建openvpn
- docker-compose搭建superset
- docker-compose搭建jenkins
