prometheus+grafana+alertmanager监控系统钉钉告警

Linux监控系统

  • 监控架构

    监控系统是由prometheus、grafana 、alertmanage 、netdata模块组成,可以对本机和多台机器进行监控,下面将对各个模块进行简单的介绍
    netdata:netdata是用于数据采集,该模块将部署在被监控的机器上,也可以部署在控制机上对本机进行监控;部分人使用的是prometheus官方提供的exporter,如node_exporter等,不管你使用的是什么模块进行数据采集,这个影响不大,只要你能采集到数据就OK了,小编使用的netdata主要原因它采集到的数据比较全面

    prometheus:prometheus是一个开源的系统监控和报警的工具包,小编用它主要数据的存储和告警;prometheus会获取netdata采集回来的数据进行计算,然后根据设置的告警阀值进行对比,最后发出告警

    grafana :grafana是用于界面展示,将数据可视化,它将prometheus存储的数据在界面上展示出来,方便我们查看

    alertmanager:alertmanager是一个告警机制,更具不同的需要可以设置邮件告警、钉钉告警,这里小编使用的是钉钉告警;钉钉告警需要接入prometheus-webhook-dingtalk

    这里是小编画的一个简单的架构图
    prometheus+grafana+alertmanager监控系统钉钉告警_第1张图片

  • 部署各个模块

    一、netdata部署
    如果之前有安装,卸载方法:
    寻找.environment文件,如果没有就创建,将下面内容写入(/etc/netdata/.environment)

    NETDATA_PREFIX="" # put what you used as a parameter to shell installed `–install` flag. Otherwise it should be empty
    NETDATA_ADDED_TO_GROUPS="" # Additional groups for a user running netdata process

    下载卸载脚本

    wget https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/netdata-uninstaller.sh
    chmod +x ./netdata-uninstaller.sh
    ./netdata-uninstaller.sh --yes --env /etc/netdata/.environment or /opt/netdata/netdata-configs/.environment

    安装netdata
    netdata依赖项很多,在安装前需要确认一下是否已经安装好了这些依赖项
    zlib1g-dev uuid-dev libmnl-dev gcc make autoconf autoconf-archive autogen automake pkg-config curl

    $ git clone https://github.com/firehol/netdata.git --depth=1 ~/netdata #下载安装文件
    $ cd ~/netdata
    $ sudo ./netdata-installer.sh

    prometheus+grafana+alertmanager监控系统钉钉告警_第2张图片
    如果你看到了上面这样的输出,说明你已经安装成功了

    netdata的配置文件在/etc/netdata/netdata.conf,需要将配置文件中的这两个地方改成如下所示

    [global]
    history = 3600(单位:SECONDS)
    [plugins]
    python.d = yes

    启动方式:service netdata start
    停止方式:service netdata stop

    你可以看一下进程和19999端口
    也可以在浏览器上打开http://localhost:19999 查看你的netdata的web端
    prometheus+grafana+alertmanager监控系统钉钉告警_第3张图片
    http://localhost:19999/api/v1/allmetrics 在这里你可以看到数据
    prometheus+grafana+alertmanager监控系统钉钉告警_第4张图片

    二、prometheus部署

    wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.darwin-amd64.tar.gz
    tar -zxvf prometheus-2.7.2.linux-amd64.tar.gz prometheus
    cd prometheus
    启动
    ./prometheus --config.file=prometheus.yml

    配置说明
    配置文件prometheus.yml

{ global: 
   { scrape_interval: '15s',
     evaluation_interval: '15s',
     scrape_timeout: '15s' },
  alerting: { alertmanagers: [ { static_configs: [ { targets: [ 'localhost:9093' ] } ] } ] },
  rule_files: [ '/opt/prometheus/rules.yml' ],   #指明你设定的告警规则文件
  scrape_configs: 
   [ { job_name: 'prometheus',
       static_configs: [ { targets: [ 'localhost:9090' ] } ] },
     { job_name: 'netdata-scrape',
       metrics_path: '/api/v1/allmetrics',  #获取采集数据的路径,在浏览器http://localhost:19999/api/v1/allmetrics 里面可以看到数据,其他采集方式可以进行更改,默认为metrics
       params: { format: [ 'prometheus' ] },
       honor_labels: true,
       static_configs: 
        [ { targets: 
             [ 'localhost:19999', 'xxxxxxxx:19999' ] } ] } ] } #监控的主机,可以自行添加

