监控系统是由prometheus、grafana 、alertmanage 、netdata模块组成,可以对本机和多台机器进行监控,下面将对各个模块进行简单的介绍
netdata:netdata是用于数据采集,该模块将部署在被监控的机器上,也可以部署在控制机上对本机进行监控;部分人使用的是prometheus官方提供的exporter,如node_exporter等,不管你使用的是什么模块进行数据采集,这个影响不大,只要你能采集到数据就OK了,小编使用的netdata主要原因它采集到的数据比较全面
prometheus:prometheus是一个开源的系统监控和报警的工具包,小编用它主要数据的存储和告警;prometheus会获取netdata采集回来的数据进行计算,然后根据设置的告警阀值进行对比,最后发出告警
grafana :grafana是用于界面展示,将数据可视化,它将prometheus存储的数据在界面上展示出来,方便我们查看
alertmanager:alertmanager是一个告警机制,更具不同的需要可以设置邮件告警、钉钉告警,这里小编使用的是钉钉告警;钉钉告警需要接入prometheus-webhook-dingtalk
一、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
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端
http://localhost:19999/api/v1/allmetrics 在这里你可以看到数据
二、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采集回来的数据信息
在点击Alerts之后你可以看到你的告警信息,点开之后会显示你的告警数据,然后通过钉钉机器人发送给你(请忽略小编的告警有点多)
三、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
我在网上看到大部分人是在官网下载进行编译安装的,这个不会有什么影响
四、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的数据接入进去,然后将数据进行添加,这样才会有数据展示出来。配置数据可以自己在界面上逐个添加,也可以在官网上下载一个配置数据的json文件导入
首先我们添加数据
然后我们导入json文件添加数据
我们可以看一下结果