docker-compose搭建prometheus+grafana+钉钉告警

news2024/11/25 1:28:17

前言:

本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态;

配合granfana面板构建监控大屏;

由于grafana的报警不是很友好,使用dingtalk,配合altermanager,实现钉钉报警。

一、编写docker-compose(开门见山)

docker环境搭建不再介绍,网上已经一大堆。

 首先介绍一下需要部署的组件:

  • prometheus:         监控核心组件
  • cadvisor:               用于获取docker容器的指标
  • node-exporter :     用户获取服务器的指标
  • grafana:                监控图表好用的可视化组件
  • alertmanager:       告警组件
  • dingtalk:                alert告警不支持钉钉,需要借助dingtalk插件

首先创建一个prometheus目录,用来放docker-compose文件已经集群中需要挂载的配置文件。

在prometheus下面创建两个目录

prome:用来存放prometheus相关配置文件

alert:用来存放报警相关配置文件

直接上docker-compose.yml文件

version: '2'

networks:
    monitor:
        driver: bridge

services:
    prometheus:
        image: prom/prometheus
        container_name: prometheus
        hostname: prometheus
        restart: always
        command:
          - '--config.file=/etc/prometheus/prometheus.yml'
          - '--web.enable-lifecycle'
          - '--storage.tsdb.retention.time=30d'
        volumes:
            - ./prome:/etc/prometheus
        ports:
            - "29011:9090"
        networks:
            - monitor

    alertmanager:
        image: prom/alertmanager
        container_name: alertmanager
        hostname: alertmanager
        restart: always
        volumes:
            - /home/docker/prometheus/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml
        ports:
            - "29012:9093"
        environment:
          - TZ=Asia/Shanghai
        networks:
            - monitor

    grafana:
        image: grafana/grafana
        container_name: grafana
        hostname: grafana
        restart: always
        ports:
            - "29013:3000"
        networks:
            - monitor

    node-exporter:
        image: quay.io/prometheus/node-exporter
        container_name: node-exporter
        hostname: node-exporter
        restart: always
        ports:
            - "29014:9100"
        networks:
            - monitor

    cadvisor:
        image: google/cadvisor:latest
        container_name: cadvisor
        hostname: cadvisor
        restart: always
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:rw
            - /sys:/sys:ro
            - /home/docker/:/var/lib/docker:ro
        ports:
            - "29015:8080"
        networks:
            - monitor

    dingtalk:
        image: timonwong/prometheus-webhook-dingtalk
        container_name: dingtalk
        hostname: dingtalk
        restart: always
        volumes:
          - ./alert/config.yml:/etc/prometheus-webhook-dingtalk/config.yml
          - ./alert/dingtalk.tmpl:/opt/dingtalk/template/dingtalk.tmpl
        ports:
          - "29016:8060"
        environment:
          - TZ=Asia/Shanghai
        networks:
          - monitor

二、prometheus相关配置文件

注:以下文件地址及命令均为自己随机命名,大家可以自行命令,对应好配置文件中的地址引用即可

1、prometheus/prome/promethues.yml文件是prometheus的配置文件,用来配置一些组件及监控信息,简单如下,需要将ip替换成自己实际的ip地址。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets: ['ip:29012']

rule_files:
  - "/etc/prometheus/rules/*.rules"
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['ip:29011']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['ip:29015']

2、在prometheus中定义报警规则,达到报警条件,就会通知alertmanager组件进行报警

     prometheus/prome/rules/promethues.yml

groups:
- name: 主机存活告警  # 命名
  rules:
  - alert: 主机存活告警 # 命名
    expr: up == 0 # 表达式,分析指标判定告警
    for: 60s  # 触发告警持续时间
    labels:   # 自定义告警标签
      severity: warning
    annotations:   # 告警内容注释,根据需要制定
      summary: "{{ $labels.instance }} 宕机超过1分钟!"

- name: 主机内存使用率告警
  rules:
  - alert: 主机内存使用率告警
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "内存利用率大于80%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"

- name: 主机CPU使用率告警
  rules:
  - alert: 主机CPU使用率告警
    expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 70
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "CPU近10分钟使用率大于70%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"

- name: 主机磁盘使用率告警
  rules:
  - alert: 主机磁盘使用率告警
    expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "磁盘使用率大于80%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"

