**Prometheus+Grafana+cAdvisor+node_exporter+Alertmanager 监控docker容器和配置钉钉报警

一、prometheus介绍

特点:

	多维数据模型(有metric名称和键值对确定的时间序列)
	灵活的查询语言
	不依赖分布式存储
	支持图表和dashboard等多种方式 
	通过pull方式采集时间序列,通过http协议传输
	监控数据通过服务或者静态配置来发现
	支持通过中介网关的push时间序列的方式

功能:

在业务层用作埋点系统: Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端)。我们可以通过客户端方面的对核心业务进行埋点。如下单流程、添加购物车流程。

在应用层用作应用监控系统:

一些主流应用可以通过官方或第三方的导出器,来对这些应用做核心指标的收集。如redis,mysql。

在系统层用作系统监控: 除了常用软件, prometheus也有相关系统层和网络层exporter,用以监控服务器或网络。

集成其他的监控:

prometheus还可以通过各种exporte,集成其他的监控系统,收集监控数据,如AWS CloudWatch,JMX,Pingdom等等

Prometheus架构: prometheus是一个用Go编写的时序数据库,可以支持多种语言客户端,

二、部署prometheus监控

	安装go 语言环境
	在监控服务器上安装prometheus
	在被监控环境上安装export
	安装grafana

1、安装go 语言环境

	wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
	tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
	vim  /etc/profile
	
	在文件的最后添加如下内容:
	
	export PATH=$PATH:/usr/local/go/bin
	
	保存退出后,接着让配置文件立刻生效:
	source  /etc/profile
	
	验证一下是否成功,用go version 来验证
	go  version

2:安装prometheus

	官网下载地址:https://prometheus.io/download/
	wget -c https://github.com/prometheus/prometheus/releases/download/v2.21.0-rc.0/prometheus-2.21.0-rc.0.linux-amd64.tar.gz
	tar  -vxf prometheus-2.21.0-rc.0.linux-amd64.tar.gz -C /usr/local/
	mv prometheus-2.21.0.linux-amd64/ prometheus

	ln  -sv /usr/local/prometheus-2.21.0-rc.0.linux-amd64/ /usr/local/prometheus
	
	默认方式启动:
	./prometheus &
	
	更换其他端口启动:
	
	./prometheus --config.file=prometheus.yml --web.listen-address=:9010 &

浏览器输入IP 默认端口9090

3、设置用户

添加用户,后期用此账号启动服务

	groupadd prometheus
	useradd -g prometheus -s /sbin/nologin prometheus

赋权

	cd ~
	chown -R prometheus:prometheus /usr/local/prometheus/

创建prometheus运行数据目录

	mkdir -p /var/lib/prometheus
	chown -R prometheus:prometheus /var/lib/prometheus/

4、设置开机启动

	touch /usr/lib/systemd/system/prometheus.service 
	chown prometheus:prometheus /usr/lib/systemd/system/prometheus.service
	
	vim /usr/lib/systemd/system/prometheus.service
	
			[Unit]
			Description=Prometheus
			Documentation=https://prometheus.io/
			After=network.target
			
			[Service]
			# Type设置为notify时,服务会不断重启
			
			Type=simple
			User=prometheus   # --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
			ExecStart=/usr/local/prometheus/prometheus 	--config.file=/usr/local/prometheus/prometheus.yml 	--storage.tsdb.path=/var/lib/prometheus
			Restart=on-failure
		[Install]
		WantedBy=multi-user.target

设置开机启动

	systemctl enable Prometheus
	systemctl start prometheus

绘图:

		http://192.168.10.117:9090/metrics ,查看从exporter具体能抓到的数据,如下:

	访问:prometheus,在输入框中任意输入1个exporter能抓取得值,点
	击"Execute"与"Execute"按钮,即可见相应抓取数据的图形,同时可对
	时间与unit做调整,

三、部署node_exporter

	Node_exporter收集机器的系统数据,这里采用prometheus官方提供的exporter

