Prometheus

目录

Prometheus基本概念

Exporter

架构

服务器规划

二、Prometheus部署

Prometheus部署

Node_export部署

 Grafana部署

AlertManager部署

配置邮件告警

进行宕机测试

配置钉钉告警

3.Alertmanager配置


Exporter

架构

服务器规划

二、Prometheus部署

Prometheus部署

Node_export部署

 Grafana部署

AlertManager部署

配置邮件告警

进行宕机测试

配置钉钉告警

3.Alertmanager配置


Prometheus基本概念

Prometheus是一个开源系统监控和报警工具包,最初在SoundCloud构建。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,独立于任何公司维护。为了强调这一点,并明确项目的治理结构,Prometheus于2016年加入云原生计算基金会,成为继Kubernetes之后的第二个托管项目。

Prometheus将其指标收集并存储为时间序列数据,即指标信息与记录的时间戳以及称为标签的可选键值对一起来存储。

Prometheus的基本原理就是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,不需要任何SDK或者其他的集成过程。输出被监控组件信息的HTTP接口被叫做exporter,目前开发常用的组件大部分都有exporter可以直接使用,比如Nginx,MySQL,Linux系统信息等,Mongo,ES等。

特点:

    1. 具有由度量名称和键/值对标识的时间序列数据的多维数据模型
    2. Prom QL,一种对利用这种维度的灵活查询语音
    3. 不依赖分布式存储;单个服务器节点是自治的
    4. 时间序列收集通过HTTP上的拉模型进行
    5. 通过中间网关支持推送时间序列
    6. 通过服务发现或静态配置发现目标
    7. 多种图形模式和仪表板支持

Exporter

Prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入Prometheus者一个数据序列数据中,那如果保证各处的数据格式是统一的呢?就是通过这个exporter,Exporter是一类数据采集组件的总称,Exporter负责从目标处数据数据,并将其转化为Prometheus支持的格式,它开放了一个http接口,(以便Prometheus来抓取数据),与传统的数据采集组件不同的是,Exporter并不向中央服务器发送数据,而是等待中央服务器(如Prometheus等)主动前来抓取。Prometheus · GitHub有很多写好的exporter。可以直接下载使用。

架构

Prometheus Server负责定时在目标上抓取metrics(指标)数据并保存到本地存储里面。Prometheus采用了一种Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端额可以更加方便的水平扩展。如果监控数据达到告警阈值,Prometheus server会通过HTTP告警发送到告警模块alertmanager,通过告警的抑制后触发邮件或者webhook。Prometheus支持PromQL提供多维度数据模型和灵活的查询,通过监控指标关联多个tag的方式,将监控数据进行维度的组合以及聚合。

服务器规划

IP地址操作系统软件

192.168.200.111

centos7.6

prometheus、Grafana、AlertManager

192.168.200.113

centos7.6

node_exporter

192.168.200.113

centos7.6

node_exporter

二、Prometheus部署

Prometheus部署

1.上传软件包
rz  prometheus-2.38.0.linux-amd64.tar.gz

2.解压软件包
tar -zxvf prometheus-2.38.0.linux-amd64.tar.gz -C /data/
mv /data/prometheus-2.38.0.linux-amd64 /data/prometheus
3.创建用户和组
 groupadd prometheus
 useradd -g prometheus -s /sbin/nologin prometheus
 
 5.修改属组
 chown -R prometheus:prometheus /data/prometheus/
 
 6.添加至systemd开机自启
 vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
ExecStart=/data/prometheus/prometheus --config.file=/data/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data
User=root
[Install]
WantedBy=multi-user.target

[root@k8s-master01 prometheus]# cd /data/prometheus
[root@k8s-master01 prometheus]# vim prometheus.yml


global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.200.111:9093   #修改成你的alertmanger地址      

rule_files:
    - "rules/*rules.yml"

scrape_configs:
  - job_name: 'prometheus'


    static_configs:
    - targets: ['localhost:9090']





