工作随笔-CentOS7搭建Prometheus配置微信告警和安装grafana展示

此文章只是记录一下搭建一套prometheus以及微信告警的步骤,没有详细讲解原理。
下面文字包括的组件比较多,可以选择性安装。

  1. 安装node_exporter监控服务器基础信息
    1.1 下载node_exporter并安装
# 下载地址https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
# 创建主目录,并上传安装包
mkdir /opt/monitor
cd /opt/monitor
tar -xzvf node_exporter-1.0.1.linux-amd64.tar.gz
mv node_exporter-1.0.1.linux-amd64 node_exporter
# 默认端口是9100,需要考虑是否端口冲突
cd /opt/monitor/node_exporter
nohup ./node_exporter --web.listen-address=:9100 &

1.2 测试node_exporter是否可以采集到数据

# 浏览器访问,或者以下curl命令
curl http://xx.xx.xx.xx:9100/metrics

1.3 将node_exporter服务化,方便重启,以及设置自启动

# 服务化,端口可更改
echo '[Unit]
Description=node_exporter
Documentation=node_exporter
 
[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/node_exporter/node_exporter --web.listen-address=:9100

[Install]
WantedBy=multi-user.target' >/usr/lib/systemd/system/node_exporter.service
# 设置自启动
systemctl enable --now node_exporter
  1. 安装mysqld_exporter监控mysql
    2.1 下载mysqld_exporter并安装
# 下载地址https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
# 安装上传安装包并解压
cd /opt/monitor
tar -xzvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
# 需要在监控的目标数据库创建账号用于收集数据库监控指标
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'pwd4test';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
flush privileges;
# 创建mysqld_exporter配置文件
echo '[client]
user=exporter
password=pwd4test' > /opt/monitor/mysqld_exporter/.my.cnf
# 启动mysqld_exporter
cd mysqld_exporter
nohup ./mysqld_exporter --config.my-cnf=.my.cnf --web.listen-address=:9104 &

2.2 测试验证

# 可以浏览器访问,也可以curl
curl http://xx.xx.xx.xx:9104/metrics

2.3 服务化

# 服务化,端口可更改
echo '[Unit]
Description=mysqld_exporter
Documentation=mysqld_exporter
 
[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/mysqld_exporter/mysqld_exporter --config.my-cnf=/opt/monitor/mysqld_exporter/.my.cnf --web.listen-address=:9104

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/mysqld_exporter.service
# 配置自启动
systemctl daemon-reload
systemctl enable --now mysqld_exporter
  1. 安装process_exporter监控指定进程
    3.1 下载process_exporter并安装
# 下载地址https://github-production-release-asset-2e65be.s3.amazonaws.com/64079945/7d8eb200-1f3a-11eb-8261-7d8780cc4638?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20201231%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201231T061102Z&X-Amz-Expires=300&X-Amz-Signature=cc89dafcb363f69d91c6b3c8982aa666afbfddbd341e0fca94207566267828d4&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=64079945&response-content-disposition=attachment%3B%20filename%3Dprocess-exporter-0.7.5.linux-amd64.tar.gz&response-content-type=application%2Foctet-stream
# 解压
cd /opt/monitor
tar -xzvf process-exporter-0.7.5.linux-amd64.tar.gz
mv process-exporter-0.7.5.linux-amd64 process-exporter
# 创建配置文件,以下实例为监控redis_exporter进程
cd process-exporter
vi process-name.yml
process_names:
  - name: "{{.Matches}}"
    cmdline:
    - 'redis_exporter'
# 启动
nohup ./process-exporter -config.path process-name.yml --web.listen-address=:9256 &

3.2 测试验证

# 可以浏览器访问,或者curl
curl http://xx.xx.xx.xx:9256/metrics

3.3 服务化

# 服务器,端口适当修改
echo '[Unit]
Description=process_exporter
Documentation=process_exporter
 
[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/process-exporter/process-exporter -config.path /opt/monitor/process-exporter/process-name.yml --web.listen-address=:9256

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/process_exporter.service
# 设置服务自启动
systemctl enable --now process_exporter
  1. 安装redis_exporter监控redis集群
    4.1 下载安装redis_exporter
# 下载地址https://github-production-release-asset-2e65be.s3.amazonaws.com/34705315/3938b180-200a-11ea-852e-5c7b617446b2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20201230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201230T065656Z&X-Amz-Expires=300&X-Amz-Signature=7ca5c9b2c2f67dcaee356f5ac9fbe0527beb006ffa721d4fde607f9a1d4c434e&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=34705315&response-content-disposition=attachment%3B%20filename%3Dredis_exporter-v1.3.5.linux-amd64.tar.gz&response-content-type=application%2Foctet-stream
# 解压安装
cd /opt/monitor
tar -xzvf redis_exporter-v1.3.5.linux-amd64.tar.gz
mv redis_exporter-v1.3.5.linux-amd64 redis_exporter
# redis如果是单节点,以下命令就可以监控单节点
# 如果是集群,那么还需要配合prometheus.yml来实现,不过此处只需要监控一个节点就行
cd redis_exporter
nohup ./redis_exporter --web.listen-address=:9121 -redis.addr localhost:7000  -redis.password pwd4test &

4.2 测试验证

# 浏览器访问,或者curl
curl http://xx.xx.xx.xx:9121/metrics

4.3 服务化

#服务化,注意适当修改端口
echo '[Unit]
Description=redis_exporter
Documentation=redis_exporter
 
[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/redis_exporter/redis_exporter --web.listen-address=:9121 -redis.addr localhost:7000  -redis.password pwd4test

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/redis_exporter.service
#配置自启动
systemctl enable --now redis_exporter
  1. 安装配置alaertmanager用于实现告警(此处只配置了微信告警)
# 此步骤之前,首先需要申请企业微信以及拿到一些信息参考[可以参考这篇文字](https://blog.csdn.net/qq_25934401/article/details/83088344)

#1. 访问[企业微信网站](https://work.weixin.qq.com/),注册企业微信
#2. 访问应用管理,创建“第三方应用”,并填写信息
#3. 点击应用,查询到以下信息:
#AgentId
#Secret
#DepartmentId
#Comany ID
#4.  allow users里面,添加用户,这样才能接受到消息
#5. 要接收微信展会接收企业微信告警消息,分两步:
#5.1 扫描企业二微码加入企业,并且在通讯录把账号加入对应部门
#5.2 扫描“微工作台”二维码并关注 

5.1 安装配置alartmanager

# 下载安装包 https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
# 解压安装
cd /opt/monitor
tar -xzvf alertmanager-0.21.0.linux-amd64.tar.gz
mv alertmanager-0.21.0.linux-amd64 alertmanager
cd /opt/monitor/alertmanager
cp alertmanager.yml alertmanager.yml.bk
# 修改配置文件
vim alertmanager.yml
# 以下仅为实例

/opt/monitor/alertmanager/alertmanager.yml文件内容

global:
  resolve_timeout: 5m
  wechat_api_corp_id: 'wwf9ad187705xxxx'
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_secret: 'yytUedAXmHOOdZODZFeI_QDuzYOX8PGRouxxxx'
templates:
  - '/opt/monitor/alertmanager/template/wechat.tmpl'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 20m
  receiver: 'wechat'
receivers:
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    to_party: '4'
    agent_id: 1000005
    corp_id: 'wwf9ad18770xxxx'
    api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
    api_secret: 'yytUedAXmHOOdZODZFeI_QDuzYOX8PGRou6Gkg8xxxx'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

/opt/monitor/alertmanager/template/wechat.tmpl文件内容

{{ define "wechat.default.message" }}
{{ range .Alerts }}
告警主题: {{ .Annotations.summary }}
========start=========
告警程序: prometheus_alert
告警级别: {{ .Labels.severity }}
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
=========end===========
{{ end }}
{{ end }}
~

5.2 启动并验证

# 启动
nohup ./alertmanager --web.listen-address=:9093  &
# 浏览器访问,或者curl
curl http://xx.xx.xx.xx:9093/metrics

5.3 服务化

# 服务化,注意适当修改端口
echo '[Unit]
Description=alertmanager
Documentation=alertmanager
 
[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/alertmanager/alertmanager --config.file=/opt/monitor/alertmanager/alertmanager.yml --web.listen-address=:9093 

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/alertmanager.service
# 设置自启动
systemctl enable --now alertmanager
  1. 安装配置Prometheus服务端
    6.1 下载安装prometheus
# 下载地址https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz
# 解压安装配置
cd /opt/monitor
tar -xzvf prometheus-2.23.0.linux-amd64.tar.gz
mv prometheus-2.23.0.linux-amd64 prometheus
cd prometheus
# 修改prometheus.yml主配置文件,参考下面文件内容
# 创建存放rule的目录
mkdir rules
# 创建rule文件来规定告警项目,参考下面文件内容

/opt/monitor/prometheus/prometheus.yml内容如下,仅供参考

# my global config
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.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
   # - targets: ["localhost:9093"]

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "rules/nodes.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

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

  - job_name: "node"
    static_configs:
    - targets: ["localhost:9100"]

  - job_name: "mysql"
    static_configs:
    - targets: ["localhost:9104"]

  - job_name: 'redis_exporter_targets'
    static_configs:
      - targets:
        - redis://localhost:7000
        - redis://localhost:7001
        - redis://localhost:7002
        - redis://localhost:7003
        - redis://localhost:7004
        - redis://localhost:7005
    metrics_path: /scrape
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9121
  ## config for scraping the exporter itself
  - job_name: 'redis'
    static_configs:
      - targets:
        - localhost:9121

  - job_name: 'process'
    static_configs:
            - targets: ['localhost:9256']



/opt/monitor/prometheus/rules/nodes.yml内容如下,仅供参考

groups:
- name: node
  rules:
  - alert: "服务器挂了--测试信息请忽略"
    expr: up{job="prometheus"} == 0 or up{job="node"} == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "服务器{{ $labels.instance }} 挂了"
      description: "当前服务器无法连接,服务器挂掉了,或者node_exporter挂了,请立即查看!"
- name: process
  rules:
  - alert: "指定监控进程挂了"
    expr: namedprocess_namegroup_num_threads == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "指定监控进程{{ $labels.groupname }} 挂了"
      description: "指定监控进程{{ $labels.groupname }} 挂了,请立即查看相关应用是否正常启动!"
- name: redis
  rules:
    - alert: "Redis挂了 -- 测试信息请忽略"
      expr: redis_up  == 0
      for: 1m
      labels:
        severity: error
      annotations:
        summary: "Redis down (instance {{ $labels.instance }})"
        description: "Redis 挂了,请立即查看。  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

6.2 启动并验证

# 启动,开启web.enable-lifecycle,方便动态加载配置
nohup ./prometheus --web.enable-lifecycle &
# 浏览器验证,或者curl
curl http://xx.xx.xx.xx:9090/

6.3 服务化

# 服务化,适当修改路径,以及端口
echo '[Unit]
Description=Prometheus Monitoring System
Documentation=Prometheus Monitoring System

[Service]
User=finance
Group=finance
ExecStart=/opt/monitor/prometheus/prometheus \
--config.file=/opt/monitor/prometheus/prometheus.yml --web.enable-admin-api \
--storage.tsdb.retention=90d --web.enable-lifecycle --web.listen-address=:9090 --storage.tsdb.path=/opt/monitor/prometheus/data

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/prometheus.service
#配置自启动
systemctl enable --now prometheus

6.4 动态修改配置命令

curl -X POST http://localhost:9090/-/reload
  1. 安装配置grafana用于监控信息展示
    7.1 下载安装配置grafana
# 下载
cd /opt/monitor
wget https://dl.grafana.com/oss/release/grafana-7.3.5-1.x86_64.rpm
# 安装之后默认配置信息如下:
    Installs binary to /usr/sbin/grafana-server
    Copies init.d script to /etc/init.d/grafana-server
    Installs default file (environment vars) to /etc/sysconfig/grafana-server
    Copies configuration file to /etc/grafana/grafana.ini
    Installs systemd service (if systemd is available) name grafana-server.service
    The default configuration uses a log file at /var/log/grafana/grafana.log
    The default configuration specifies an sqlite3 database at /var/lib/grafana/grafana.db
#安装grafana
cd /opt/monitor
yum install initscripts urw-fonts wget
rpm -Uvh grafana-7.3.5-1.x86_64.rpm

7.2 启动以及验证

# 启动
systemctl daemon-reload
systemctl start grafana-server
systemctl status grafana-server
# 浏览器验证,设置密码
http://xx.xx.xx.xx:3000/login

7.3 配置添加promethus数据源
Configuration -> Add data source -> Promethus
URL: http://10.247.121.6:9090
Save & Test
7.4导入展示监控信息模板

# node_exporter
https://grafana.com/dashboards/9276
# mysqld_exporter
https://grafana.com/dashboards/7362
# process_exporter
# redis_exporter
https://grafana.com/dashboards/763
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容