prometheus 生产搭建

服务端做高可用,2台IP 地址分别为:
192.168.0.62   192.168.0.63 (都是centos7.3)

使用的安装包版本为:
prometheus-2.16.0-rc.0.linux-amd64.tar.gz
alertmanager-0.20.0.linux-amd64.tar.gz
node_exporter-0.18.1.linux-amd64.tar.gz
grafana-6.2.2.linux-amd64.tar.gz

搭建步骤如下: (都是使用root用户操作)

1 安装prometheus (2个节点操作相同)

tar -xvf prometheus-2.16.0-rc.0.linux-amd64.tar.gz -C /usr/local/
cd   /usr/local/
mv prometheus-2.16.0-rc.0.linux-amd64 prometheus
 vim /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/ps-data/prometheus --web.external-url=http://192.168.0.62:9090            ###IP地址记得变一下
[Install]WantedBy=multi-user.target

systemctl daemon-reload
systemctl start prometheus
systemctl status prometheus
systemctl enable prometheus

2   安装alertmanager  (2个节点操作相同)

tar -xvf alertmanager-0.20.0.linux-amd64.tar.gz  -C /usr/local/
cd /usr/local/
mv alertmanager-0.20.0.linux-amd64 alertmanager
vim /etc/systemd/system/alertmanager.service

[Unit]
Description=Alertmanager
After=network-online.target
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start alertmanager
systemctl status alertmanager
systemctl enable alertmanager

3 安装grafana (2个节点操作相同)

tar xvf grafana-6.2.2.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv grafana-6.2.2  grafana
 vim /etc/systemd/system/grafana-server.service

[Unit]
Description=Grafana Server
After=network-online.target
[Service]
Restart=on-failure
ExecStart=/usr/local/grafana/bin/grafana-server -config /usr/local/grafana/conf/defaults.ini -homepath /usr/local/grafana
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start grafana-server
systemctl status grafana-server
systemctl enable grafana-server

4 给需要监控的服务器安装 node_exporter

tar xvf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv node_exporter-0.18.1.linux-amd64 node_exporter
vim /etc/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable  node_exporter

5  配置prometheus 发现 客户端 node_exporter (2个节点操作都是一样)
vi /usr/local/prometheus/prometheus.yml  
在文件的最后 添加一个 job_name.  (一定要注意缩进,缩进不对,配置文件会一直报错
可以使用 ./promtool check config prometheus.yml  来检查配置文件的格式是否正确)

  - job_name: 'node_exporter'
    file_sd_configs:
    - files:
      - 'nodes/host.json'

然后在/usr/local/prometheus  底下创建一个目录 
mkdir nodes
vi nodes/host.json

[
  {
    "targets": [ "192.168.0.12:9100"],
    "labels": {
      "instance": "192.168.0.12",     
      "hostname": "testapp_01",
      "team": "prometheus"
    }
  }
]

节点多的话,就在上面例子中的最后一个 '}' 加上 ','  然后继续添加, prometheus 会自动识别到json文件中的机器,不需要重启prometheus.
这个例子中 "labels"包含了3个  标签: "instance","hostname", "team"  
这些标签是为了分组用的,比如后面告警邮件中需要按照不同的项目给不同的负责人发送邮件, "team" 这个标签就有用了,机器属于不同的 "team",告警就可以时间分组发邮件。标签的名字是可以自由命名的。

6  配置告警规则,即发送什么样的告警 (2个节点的操作一样)

配置prometheus 连通alertmanager 
vi /usr/local/prometheus/prometheus.yml  

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.0.62:9093
      - 192.168.0.63:9093
      # - alertmanager:9093
rule_files:
    - "rules/*rules.yml"

配置好后,在/usr/local/prometheus/ 底下创建 rules 文件夹,并创建告警规则文件
mkdir rules
vi  test_rules.yml   ### 文件必须是以 rules.yml结尾,因为上面的配置的通配是*rules.yml 

groups:
  - name: node-exporter-prometheus
    rules:
    - alert: instance-宕机
      expr: up{team="prometheus"} == 0
      for: 1m
      labels:
        team: prometheus
      annotations:
        summary: "instance: {{ $labels.instance }} 宕机了" 
        description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} 关机了, 时间已经1分钟了。"
        value: "{{ $value }}"
        instance: "{{ $labels.instance }}"

    - alert: cpu-used-high
      expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{team="prometheus",mode="user"}[5m])))  * 100 > 80
      for: 1m
      labels:
        team: prometheus
      annotations:
        summary: "instance: {{ $labels.instance }} cpu 使用率高于80%" 
        description: "" 
        value: "{{ $value }}"
        instance: "{{ $labels.instance }}"

这里举了2个例子,其余的监控信息可以通过http://192.168.0.62:9090  监控有的参数写自己需要的告警。
请注意这个告警文件的 两个地方出现的 team 标签:
1 expr 表达式中的team 表示的是,只获取nodes/host.json 文件中带 team: prometheus 的机器的参数
2  labels 中的team 指的是当前告警的标签,这个可以自由定义,下面alertmanager邮件分组中 引用的匹配标签,就是这个标签

