目录
监控逻辑图
镜像准备
运行镜像文件
启动node-exporter
启动cadvisor
启动prometheus容器
启动grafana容器
docker pull prom/node-exporter # 监控主机基础信息的镜像
docker pull google/cadvisor # 监控主机容器信息的镜像
docker pull prom/prometheus # 收集主机信息的镜像
docker pull grafana/grafana # 展示主机信息的镜像
1.1启动命令
docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--network="bridge" \
prom/node-exporter
1.2检查启动情况
等待几秒钟,查看端口状态
netstat -anpt
访问http://192.168.241.137:9100/metrics 查看接口是否有数据,IP为部署的主机的地址,
2.1启动命令
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=9200:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor
注:网上资料有以下说明,但是感觉跟上面简略版的效果没啥区别:
1、在 Ret Hat, CentOS, Fedora 等发行版上需要传递如下参数,因为 SELinux 加强了安全策略:
--privileged=true
设置为true之后,容器内的root才拥有真正的root权限,可以看到host上的设备,并且可以执行mount;否者容器内的root只是外部的一个普通用户权限。
2、由于cadvisor需要通过socket访问docker守护进程,在CentOs和RHEL系统中需要这个这个选项。
--volume=/cgroup:/cgroup:ro
先附复杂的启动脚本以备不时之需:
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=9200:8080 \
--volume=/cgroup:/cgroup:ro \
--detach=true \
--privileged=true \
--name=cadvisor \
--network="bridge" \
-v "/etc/localtime:/etc/localtime" \
google/cadvisor
2.2检查启动情况
访问http://192.168.241.137:9200/containers/ 查看cadvisor图形化界面,该数据可查看不可存储
访问http://192.168.241.137:9200/metrics查看cadvisor json格式数据
3.1新建目录prometheus
mkdir /opt/prometheus
cd /opt/prometheus/
3.2编辑配置文件prometheus.yml
vi prometheus.yml
3.3编辑内容
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.241.128:9100']
static_configs:
- targets: ['192.168.241.137:9100']
- job_name: docker
static_configs:
- targets: ['192.168.241.128:9200']
static_configs:
- targets: ['192.168.241.137:9200']
注意:修改IP地址,这里的IP是起了node-exporte容器的服务器地址,监控多个配置多个。
关于监控多台服务器的配置:
3.4启动prometheus命令
docker run -d \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
3.5检查启动情况
访问url:http://xxx.xxx.xxx.xxx:9090/graph 查看配置是否有生效,IP为生成prometheus的容器服务器的IP地址;然后访问targets,url如下:http://xxx.xxx.xxx.xxx:9090/targets state为up状态
注:
1、如果此处监控的主机的state为DOWN始终无法UP,那就关闭下被监控主机的防火墙,
暂时关闭防火墙:systemctl stop firewalld;
鉴于客户生产环境不可能关闭防火墙运行,可以通过防火墙永久放出9100、9200、9090端口:
放开9100、9200端口操作在被监控主机操作:
firewall-cmd --add-port=9100/tcp --permanent
firewall-cmd --add-port=9100/udp --permanent
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9200/udp --permanent
firewall-cmd --reload
放开9090端口操作在prometheus容器主机操作:
firewall-cmd --add-port=9090/tcp --permanent
firewall-cmd --add-port=9090/udp --permanent
firewall-cmd --reload
开放端口后记得重载防火墙配置firewall-cmd --reload。
2、如果在容器运行过程中修改防火墙配置会导致容器不能识别新的的防火墙配置,导致prometheus不能识别到被监控主机state为DOWN,此时需要重启docker服务systemctl restart docker,然后重启之前的docker容器。
4.1新建空文件夹grafana-storage,用来存储数据
mkdir /opt/grafana-storage
设置权限,因为grafana用户会在这个目录写入文件,直接设置777
chmod 777 -R /opt/grafana-storage
4.2启动grafana命令
docker run -d \
-p 3000:3000 \
--name=grafana \
-v /opt/grafana-storage:/var/lib/grafana \
grafana/grafana
4.3检查启动情况
访问url:http://xxx.xxx.xxx.xxx:3000/ 这个IP是起了grafana容器的IP。
这里跟Prometheus是部署在同一主机的,一般情况下Prometheus+Grafana是部署在同一服务器,去监控其他服务器,或者本地服务器。
4.4登录账号
默认账号:admin 密码:admin
首次登录要求重置密码,可以重置,也可改为默认admin方便使用,根据实际需要而定。
4.5配置数据源
settings-Data Sources
点击Add data source,选择prometheus
Name使用默认Prometheus,不建议修改,
URL配置Prometheus容器运行的IP:9090;
Access选择Browser,
配置完,点击下面的Save & Test,如果出现绿色的,数据源配置成功
4.6配置看板
添加按钮+-Import
导入dashboard的时候可以修改看板的名字,还需要配置数据源。
展示效果
注: