0
点赞
收藏
分享

微信扫一扫

搭建Prometheus+Grafana+Alertmanager

追风骚年 2022-02-19 阅读 123

一、原理与特性(功能)

1.主要特性

  • 多维数据模型(时序由 metric 名字和 k/v 的labels构成)
  • 灵活的查询语言(PromQL)
  • 无依赖的分布式存储;单节点服务器都是自治的
  • 采用 http 协议,使用pull模式拉取数据,简单易懂
  • 监控目标,可以采用服务发现和静态配置方式
  • 支持多种统计数据模型和界面展示。可以和Grafana结合展示。

2.架构原理图

 图片来自:Overview | Prometheus

二、安装Prometheus

1.安装主要组件如下:

  • Prometheus Server
  • 被监控对象exporter组件
  • 数据可视化工具 Grafana
  • 数据上报网关 push gateway
  • 告警系统 Alertmanager

2.安装prometheus服务端

官方下载地址:Download | Prometheus

由于官方地址不稳定,不追求最新版可以用我下载好的网盘地址:百度网盘 请输入提取码 8888

#1.通过软件将安装包发到主机
[root@module 1-prometheus]# tar -xf prometheus-2.33.3.linux-amd64.tar.gz  #解压软件包
[root@module 1-prometheus]# mv prometheus-2.33.3.linux-amd64/ /usr/local/prometheus #将软件包移动到安装软件的目录并改名
[root@module 1-prometheus]# cd /usr/local/prometheus/  #进入到程序目录
[root@module prometheus]# ./prometheus --version       #查看版本
prometheus, version 2.33.3 (branch: HEAD, revision: 56e14463bccfbb6a8facfb663fed5e0ca9f8b387)
  build user:       root@4ee34e4f7340
  build date:       20220211-20:48:21
  go version:       go1.17.7
  platform:         linux/amd64
[root@module prometheus]# sed -i '$s/"localhost:/"192.168.1.123:/' prometheus.yml #修改配置文件,IP为本机地址
[root@module prometheus]# ./promtool check config ./prometheus.yml  #检查配置文件语法
Checking ./prometheus.yml  
 SUCCESS: ./prometheus.yml is valid prometheus config file syntax

#2.编写service文件
[root@module prometheus]# vim /usr/lib/systemd/system/prometheus.service #编写service文件,便于之后使用
[Unit]
Description=Prometheus Monitoring System  #描述信息
After=network.target                      #在哪个服务之后启动

[Service]
ExecStart=/usr/local/prometheus/prometheus \         #执行systemctl start需要启动的进程名称
   --config.file=/usr/local/prometheus/prometheus.yml \  #配置文件
   --storage.tsdb.path=/usr/local/prometheus/data/ \     #数据存储路径
   --web.enable-admin-api \     #开启匿名登录                    
   --web.enable-lifecycle       #开启热加载

[Install]
WantedBy=multi-user.target
[root@module prometheus]# systemctl daemon-reload     #重新加载配置
[root@module prometheus]# systemctl enable prometheus.service --now  #启动程序开机自启
[root@module prometheus]# ss -tunlp |grep 9090        #查看服务是否启动,默认端口是9090

注意:如果环境为虚拟机,通过真机上网要确保时间同步,配置NTP

[root@module prometheus]# timedatectl status   #确保设备为上海时区
      Local time: Thu 2022-02-17 02:51:54 CST
  Universal time: Wed 2022-02-16 18:51:54 UTC
        RTC time: Wed 2022-02-16 18:51:54
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@module prometheus]# yum -y install chrony  #安装NTP
[root@module prometheus]# vim /etc/chrony.conf   #配置时钟源,我用的阿里源
server ntp1.aliyun.com  iburst
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
[root@module prometheus]# systemctl enable chronyd --now #启动NTP并开机自启
[root@module prometheus]# date   #查看时间已和真机同步
Wed Feb 16 18:56:20 CST 2022  

此时通过浏览器访问:IP:9090 ;确保prometheus正常

3.安装prometheus被控端

软件包可官网也可在以上的网盘里,下载到家目录