7  配置alertmanager (2个节点配置一样)

altermanager 主要配置 发件人,收件人, 邮件发送分组规则等。还可以定义告警邮件的模板(这里就不写了,感兴趣的可以自己研究下)。

cd /usr/local/alertmanager 
vi  alertmanager.yml

global:

  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qiye.aliyun.com:465'  ## 发送邮件这里要加端口,不能省略,这里举例的是阿里的企业邮箱
  smtp_from: 'service@testgroup.net'               ## 发送邮箱
  smtp_auth_username: 'service@testgroup.net'   ## 发送邮箱
  smtp_auth_password: '123456'                        ## 发送邮箱的密码
  smtp_require_tls: false

route:
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h

  receiver: 'system'                                      ##route 底下的这个接收邮件组,如果不匹配标签,都默认往这个邮件组发送
  group_by: ['alertname','team']

  routes:
  - receiver: 'test1'                          ###  自定义的一个邮件组名
    group_wait: 30s
    match_re:
      team: oracle|prometheus       ### 告警规则配置中的 标签,team 等于 oracle 或者 prometheus 的都往这个 test1 收件组发送

  - receiver: 'test2'                       ###  自定义的一个邮件组名
    group_wait: 30s
    match:
      team:  mysql                       ### 告警规则配置中的 标签,team 等于 mysql 的都往这个 test1 收件组发送.

                                                ### 邮件组可以很多,这里就举例2个

receivers:

  - name: 'test1'
    email_configs:
    - to: 'abc123@sina.com,283128104@qq.com'
      send_resolved: true          ### 这个可以定义告警解决后,是否会发送一封已经解决的邮件,一般都开启

  - name: 'test2'
    email_configs:
    - to: 'mysqldba@sina.com,283128104@qq.com'
      send_resolved: true

  - name: 'system'             ##默认的邮件接收人,当标签没有匹配的时候都发到这个邮件组
    email_configs:
    - to: 'yunwei001@sina.com' 
      send_resolved: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']


8  配置alertmanager 集群,2个alertmanager  只发送一个告警。

这个高可用的prometheus 集群的原理很简单。
因为监控的主要目的是告警,架构如下图所示, 服务端 读2次 数据,因为数据都是一样的,只是分别读2次,不用担心grafana 显示的情况不同,
62 和 63 显示的数据必然是相同的,如果不放心,可以给grafana 换一个mysql 数据库,然后 配置指向同一个数据库,这样就不用担心了。
只要告警alertmanager 做了集群,相同的告警触发只发送1次,那么我们这个架构就是高可用的集群了。3个组建 prometheus , grafana, alertmaneger 不管哪个挂了,都不会使这个告警系统不能使用。


修改 :

1  2个节点的 /etc/systemd/system/prometheus.service  的 启动脚本 ExecStart 中 添加  --web.enable-lifecycle 

2   2台节点的 prometheus.yml  中 alertmanagers关联,两个都要写,这个如果在上面已经配置了,可以忽略该步骤

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - '192.168.0.62:9093'
      - '192.168.0.63:9093'

3  修改 alertmanager启动脚本 ,将模式改成 cluster 模式 (分别为62和 63节点的配置)

ExecStart=/usr/local/alertmanager/alertmanager --web.external-url=http://192.168.0.62:9093 --cluster.listen-address=0.0.0.0:9094 --cluster.peer=192.168.0.63:9094  --config.file=/usr/local/alertmanager/alertmanager.yml

ExecStart=/usr/local/alertmanager/alertmanager --web.external-url=http://192.168.0.63:9093 --cluster.listen-address=0.0.0.0:9094 --cluster.peer=192.168.0.62:9094  --config.file=/usr/local/alertmanager/alertmanager.yml

4  重启prometheus, alertmanager, 2台都要。 登录http://192.168.0.63:9093 查看 status ,Cluster Status 显示 redy ,就表示alertmanager集群配      置成功了,集群端口这里为9094


到这里,prometheus集群的配置基本就完成了。 下面介绍一些额外的一些功能配置。

1  grafana  将原本的数据库替换成mysql, 并且mysql 为主从模式
mysql 的主从搭建这里就不讲了。 grafana 这里配置指向 mysql 的主节点。

vi /usr/local/grafana/conf/defaults.ini

type = mysql                      ;数据库类型,肯定填mysql
host = 192.168.0.65           ;数据IP
name = grafana_db            ;数据库名称
user = grafana_user            ;数据库用户名
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = Passwd           ;数据库用户密码

两台的配置都一样,都指向mysql的主节点 192.168.0.65
重启下 grafana。


2   grafana 配置用户分组,各自的分组只能看到自己组的监控

首先在server Admin (盾牌图标) 中,选择 Orgs  -->  New org , 创建一个新的 org.
然后创建用户  new_user01,分配给 viewer 的角色.
点击左下角,switch 到新创建的 org


添加 source ,导入模板。
打开模板显示界面
打开 

修改

将name=~"$instance"  替换成 自己的host.json 文件中的标签, 比如 team="prometheus" ,保存。 

这样new_user01 就只能查看到 标签为 prometheus 的机器的监控了。

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