💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,AlertManager管理这些报警信息,包括silencing、inhibition,聚合报警信息过后通过email、PagerDuty、HipChat、Slack 等方式发送消息提示。 **自定义监控** 网上的教程大多为使用prometheus监控k8s系统自身的指标,这里写一下使用自定义监控去采集业务pod中输出的指标。 1,以java程序为例,首先需要在代码中使用prometheus-sdk开放metrics接口,在外部节点通过get接口可以查询到指标,访问pod的ip结果如下: ![](https://i.loli.net/2019/04/03/5ca431d2179e7.png) 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' ~~~ ![](https://i.loli.net/2019/04/03/5ca4349e42f3a.png) 查看prometheus中已经采集到了service对应的endpoints的metrics 详细过程参考:https://prom-int.rouchi.com **创建报警规则** 查看 prometheus-configMap.yaml,先定义rule_files的文件位置/etc/prometheus/rules ,然后通过rules.yml | 创建该文件,添加报警规则只需要在此部分写规则; ![](https://box.kancloud.cn/5f8411aa3c4f015e0272000247ef26f8_1148x491.png) **定义报警媒介** ![](https://box.kancloud.cn/5a1444d519281df44c657e3a41b7ce90_532x425.png) 两个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。