7.启动服务
systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus

如果报错查看/data/prometheus/data目录所属用户和组是不是prometheus

浏览器访问:http://192.168.200.111:9090

Node_export部署

1.上传软件包
rz  node_exporter-1.4.0-rc.0.linux-amd64.tar.gz

2.解压软件包
tar -zxvf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv node_exporter-1.4.0-rc.0.linux-amd64 node_exporter

3.添加至systemd开机自启
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
#StandardOutput=null
Restart=on-failure
[Install]
WantedBy=multi-user.target

4.启动服务
systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter

curl 192.168.200.112/113:9100/metrics

在200.111的机器上
5.添加node-exporter服务发现
cd /data/prometheus
mkdir monitor/sd_config/ -p
vim monitor/sd_config/node_exporter.yml
- targets:
  - '192.168.200.111:9100'
  - '192.168.200.112:9100'
  - '192.168.200.113:9100'   

  labels:
    idc: "bj" 
    Manufacturer: "联通云"
    np: "dage" 

在200.111的prometh的yml文件添加自动发现

[root@k8s-master01 ~]# vim /data/prometheus/prometheus.yml
 - job_name: "node_exporter"  #与上面的- job对齐他们是同一级
    file_sd_configs:
      - files: ['/data/prometheus/monitor/sd_config/node_exporter.yml']
        refresh_interval: 5s

浏览器访问:http://192.168.200.111:9090/targets

 

 Grafana部署

wget https://dl.grafana.com/oss/release/grafana-8.3.3-1.x86_64.rpm
rpm -ivh grafana-8.3.3-1.x86_64.rpm 
systemctl daemon-reload
systemctl enable grafana-server
systemctl start grafana-server

浏览器访问:Grafana

2)导入node_exporter dashboard模板

AlertManager部署

AlertManager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警发送给Alertmanger,然后AlertManger将Silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。

实现Prometheus的告警,需要通过alertmanger这个组件;在Prometheus服务端写告警规则,在alertmanger组件配置邮箱

alertmanger处理由例如Prometheus服务器等客户端发来的报警。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack,dingtalk等。alertmanger还支持groups,silencing和警报抑制的机制

Alertmanger的工作机制

1.上传软件包
rz alertmanager-0.24.0.linux-amd64.tar.gz

2.解压软件包
tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager

3.添加开机自启
vim /usr/lib/systemd/system/alertmanger.service
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

4.启动服务
systemctl daemon-reload
systemctl enable alertmanger
systemctl start alertmanger

浏览器访问:http://127.0.0.1:9093


systemctl restart prometheus

配置邮件告警

vim /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'   # 使用 163 邮箱服务器发邮件
  smtp_from: '*******'         # 发件人,填写你的邮箱
  smtp_auth_username: '********'  # 与上面保持一致
  smtp_auth_password: '********'  # 你邮箱的授权码
  smtp_hello: '163.com'
  smtp_require_tls: false   # 不使用加密认证


route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h     # 1 小时重复一次报警
  receiver: 'email'

receivers:
  - name: 'email'
    email_configs:
    - to: '********'  ##写你自己的邮箱
      send_resolved: true   # 故障恢复后发送邮件

inhibit_rules:   # 告警抑制规则
  - source_match:
      serverity: 'critical'
    target_match:
      serverity: 'warning'
    equal: ['alertname','dev','instance']

vim /data/prometheus/prometheus.yml

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.200.111:9093
      # - alertmanager:9093

rule_files:
    - "rules/*rules.yml" ##指定告警文件配置地址

scrape_configs:
  - job_name: 'prometheus'


    static_configs:
    - targets: ['localhost:9090']

  - job_name: "node_exporter"
    file_sd_configs:
      - files: ['/data/prometheus/monitor/sd_config/node_exporter.yml']
        refresh_interval: 5s