三、报警模块相关配置文件

1、alertmanager相关

alertmanager是prometheus依赖的报警组件,所有的报警消息均是依赖alertmanager进行报警。

由于要配置钉钉报警,默认alertmanager不支持钉钉,需要引用dingtalk组件,以下配置文件中需要配置dingtalkd的url
        prometheus/alert/alertmanager.yml

global:
  # 每5分钟检查一次是否恢复
  resolve_timeout: 5m
# route用来设置报警的分发策略
route:
  # 采用哪个标签来作为分组依据
  group_by: ['alertname']
  # 组告警等待时间。也就是告警产生后等待30s,如果有同组告警一起发出
  group_wait: 30s
  # 两组告警的间隔时间
  group_interval: 30s
  # 重复告警的间隔时间,减少相同告警的发送频率
  repeat_interval: 1h
  # 设置默认接收人
  receiver: 'webhook'
receivers:
- name: 'webhook'
  webhook_configs:
  - url: 'http://ip:29016/dingtalk/webhook/send'
    send_resolved: true

2、 dingtalk相关

首先要添加钉钉报警机器人:

在钉钉上创建一个报警群,打开群设置,选择机器人。

添加一个自定义的机器人

 选择加签,创建完成后,会生成机器人的接口,复制保存后用。

 

 回到dingtalk组件中,配置相对应的钉钉机器人的接口。

        prometheus/alert/config.yml

## Request timeout
## timeout: 5s
### Uncomment following line in order to write template from scratch (be careful!)
##no_builtin_template: true
### Customizable templates path
#templates:
#- '/opt/dingtalk/template/dingtalk.tmpl'
### You can also override default template using `default_message`
### The following example to use the 'legacy' template from v0.3.0
##default_message:
##  title: '{{ template "legacy.title" . }}'
##  text: '{{ template "legacy.content" . }}'
### Targets, previously was known as "profiles"
targets:
  webhook:
    url: 'https://oapi.dingtalk.com/robot/send?access_token=????相对应的token?????'
    # secret for signature
    secret: '相对应的secrt'

然后创建报警的模板格式

        prometheus/alert/dingtalk.tmpl

{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}