1、下载安装

	wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-arm64.tar.gz
	tar -xvzf node_exporter-0.18.1.linux-arm64.tar.gz
	
	cd /usr/local
	mv node_exporter-0.18.1.linux-arm64.tar.gz /usr/local/node_exporter
  1. 设置用户

     groupadd prometheus
     useradd -g prometheus -s /sbin/nologin prometheus
     chown -R prometheus:prometheus /usr/local/node_exporter/
    
  2. 设置开机启动

     vim /usr/lib/systemd/system/node_exporter.service
     		[Unit]
     		Description=node_exporter
     		Documentation=https://prometheus.io/
     		After=network.target
    
     		[Service]
     		Type=simple
     		User=prometheus
     		ExecStart=/usr/local/node_exporter/node_exporter
     		Restart=on-failure
    
     		[Install]
     		WantedBy=multi-user.target
     启动:
     		systemctl enable node_exporter
     		systemctl start node_exporter
     
     直接启动方式:
     修改端口添加: --web.listen-address=":9013" &
     命令:./node_exporter --web.listen-address=":9013" &
    
     prometheus.yml文件下添加:
     	- job_name: 'docker'
     		static_configs:
     		- targets: [192.168.10.117:9012']
    

2、验证

	访问prometheus,查看node1主机已经可被监控

四、安装grafana面板:

	下载地址:https://grafana.com/grafana/download
	选择需要的版本和安装的系统

	wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
	sudo yum install grafana-7.1.5-1.x86_64.rpm

将grafana加入到系统服务并启动

	sudo /sbin/chkconfig --add grafana-server
	sudo service grafana-server start
	
	启动后,打开URL,默认端口为3000,http://192.168.10.117:3000/
	用户名和密码都为 admin

修改grafana默认访问端口 我修改为9008

	1、授予grafana二进制权限
	sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/grafana-server
	
	2、将端口9008重定向到Grafana端口3000
	iptables -t nat -A PREROUTING -p tcp --dport 9011 -j REDIRECT --to-port 3000
	
	3、修改配置文件/etc/grafana/grafana.ini中端口为9008,并重启

	启动:
	service grafana-server start

使用8919面板:https://grafana.com/grafana/dashboards/8919

五、部署cAdvisor 监控docker容器

这里使用docker部署

	1、 拉取镜像
	
	docker pull docker.io/google/cadvisor
	
	2、运行cadvisor容器,并配置
	
	docker run \
	--volume=/:/rootfs:ro \
	--volume=/var/run:/var/run:rw \
	--volume=/sys:/sys:ro \
	--volume=/var/lib/docker/:/var/lib/docker:ro \
	--publish=8080:8080 \
	--detach=true \
	--name=cadvisor \
	google/cadvisor:latest
	
	启动:
	docker restart 448ded02b68d

	3、启动容器:docker restart 117dc405fbf5

curl:ip:8080端口:

**六、grafana添加数据源 **

	1、登陆
	访问:http://localhost:3000,默认账号/密码:admin/admin

	2、添加Premetheyus数据源:

	3、配置Premetheyus地址和源

	4、可以先测试一下

	5、查看数据源:

6、进入刚才逛街的数据源中: 7、OK配置完成

9、dashboard导入

从grafana官网下载相关dashboard到本地,也可以直接导入到grafana中

	https://grafana.com/dashboards/1860
	
	1、配置面板:

2、本地导入仪表盘 复制上方连接、

七、添加钉钉报警

	1、复制钉钉群地址:

2、添加关键词:
		添加了如下关键字:alert、promethues、alertmanager、webhook。可自行决定添加几个。

	3、Grafana配置:

 4、报错问题:
	
	在打开Include image时报错 没有安装grafana-cli 
	解决方法:
	yum -y install libatk-bridge* libXss* libgtk*
	grafana-cli plugins install grafana-image-renderer
	
	5、重启grafana:service grafana-server restart

	发送报警测试:报警的时候就有图片啦

八、配置docker图形面板

	官网地址:https://grafana.com/grafana/dashboards?search=docker
	
	1、配置图形面板:

	https://grafana.com/grafana/dashboards/11277
	2、查看图形内容:

	https://grafana.com/dashboards/193面板:
	Prometheus监控端查docker数据
	container_cpu_load_average_10s

*九、部署Alertmanager 钉钉报警

	1. 下载&安装

		wget https://github.com/prometheus/alertmanager/releases/download/v0.19.0/alertmanager-0.19.0.linux-amd64.tar.gz
		tar xzf alertmanager-0.19.0.linux-amd64.tar.gz
		
		mv alertmanager-0.19.0.linux-amd64 /usr/local/alertmanager
		cd /alertmanager
		
		cp  alertmanager.yml alertmanager.yml
		
		配置文件默认:
		cat alertmanager.yml
		
		global:
		resolve_timeout: 5m

	route:
		group_by: ['alertname']
		group_wait: 10s
		group_interval: 10s
		repeat_interval: 1h

		receiver: webhook

	receivers:
	- name: webhook
		webhook_configs:
		- url: 'http://127.0.0.1:5001/'

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

	3、启动alertmanager 
	./alertmanager --config.file=alertmanager.yml 2>&1 1>altermanager.log &

	查看端口
	netstat -anpt | grep 9093
	
	4、报警规则
	cat dingding.yml

	groups:
    - name: test-rule
    rules:
    - alert: 主机状态
     expr: up == 0
    for: 2m
	labels:
					status: warning
	annotations:
				summary: "{{$labels.instance}}:服务器关闭"
				description: "{{$labels.instance}}:服务器关闭"

	5、修改prometheus配置文件
		修改alerting和dingding
			# Alertmanager configuration
			alerting:
					alertmanagers:
							- static_configs:
									- targets: ["localhost:9093"]
									   # - alertmanager:9093

			rule_files:
					- "rules.yml"
					
	6、将钉钉接入 Prometheus AlertManager WebHook
	插件下载地址:https://github.com/timonwong/prometheus-webhook-dingtalk

安装

	mkdir -p /usr/lib/golang/src/github.com/timonwong/
	cd  /usr/lib/golang/src/github.com/timonwong/
	git clone https://github.com/timonwong/prometheus-webhook-dingtalk.git
	cd prometheus-webhook-dingtalk
	make

	启动
	
	不想写了