[root@k8s-master01 ~]# cd /data/prometheus/
[root@k8s-master01 prometheus]# mkdir rules
[root@k8s-master01 prometheus]# cd rules
[root@k8s-master01 rules]# cat monitor_rules.yml
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up == 0
    for: 15s  # 评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为 pending
    labels:   # 自定义标签,允许用户指定要附加到告警上的一组附加标签
      severity: 1
      team: node
    annotations:
      summary: "{{$labels.instance}} Instance has been down for more than 15 seconds"

 
[root@k8s-master01 rules]# cat node_rules.yml
groups:
  - name: node-alert
    rules:
    - alert: disk-full
      expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"})
      for: 1m
      labels:
        serverity: page
      annotations:
        summary: "{{ $labels.instance }} disk full "
        description: "{{ $labels.instance }} disk > {{ $value }}  "

进行宕机测试

[root@k8s-master02 ~]# netstat -lnpt|grep 9100
tcp6       0      0 :::9100                 :::*                    LISTEN      3776/./node_exporte
[root@k8s-master02 ~]#kill -9 3776

 

配置钉钉告警

软件准备

prometheus-webhook-dingtalk下载地址

https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz

1.钉钉配置

1.1创建钉钉群,配置机器人

添加机器人

IP地址写虚拟机公网IP地址

查询命令

[root@k8s-master01 ~]# curl ifconfig.me

复制webhook

2.钉钉插件安装(prometheus-webhook-dingtalk)

因为使用钉钉告警的话,还需要钉钉插件支持,所以我们先来安装一下插件,我们直接下载二进制包。启动的默认端口为8060。

[root@k8s-master01 ~]# mkdir -p app/webhook
[root@k8s-master01 ~]# tar xzf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
[root@k8s-master01 ~]# mv prometheus-webhook-dingtalk-1.4.0.linux-amd64 app/webhook/prometheus-webhook-dingtalk
[root@k8s-master01 ~]# cd app/webhook/prometheus-webhook-dingtalk
[root@k8s-master01 prometheus-webhook-dingtalk]# ./prometheus-webhook-dingtalk --ding.profile="ops_dingding=后面跟钉钉的webhook地址" & #注意双引号要有

启动之后注意看输出信息Alertmanager配置文件中的url地址 http://localhost:8060/dingtalk/ops_dingding/send就会出现
了。这个地址要与alertmanager.yml中的一致。

复制自带的模板文件并修改

[root@k8s-master01 prometheus-webhook-dingtalk]# cp config.example.yml config.yml

[root@k8s-master01 prometheus-webhook-dingtalk]# cat config.yml
## Request timeout
# timeout: 5s

## Customizable templates path
# templates:
#   - contrib/templates/legacy/template.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:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=9084e4facf647b9ca3b5f56d2704f0ec2c8ba610de67621e7194f8ab7561ae8d  ##这里是你钉钉的webhook
    # secret for signature
    secret: SEC000000000000000000000

3.Alertmanager配置

注意格式,还有空格,否则容易报错。

[root@k8s-master01 ~]# cat /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'   # 使用 163 邮箱服务器发邮件
  smtp_from: '*******'         # 发件人,填写你的邮箱
  smtp_auth_username: '*********'  # 与上面保持一致
  smtp_auth_password: 'BAWJHIJAOAPVPPQW'  # 你邮箱的授权码
  smtp_hello: '163.com'
  smtp_require_tls: false   # 不使用加密认证


route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h     # 1 小时重复一次报警
 # receiver: 'email'
  receiver: 'ops_dingding'
receivers:
  - name: 'email'
    email_configs:
    - to: '*********'  ##你的邮箱
      send_resolved: true   # 故障恢复后发送邮件

  - name: 'ops_dingding'
    webhook_configs:
    - url: 'http://192.168.200.111:8060/dingtalk/ops_dingding/send'
      send_resolved: true


inhibit_rules:   # 告警抑制规则
  - source_match:
      serverity: 'critical'
    target_match:
      serverity: 'warning'
    equal: ['alertname','dev','instance']

 最后进行故障测试

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值