配置文件rules.yml

groups:
  - name: host_monitoring
    rules:
    - alert: 内存报警
      expr: netdata_system_ram_MiB_average{chart="system.ram",dimension="free",family="ram"} < 800
      for: 2m
      labels:
        team: node
      annotations:
        Alert_type: 内存报警
        Server: '{{$labels.instance}}'
        #summary: "{{$labels.instance}}: High Memory usage detected"
        explain: "内存使用量超过90%,目前剩余量为:{{ $value }}M"
        #description: "{{$labels.instance}}: Memory usage is above 80% (current value is: {{ $value }})"
    - alert: CPU报警
      expr: netdata_system_cpu_percentage_average{chart="system.cpu",dimension="idle",family="cpu"} < 20
      for: 2m
      labels:
        team: node
      annotations:
        Alert_type: CPU报警
        Server: '{{$labels.instance}}'
        explain: "CPU使用量超过80%,目前剩余量为:{{ $value }}"
        #summary: "{{$labels.instance}}: High CPU usage detected"
        #description: "{{$labels.instance}}: CPU usage is above 80% (current value is: {{ $value }})"
    - alert: 磁盘报警
      expr: netdata_disk_space_GiB_average{chart="disk_space._",dimension="avail",family="/"} < 4
      for: 2m
      labels:
        team: node
      annotations:
        Alert_type: 磁盘报警
        Server: '{{$labels.instance}}'
        explain: "磁盘使用量超过90%,目前剩余量为:{{ $value }}G"
    - alert: 服务告警
      expr: up == 0
      for: 2m
      labels:
        team: node
      annotations:
        Alert_type: 服务报警
        Server: '{{$labels.instance}}'
        explain: "netdata服务已关闭"

这个配置文件小编是改过的,yaml文件对格式要求和其他文件不一样,具体的可以自己去看一下,改完之后可以检测一下自己的格式是否正确
这个是一个格式化工具,主要是可以检查一下你的文件是否正确
http://www.bejson.com/validators/yaml_editor/
启动之后可以在浏览器打开http://localhost:9090

在这里你看到了netdata数据,那就说明你的prometheus已经获取到了netdata采集回来的数据信息
prometheus+grafana+alertmanager监控系统钉钉告警_第5张图片
在点击Alerts之后你可以看到你的告警信息,点开之后会显示你的告警数据,然后通过钉钉机器人发送给你(请忽略小编的告警有点多)
prometheus+grafana+alertmanager监控系统钉钉告警_第6张图片
prometheus+grafana+alertmanager监控系统钉钉告警_第7张图片
三、alertmanager部署
配置钉钉告警,alertmanager需要接入prometheus-webhook-dingtalk ,这两个模块是由go语音写的,所以在安装和使用的时候需要用到go语音。那么我们在安装之前就需要配置好golang环境
安装go

下载golang安装包

wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

我们将go安装在/usr/local目录下

tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

将go的二进制目录添加到PATH环境变量

vim /etc/profile

配置go的环境变量

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

然后运行下面的命令以使设置的环境变量立即生效

source /etc/profile

查看一下环境变量的设置

echo $GOROOT

是否输出/usr/local/go

echo $PATH

看一下输出中是否有/usr/local/go/bin

如果golang环境配置有问题,对后面的操作就会有影响,小编在这里踩过坑,所以写的稍微有点多
这里有两篇关于golang的安装和配置文章,希望对你们安装的时候有帮助
https://www.jianshu.com/p/c45f8cdca214
http://www.zhimengzhe.com/linux/64170.html

安装prometheus-webhook-dingtalk
在golang的src目录下新建,并且cd /usr/local/go/src/github.com/timonwong

git clone https://github.com/timonwong/prometheus-webhook-dingtalk.git
cd prometheus-webhook-dingtalk
make

编译安装之后你会得到prometheus-webhook-dingtalk执行文件,编译之后还是没有得到这个执行文件,那你要看一下是什么问题了,小编在编译安装的时候就是golang环境配置有问题导致编译失败,具体问题需要具体对待
你如果是按照小编这样安装的话,prometheus-webhook-dingtalk发送钉钉告警模版文件就是
/usr/local/go/src/github.com/timonwong/prometheus-webhook-dingtalk/template/default.tmpl
源模版文件发送的告警信息小编觉得有点多余,然后进行了更改

{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{ end }}
{{ define "__text_alert_list" }}{{ range . }}