[root@module ~]# tar -xf node_exporter-1.3.1.linux-amd64.tar.gz 
[root@module ~]# mv node_exporter-1.3.1.linux-amd64 /usr/local/node_exporter
[root@module ~]# vim /lib/systemd/system/node_exporter.service #编写service文件
[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

[root@module ~]# systemctl daemon-reload
[root@module ~]# systemctl enable node_exporter.service --now  #设置服务并开机自启
[root@module ~]# ss -tunlp |grep 9100             #查看服务是否被监听
[root@module ~]# vim /usr/local/prometheus/prometheus.yml #在行尾添加被控端配置
  - job_name: "node"
    static_configs:
      - targets: ["192.168.1.101:9100"]

4.下载安装grafana

[root@module ~]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.6-1.x86_64.rpm  #下载GRANAFA软件包
[root@module ~]# yum -y install grafana-enterprise-8.3.6-1.x86_64.rpm #安装RPM包
[root@module ~]# systemctl enable grafana-server.service --now        #启动程序并设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@module ~]# ss -tunlp | grep grafana  #查看端口并确保服务已启动
tcp    LISTEN     0      128      :::3000                 :::*                   users:(("grafana-server",pid=4300,fd=10))

 问题1:若无法重置密码,也可以开启匿名访问(默认不操作)

[root@module ~]# vim /etc/grafana/grafana.ini
[auth.anonymous]   
enabled = true     #是否开启匿名登录
org_role = Admin   #使用登录身份:Admin代表管理员

 

 

问题2:若界面显示连接失败,在服务器端检查prometheus是否启动

5.安装Alertmanager

下载地址可以选择官网或是上边分享的网盘地址

#我选用的是下载好的包,传到虚拟机中
[root@module ~]# tar -xf 1-prometheus/alertmanager-0.23.0.linux-amd64.tar.gz -C /usr/local/  #解压源码包
[root@module ~]# mv /usr/local/alertmanager-0.23.0.linux-amd64/ /usr/local/alertmanager    
#修改目录名称方便管理

[root@module ~]# vim /lib/systemd/system/alertmanager.service #编写systemd文件
[Unit]
Description=Alertmanager for Prometheus
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data/
Restart=on-failur
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

[root@module ~]# systemctl enable alertmanager.service --now  #启动程序并开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/alertmanager.service to /usr/lib/systemd/system/alertmanager.service.

6.配置报警规则

在rules目录中添加.yml后缀文件,prometheus会根据这些规则配置文件进行监控报警;

[root@module ~]# mkdir /usr/local/prometheus/rules

#1.实例存活告警
[root@module ~]# vim /usr/local/prometheus/rules/node_alived.yml
groups:                    #一个配置文件包含多个组
- name: 实例存活告警规则     #组名
  rules:                   #规则
  - alert: 实例存活告警     #警告名称
    expr: up == 0          #触发规则
    for: 1m                #触发持续多久发送警告
    labels:                #告警标签
      user: prometheus
      severity: warning
    annotations:           #告警注释
      summary: "主机宕机 !!!"
      description: "该实例主机已经宕机超过一分钟了。"

#2.内存报警规则
[root@module ~]# vim /usr/local/prometheus/rules/memory_over.yml
groups:
- name: 内存报警规则
  rules:
  - alert: 内存使用率告警
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 50
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "服务器可用内存不足。"
      description: "内存使用率已超过50%(当前值:{{ $value }}%)"

#3.CPU报警
[root@module ~]# vim /usr/local/prometheus/rules/cpu_over.yml
groups:
- name: CPU报警规则
  rules:
  - alert: CPU使用率告警
    expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 50
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "CPU使用率正在飙升。"
      description: "CPU使用率超过50%(当前值:{{ $value }}%)"

#4.磁盘使用率报警
[root@module ~]# vim /usr/local/prometheus/rules/disk_over.yml
groups:
- name: 磁盘使用率报警规则
  rules:
  - alert: 磁盘使用率告警
    expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
    for: 20m
    labels:
      severity: warning
    annotations:
      summary: "硬盘分区使用率过高"
      description: "分区使用大于80%(当前值:{{ $value }}%)"

热加载配置:curl -X POST http://192.168.1.101:9090/-/reload

 

7.在客户端创建钉钉机器(我是在windows创建)

设置前自行创建一个项目组

8.下载钉钉插件与修改(使用网盘包)

#1.下载插件并放到服务端
[root@module ~]# tar -C /usr/local/ -zxf /root/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz     #解压钉钉插件包
[root@module ding]# mv /usr/local/prometheus-webhook-dingtalk-1.4.0.linux-amd64 /usr/local/ding  #挪到安装目录方便使用
[root@module ding]# cp config.example.yml conf.yml  #拷贝模板文件
[root@module ding]# vim conf.yaml
targets:
  webhook1:
    url: webhook地址  #(复制创建钉钉那个Token)
    secret: 加密串

#2.修改prometheus配置文件
[root@module ~]# vim /usr/local/prometheus/prometheus.yml
global:                #全局配置
  scrape_interval: 15s #默认采集监控数据时间间隔 
  evaluation_interval: 15s #平均间隔时间
alerting:              #报警规则
  alertmanagers:       #
    - static_configs:
        - targets:
          - 192.168.1.125:9093   #服务端监听端口
rule_files:            #指定规则文件
  - rules/*.yml
scrape_configs:              #监控对象配置
  - job_name: "prometheus"   #任务名称
    static_configs:          #监控对象地址
      - targets: ["192.168.1.125:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["192.168.1.125:9100"]


#3.修改规则文件
[root@module ~]# vim /usr/local/alertmanager/alertmanager.yml 
global:                                 #全局配置项
  resolve_timeout: 5m                   #处理超时时间,默认5分钟
route:                                  #定义路由树信息 
  group_by: ['alertname','instance']                     #报警分组依据
  group_wait: 10s                       #最初等待多久时间发送一组警报通知
  group_interval: 10s                   #发送新警报前的等待时间
  repeat_interval: 1h                   #发送重复警报的周期,对于email配置不能设置过低否则将会由于邮件发>送太多频繁,被smtp服务器拒绝
  receiver: 'webhook'                  #发送警报的接收者的名称
receivers:                              #定义警报接收者信息
- name: 'webhook'                      #警报
  webhook_configs:                      #webhook配置
  - send_resolved: true                 #是否开启
    url: 'http://192.168.1.125:8060/dingtalk/webhook1/send' #告警webhook地址,告警信息会post到该地址,需>要编写服务接收该告警数据 
#一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'               #目标告警状态
    equal: ['alertname', 'dev', 'instance']

[root@module ~]# systemctl restart alertmanager.service #重启服务

[root@module ding]# nohup ./prometheus-webhook-dingtalk --config.file="conf.yml" 2>&1 1>dingding.log & #启动程序后台运行退出终端不影响
[root@module ding]# dd if=/dev/zero of=/dev/null #模拟提升CPU使用率,达到报警效果

最终效果 ,若果测试感觉等待时间过长可把alertmanager文改为件repeat_interval: 60s

举报

相关推荐

0 条评论