node-exporter : 用来监控运算节点上的宿主机的资源信息,需要部署到所有运算节点
cadvisor :用于监控正在运行的容器资源使用和性能信息 ,需要部署到所有运算节点
github上还有各种各种的监控特定服务,比如kafka等的exporter,但是这个有点麻烦
机器信息
192.168.199.201 prometheus + node-exporter + cadvisor + grafana
192.168.199.202 node-exporter + mysql + cadvisor
192.168.199.203 node-exporter + nginx + redis + cadvisor
PS:因为是实验,所有容器都是简单安装
docker pull prom/prometheus
docker pull prom/node-exporter
docker pull google/cadvisor
docker pull grafana/grafana
新建目录
mkdir -p /docker/prometheus
cd /docker/prometheus/
编辑配置文件
vim prometheus.yml
global:
scrape_interval: 60s # 间隔多少秒采集一次数据
evaluation_interval: 60s # 间隔多少秒做一次告警检测
scrape_configs: # 指定prometheus要监控的目标,每个监控目标是一个job,最简单的static_config,即静态地指定每一个目标。
- job_name: prometheus # job_name: 定义监控节点:
static_configs:
- targets: ['localhost:19090'] # 可以有很多,用逗号隔开
labels:
instance: prometheus # 实例
启动prometheus
docker run -d -p 19090:9090 --name my-prometheus \
-v /docker/prometheus/prometheus.yml:/opt/prometheus/prometheus.yml prom/prometheus
查看端口,ss比netstat快
[root@node1 prometheus]# ss -naltp | grep 19090
LISTEN 0 128 *:19090 *:* users:(("docker-proxy",pid=5805,fd=4))
LISTEN 0 128 [::]:19090 [::]:* users:(("docker-proxy",pid=5809,fd=4))
查看默认的监控页面
http://192.168.199.201:19090/targets
http://192.168.199.201:19090/metrics
启动实例
docker run -d -p 19100:9100 --name my-node-exporter \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
--net=bridge prom/node-exporter
查看端口
[root@node1 ~]# ss -naltp | grep 19100
LISTEN 0 128 *:19100 *:* users:(("docker-proxy",pid=3191,fd=4))
LISTEN 0 128 [::]:19100 [::]:* users:(("docker-proxy",pid=3195,fd=4))
访问url,这个数据和上面的一样,此处略过
http://192.168.199.201:19100/metrics
docker run -d -p 18080:8080 --name my-cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
-detach=true google/cadvisor
查看端口
ss -naltp | grep 18080
查看cadvisor原始监控页面(这个页面有点慢)
http://192.168.199.201:18080/containers/
cd /docker/prometheus/
vim prometheus.yml
#添加如下
- job_name: linux
static_configs:
- targets: ['192.168.199.201:19100']
labels:
instance: system-instance
- job_name: containers
static_configs:
- targets: ['192.168.199.202:18080','192.168.199.203:18080']
labels:
instance: containers-instance
重启docker-promethus
docker restart my-prometheus
新建数据目录
mkdir -p /docker/grafana-storage
chmod 777 -R /docker/grafana-storage
启动grafana
docker run -d -p 13000:3000 --name my-grafana \
-v /docker/grafana-storage:/var/lib/grafana grafana/grafana
查看端口
ss -naltp | grep 13000
访问url,默认的用户名和密码都是admin:
http://192.168.199.201:13000/
docker pull prom/node-exporter
docker pull mysql:5.7
docker pull google/cadvisor
参考1.3
启动实例
docker run -d -p 13306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=Root@135! mysql:5.7
查看结果
docker ps | grep my-mysql
参考1.4
docker pull prom/node-exporter
docker pull redis:5.0-alpine
docker pull nginx
docker pull google/cadvisor
参考1.3
docker run -d -p 18000:80 --name my-nginx nginx
netstat -anpt | grep 18000
docker run -d -p 16379:6379 --name my-redis redis:5.0-alpine
netstat -anpt | grep 16379
参考1.4
修改后的配置文件:
[root@node1 prometheus]# cd /docker/prometheus
[root@node1 prometheus]# cat prometheus.yml
global:
scrape_interval: 30s # 间隔多少秒采集一次数据
evaluation_interval: 30s # 间隔多少秒做一次告警检测
scrape_configs: # 指定prometheus要监控的目标,每个监控目标是一个job,最简单的static_config,即静态地指定每一个目标。
- job_name: prometheus # job_name: 定义监控节点:
static_configs:
- targets: ['localhost:9090'] # 可以有很多,用逗号隔开
labels:
instance: prometheus # 实例
- job_name: linux
static_configs:
- targets: ['192.168.199.201:19100', '192.168.199.202:19100','192.168.199.203:19100']
labels:
instance: system-instance
- job_name: containers
static_configs:
- targets: ['192.168.199.201:18080','192.168.199.202:18080','192.168.199.203:18080']
labels:
instance: containers-instance
重启docker-promethus
docker restart my-prometheus
查看prometheus监控,最终效果如下:
可以看到三台机器上面的node-exporter && cadvisor都已经显示了,但是数据不直观,下面使用grafana改善
点击上图最下面的Save & Test,绿色为ok
查看已经保存完毕的数据源
grafana中模板的地址:
https://grafana.com/grafana/dashboards/?dataSource=prometheus
PS:有的模板数据是NA,这个要学习怎么修改指标(metrics)了