{{"*****告警*****"}}
{{ range .Annotations.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }}
{{ end }}
{{"=============="}}
{{ end }}{{ end }}
{{ define "ding.link.title" }}{{ template "__subject" . }}{{ end }}
{{ define "ding.link.content" }}
{{ template "__text_alert_list" .Alerts.Firing }}
{{ end }}

启动prometheus-webhook-dingtalk
nohup ./prometheus-webhook-dingtalk --ding.profile=“ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=xxx” 2>&1 1>dingding.log &
端口是8060
如果不想每次都把机器人加上可以在/etc/systemd/system/prometheus-webhook-dingtalk.service 文件中添加机器人的url。钉钉机器人的url怎么得来的我想应该不需要写出来吧

alertmanger安装
下载安装文件

wget https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz

配置文件为:alertmanager.yml

global:
  resolve_timeout: 5m
route:
  receiver: webhook
  group_wait: 3s
  group_interval: 5s
  repeat_interval: 5m
  group_by: [alertname]
  routes:
  - receiver: webhook
    group_wait: 10s
    match:
      team: node
receivers:
- name: webhook
  webhook_configs:
  - url: http://localhost:8060/dingtalk/ops_dingding/send
    send_resolved: true

repeat_interval: 这个字段是发送的频率,可以根据自己的需要进行设置,在调试过程中可以设置稍微短一点
启动:./alertmanager --config.file=alertmanager.yml
端口是:9093,同样是由web端的可以登陆http://localhost:9093
我在网上看到大部分人是在官网下载进行编译安装的,这个不会有什么影响

下面可以看一下钉钉告警效果
prometheus+grafana+alertmanager监控系统钉钉告警_第8张图片

四、grafana部署
1、安装stable

wget https://dl.grafana.com/oss/release/grafana_5.4.2_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_5.4.2_amd64.deb

APT存储库,创建一个文件/etc/apt/sources.list.d/grafana.list并将以下内容添加到其中。

deb https://packages.grafana.com/oss/deb stable main

添加gpg密钥。这允许您安装签名包

curl https://packages.grafana.com/gpg.key | sudo apt-key add -

更新您的Apt存储库并安装Grafana

sudo apt-get update
sudo apt-get install grafana

在某些旧版本的Ubuntu和Debian上,您可能需要安装apt-transport-https通过HTTPS获取软件包所需的软件包。

sudo apt-get install -y apt-transport-https

启动(init.d service)

sudo service grafana-server start

这将以用户grafana-server身份启动进程,该grafana用户是在程序包安装期间创建的。默 认HTTP端口是3000默认用户和组admin。默认登录名和密码admin/admin要将Grafana服务器配置为在引导时启动:

sudo update-rc.d grafana-server defaults

启动(via systemd)

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

启用systemd服务,以便Grafana在引导时启动

sudo systemctl enable grafana-server.service

启动完成之后可以查看一下进程和3000端口
http://localhost:3000 可以登陆web端查看一下你的界面
默认用户名和密码是:admin/admin
prometheus+grafana+alertmanager监控系统钉钉告警_第9张图片
我们打开之后需要配置一下源数据,将prometheus的数据接入进去,然后将数据进行添加,这样才会有数据展示出来。配置数据可以自己在界面上逐个添加,也可以在官网上下载一个配置数据的json文件导入

首先我们添加数据
prometheus+grafana+alertmanager监控系统钉钉告警_第10张图片
然后我们导入json文件添加数据
prometheus+grafana+alertmanager监控系统钉钉告警_第11张图片
我们可以看一下结果
prometheus+grafana+alertmanager监控系统钉钉告警_第12张图片

  • 总结

    1、在部署过程中其实没有难点,主要是搞清架构
    2、告警调整过程中需要对数据进行处理,对各个配置文件进行理解
    主要涉及到的文件:
    prometheus模块中的rules.yml,指定告警内容和数据
    prometheus-webhook-dingtalk模块中的default.tmpl,发送告警模版样式,第一眼看上去有点无从下手,在仔细看看,变动一下看看发送出来的效果,我们就很快能知道怎么去改动
    3、当我们导入grafana添加数据的json文件后,你会发现有些数据是由问题的,需要我们进行调整,这个过程需要一些时间去查看数据源,返回的数据,调整一下公式

你可能感兴趣的:(prometheus+grafana+alertmanager监控系统钉钉告警)