{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
告警状态:{{ .Status }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
告警主机:{{ .Labels.instance }}
告警详情:{{ .Annotations.description }}
告警时间:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
{{ end }}{{ end }}

{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
告警状态:{{ .Status }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
告警主机:{{ .Labels.instance }}
告警详情:{{ .Annotations.description }}
告警时间:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
恢复时间:{{ (.EndsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
{{ end }}{{ end }}

{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}
{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**Prometheus故障告警**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
**Prometheus故障恢复**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}
{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

四、运行docker-compose

然后运行docker-compose。所有的容器和配置都会启动

docker-compose up -d

正常所有的容器都会拉起来,如果遇到状态为restarting,可能有问题,需要docker logs查看下具体报错信息,相对应解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Crosswalk App UI 自动化

目录 前言: Crosswalk WebDriver 实现 Crosswalk app UI 自动化实现 前言: Crosswalk是一个基于Chromium的开源项目,它提供了一个跨平台的应用程序运行时环境,可以帮助开发人员在移动设备上构建高性能的Web应用程序。在Crossw…

“体验家”亮相第六届IAIC成都国际医美产业大会

6月23日-25日,第六届IAIC成都国际医美产业大会暨“医美之都”高峰会议在成都世纪城国际会议中心成功举行。本次大会邀请了来自国家药品监督管理局、部分省市地区的相关领导莅临指导,以及来自全国100医美行业头部平台,近2000位医美产业领军代表…

关于前后端JSON解析差异问题与思考

目录 一、问题回顾 二、问题思考 2.1 JavaScript如何解析json字符串 2.2 Java如何解析json字符串 2.3 Java和JavaScript交互如何出现JSON解析问题 三、经验总结 本文主要总结了作者在一次涉及流程表单的需求发布中遇到的问题及思考总结。 一、问题回顾 在一次涉及流程表…

FPGA驱动SPI屏幕(附完整工程)

一. 简介 相信大家都玩过屏幕,在FPGA上使用最多的就是VGA/HDMI接口的显示器了,这两种显示器的优点就不用说了,缺点就是体积比较大,而且价格比较贵,对于追求便携/价格低的我来说,SPI接口的屏幕才是我的首要…

实战操作接口自动化测试

最近接到一个接口自动化测试的case,并展开了一些调研工作,最后发现,使用pytest测试框架并以数据驱动的方式执行测试用例,可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

文件IO_文件截断_ftruncate,truncate(附Linux-5.15.10内核源码分析)

目录 1.为什么需要文件截断? 2.truncate函数介绍 2.1 truncate函数 2.2 truncate函数内核源码分析 2.3 truncate函数使用示例 3.ftruncate函数介绍 3.1 ftruncate函数 3.2 ftruncate函数内核源码分析 3.3 ftruncate函数使用示例 3.4 ftruncate和文件偏移量…

8年测试总结,App自动化测试-Appium常遇问题+解决(详细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 问题1&#xff1a…

小白入门C#编写MVC登录小案例

一、C#编写MVC登录小案例 🚀1. 新建MVC项目。 🚀2. 在Models文件夹下创建一个User类,包含登录所需要的用户名和密码属性。 namespace MvcLogin.Models {public class User{public string UserName{get; set;}public string Password{get;se…

基于Java+SpringBoot+Vue+Uniapp前后端分离考试学习一体机设计与实现(视频讲解,已发布上线)

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

计算机基础专升本笔记三 计算机中的数据表示、编码

计算机基础专升本笔记三计算机中的数据表示、编码 一、计算机中的数据的单位 (一)数据存储的单位有哪些? 计算机存储单位有 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示。我们经常将Byte简称为B,将KB简称K。 &#xff08…

微信怎么自动加好友,通过好友后自动打招呼

很多客户朋友每天花大量的时间用手机搜索添加好友,这样的添加很集中也容易频繁,而且效率还低。对方通过后,有时也不能及时和客户搭建链接,导致客户也流失了。 现在可以实现自动添加和自动打招呼哦,只需要导入数据、设置…

linux查看ipynb文件

linux查看ipynb文件 使用jupyter查看 使用jupyter查看 安装 pip install jupyter添加配置好的环境到jupyter notebook的kernel中: python -m ipykernel install --user --name mmdet --display-name "mmdet"运行jupyter notebook (在ipynb…

精选了6款好用的AI绘画工具,值得一试

近几年来,伴随着AI技术的发展,设计领域发生了巨大的变化。AI绘图工具的出现很大程度上减轻了设计师的工作负担,本文精选了6款优秀的AI绘图工具为大家推荐,一起来看看吧! 1、即时灵感 即时灵感作为国产的AI绘图工具&a…

相机标定学习笔记

Kalibr 是标定工具中,唯一一个可以标定camToImu的,是vio必不可少的工具,其他的都有替代品。所以学习多种开源算法进行相机标定,并记录学习相机标定的过程。 一、相机标定 1、在场景中放置一个已知的物体 (1&#xff…

ENSP实验四:搭建VPN(GRE,配置安全策略)

首先分析一下数据的流向: PC1->PC2 1、FW1:trust->dmz 【192.168.1.1->192.168.2.1 ICMP】 2、AR1->AR2:【202.1.1.1->202.1.3.1|GRE|192.168.1.1->192.168.2.1 icmp】 3、FW2: ①untrust->local …

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科,用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务(例如问题回答和算术推理)上的能力。 开发人员使用提示工程…

【图像处理OpenCV(C++版)】——5.6 图像平滑之联合双边滤波

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

用Vue如何实现低代码开发平台?

前言 在众多开发技术中,Vue组件化开发技术以其卓越的灵活性和高效性备受瞩目。 低代码平台相信不少人知道它的存在,而且现在大部分公司都在开发自己的低代码平台,首先我们来看看低代码平台可视化界面: 官网:https://ww…

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS 在 iOS 中虚拟化 Windows、Linux 和 Unix 请访问原文链接:https://sysin.org/blog/utm-4/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

Sql构建

Sql构建 SQL 构建对象介绍 之前通过注解开发时,相关 SQL 语句都是直接拼写的,一些关键字写起来比较麻烦、而且容易出错 MyBatis 提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句 sql拼接测试: public class …