zoukankan      html  css  js  c++  java
  • prometheus+alertmanager+granafa监控总结,安装基于docker-compose(长期更新)

    最近自己个人尝试在使用prometheus+grafana监控工作业务上的指标, 但是报警功能还没有实际用上,但是感觉是很好用,写下一些啃prometheus官网文档并且自己用到的一些配置的总结,后续还用到其他东西再更新。如果想深入理解还是请看官方文档(https://prometheus.io/docs/introduction/overview/)

    安装

    直接在操作系统上安装

    docker compose

    version: "3"
    
    networks:
         monitor:
            driver: bridge
    
    services:
        prometheus:
            image: prom/prometheus
            container_name: prometheus
            restart: always
            volumes:
                - ./prometheusConfig:/etc/prometheus
                - ./data/prometheus:/prometheus
            ports:
                - "9090:9090"
            hostname: prometheus
            networks:
                - monitor
            command:
                - "--config.file=/etc/prometheus/prometheus.yml"
                - "--storage.tsdb.path=/prometheus"
                - "--web.console.libraries=/usr/share/prometheus/console_libraries"
                - "--web.console.templates=/usr/share/prometheus/consoles"
                - "--storage.tsdb.retention.time=3d"
                - "--web.enable-lifecycle"
    
        alertmanager:
            image: prom/alertmanager
            container_name: alertmanager
            hostname: alertmanager
            restart: always
            ports:
                - '9093:9093'
            volumes:
                - ./data/alertmanager:/alertmanager/data
                - ./alertmanager.yml:/alertmanager.yml
            command:
                - "--config.file=/alertmanager.yml"
            networks:
                - monitor
    
        grafana:
            image: grafana/grafana
            container_name: grafana
            restart: always
            ports:
                - "3000:3000"
            volumes:
                - ./data/grafana:/var/lib/grafana
            networks:
                - monitor
    

    prometheus

    理解

    prometheus是一个时序性数据库,能够比较高效, 方便的采集时序列数据并以时间建立索引,以及维护数据的存储时间以免磁盘被打满。毕竟时序性数据库主要就是用来监控,监控指标存储过早之前的数据并没什么意义。

    此外prometheus还提供规则功能,报警规则用于报警,但是prometheus只是做发现以及生成需要报警的消息, 发送报警的工作由alertmanager来完成。

    prometheus.yml

    # prometheus_config/prometheus.yml
    global: # 全局变量
        scrape_interval: 1m        # 访问目标间隔 可以在job单独配置
        evaluation_interval: 30s   # 访问规则的间隔
    
    rule_files: # 规则文件
    	- 'rules/*'
    	
    alerting:
    	alertmanagers:
    		- scheme: http # 使用http协议发起请求
    			static-configs:
    				- targets: [alertmanager:9093]
    
    scrape_configs:
        - job_name: 'nginx_demo'
        	scrape_interval: 10s
          #static_configs:  # 静态配置
              #- targets: ['192.168.56.100:9100']
          file_sd_configs:  # 动态配置
            - files:
              - /etc/prometheus/nginx.yml
              refresh_interval: 1m  # 刷新时间 即修改后最大生效时间
          metrics_path: "/metrics" # 默认数据采集路径 不配置的话就是 metrics
    
    # prometheus_config/nginx.yml
    - targets:
        - "192.168.56.100:9100"
    

    metrics接口返回格式

    key0 value0
    key1 value1
    key2{label0=value0} value2
    

    nginx_2xx 10234
    nginx_3xx 1023
    nginx_4xx 12
    nginx_5xx{level="error"} 239
    

    报警规则文件 rules/alert.yml

    # rules/alert.yml
    groups:
        - name: nginx_example
          rules:
              - alert: test
                expr: nginx_5xx > 100
                for: 1m
                labels:
                	serverity: warning
                	process: nginx
                annotations:
                    summary: "nginx 5xx is too much"
                    description: "instance: {{ $labels.instance }} number:{{ $value }}"
    

    alertmanger

    理解

    ​ alertmanager进程作用是接收来自prometheus进程的报警规则消息后, 进行下一步动作(通知到人), 而alertmanager并不真正关心指标(规则)的具体细节, 而只关心告警规则的labels用于进行路由分类 将告警以合适的方式发送到应当通知到的人而不骚扰其他人。

    ​ 同时altermanager提供的高级功能则是 将短时间内的报警邮件进行统一发送以及重复持续的报警有间隔的发送, 有过被重复报警刷满收件箱前几页的同学 经常能体会到这个功能的人性化。

    ​ 但最重要的还是制定好报警规则, 少即是多, 多即是无, 大量无意义的报警不仅只是骚扰到收件人, 更会让真正需要被注意到的报警被掩盖,失去报警这件事情原本的意义。

    alertmanager.yml

    # alertmanager.yml
    global:
    	# 邮件报警设置 都可以在 receiver单独配置
    	smtp_from: example@demo.com
    	smtp_smarthost: smtp.example.org:587
    	smtp_auth_username: example@demo.com
    	smtp_auth_password: password
    	smtp_require_tls: false   # 协议是否使用tls 需要注意默认是 true
    	
    	# 报警时调用api 暂略
    	
    route:   # 路由 这将会是一个树形数据结构, 如果不满足任何子节点 才会使用本节点配置 核心数据是规则的label
    	receiver: default      # 接收者  下面会定义
    	group_by: ['serverity'] # 分组使用的labels 属性  如果是 ... 则使用所有labels分组
    	
    	group_interval: 1m   # 针对该组发送报警邮件的间隔 间隔内多封报警会集合后发送一封
    	repeat_interval: 20m # 相同报警邮件发送频率间隔 如报警a b两个规则邮件发送后, c也触发了则算是新的报警 abc 1m 后一起发送
    	
    	match:  # 全等匹配
    		serverity: notice
    	
    	match_re: # 正则匹配
    		serverity: warning | error
    	
      continue: true   # 是否尝试匹配子节点路由 注意 默认是false
      
      routes: # 子节点路由
      	- [route] # 也是route结构
    		
    
    receivers:  # 接收者
    	- name: default
    	  email_config:   # 接受者的邮件设置
    	  	to: all@demo.com
    

    grafana

    登录

    默认账号密码都是admin

    增加prometheus作为数据源

    • 右边侧边栏 Configuration --> Data Sources 进入配置页
    • 右上角 Add data source 按钮 进入增加数据源页
    • 选择prometheus 并进行host等配置即可

    增加第一个简单折线图标

    • 在Home页面 选择Add dashboard

    • 选择右上角按钮 Add panel

    • 选择Add Query 进入pannel配置页面

    • Query 选择prometheus

    • 可以在一个panel显示多个指标 这里只弄一个 Metrics框输入nginx_2xx Min time interval框和采集时间时间间隔保持一致 如 10s

    • 点击页面左下角设置图标 给panel title改为 nginx

    • 保存即可

    其他

    • panel可以分多个ROW 创建一个新ROW的方法是新建一个panel 点击conver to row
    • row的排序拖动按钮在row标题最右边 黑色皮肤下可能会忽略
  • 相关阅读:
    Module:template
    Grunt:GruntFile.js
    Grunt:常见错误
    架构:架构-1
    架构:目录
    DS:template
    Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态
    Jasper-Api:接口测试
    linux服务之git
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
  • 原文地址:https://www.cnblogs.com/Me1onRind/p/12000103.html
Copyright © 2011-2022 走看看