zabbix监控容器情况和磁盘IO

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

1、从https://pypi.python.org/pypi/docker-py#downloads 这里下载docker-py-xxx.tar.gz到本地再传进去linux系统里面进行解压
zabbix监控容器情况和磁盘IO
python setup.py install
zabbix监控容器情况和磁盘IO

https://pypi.python.org/packages/6c/54/f7e9cea6897636a04e74c3954f0d8335cc38f7d01e27eec98026b049a300/setuptools-38.5.1.zip#md5=1705ae74b04d1637f604c336bb565720

2、在agentd那里加入自定义模块
UserParameter=docker_low_discovery[],/bin/bash /etc/zabbix/scripts/docker_low_discovery.sh $1
UserParameter=docker_stats[
],sudo /usr/bin/python /etc/zabbix/scripts/docker_monitor.py $1 $2
UserParameter=docker_process[],/bin/bash /etc/zabbix/scripts/docker_processmonitor.sh $1 $2 $3
UserParameter=custom.vfs.dev.read.ops[
],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}' #磁盘读的次数 
UserParameter=custom.vfs.dev.read.ms[],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}' #磁盘读的毫秒数 
UserParameter=custom.vfs.dev.write.ops[
],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}' #磁盘写的次数 
UserParameter=custom.vfs.dev.write.ms[],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}' #磁盘写的毫秒数 
UserParameter=custom.vfs.dev.io.active[
],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}' 
UserParameter=custom.vfs.dev.io.ms[],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}' #花费在IO操作上的毫秒数 
UserParameter=custom.vfs.dev.read.sectors[
],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}' #读扇区的次数(一个扇区的等于512B) 
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}' #写扇区的次数(一个扇区的等于512B)
zabbix监控容器情况和磁盘IO

3、把两个shell脚本和一个python脚本放进去zabbix-agent的目录下
zabbix监控容器情况和磁盘IO

docker_monitor.py
[root@spark scripts]# cat docker_monitor.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-
from docker import Client
import sys
import subprocess
import os
global null
null=''

def check_container_stats(container_name,collect_item):
    container_collect=docker_client.stats(container_name)
    old_result=eval(container_collect.next())
    new_result=eval(container_collect.next())
    container_collect.close()
    if collect_item == 'cpu_total_usage':
        result=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
    elif collect_item == 'cpu_system_usage':
        result=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
    elif collect_item == 'cpu_percent':
        cpu_total_usage=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
        cpu_system_uasge=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
        cpu_num=len(old_result['cpu_stats']['cpu_usage']['percpu_usage'])
        result=round((float(cpu_total_usage)/float(cpu_system_uasge))*cpu_num*100.0,2)
    elif collect_item == 'mem_usage':
        result=new_result['memory_stats']['usage']
    elif collect_item == 'mem_limit':
        result=new_result['memory_stats']['limit']
    elif collect_item == 'mem_percent':
        mem_usage=new_result['memory_stats']['usage']
        mem_limit=new_result['memory_stats']['limit']
        result=round(float(mem_usage)/float(mem_limit)*100.0,2)
    elif collect_item == 'network_rx_bytes':
        network_check_command="""sudo /usr/bin/docker exec %s cat /proc/net/dev|sed -n 3p|awk '{print $2,$10}'"""%container_name
        result=os.popen(network_check_command).read().split()[0]
    elif collect_item == 'network_tx_bytes':
        network_check_command="""sudo /usr/bin/docker exec %s cat /proc/net/dev|sed -n 3p|awk '{print $2,$10}'"""%container_name
        result=os.popen(network_check_command).read().split()[1]
    return result
if __name__ == "__main__":
    docker_client = Client(base_url='unix://var/run/docker.sock', version='1.17')
    container_name=sys.argv[1]
    collect_item=sys.argv[2]
    print check_container_stats(container_name,collect_item)

zabbix监控容器情况和磁盘IO

docker_low_discovery.sh
[root@spark scripts]# cat docker_low_discovery.sh

#!/bin/bash
#Fucation:docker low-level discovery
docker() {
            port=($(sudo docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"

                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"

                       fi
               done

                          printf '\t ]\n'
                          printf '}\n'
}
case $1 in
docker)
docker
;;
*)
echo "Usage:`basename $0` {docker}"
;;
esac

zabbix监控容器情况和磁盘IO

docker_processmonitor.sh
[root@spark scripts]# cat docker_processmonitor.sh

#!/bin/bash
#license:GPL
processmem(){
        sudo /usr/bin/docker exec $1 ps aux|grep $2|grep -v "grep"|grep -v "processstatus.sh"|awk '{sum+=$6}; END{print sum}'
}
processcpu(){
        sudo /usr/bin/docker exec $1 ps aux|grep $2|grep -v "grep"|grep -v "processstatus.sh"|awk '{sum+=$3}; END{print sum}'
}
processport(){
        sudo /usr/bin/docker exec $1 ss -antlp|grep $2|grep LISTEN|wc -l
}
case "$3" in
mem)
processmem $1 $2
;;
cpu)
processcpu $1 $2
;;
port)
processport $1 $2
;;
*)
echo "Usage: $0 {docker_containername}{processname}{mem|cpu|port}"
;;
esac

zabbix监控容器情况和磁盘IO

3、然后可以在zabbix_server端测试是否能够获取到相应的数据:
[root@mha ~]# zabbix_get -s 192.168.198.131 -p 10050 -k "docker_stats[docker_signage_1,network_tx_bytes]"
343128
[root@mha ~]# zabbix_get -s 192.168.198.131 -p 10050 -k "docker_stats[docker_signage_1,network_rx_bytes]"
10617111
[root@mha ~]# zabbix_get -s 192.168.198.131 -p 10050 -k "docker_stats[docker_signage_1,network_rx_bytes]"
9716403
[root@mha ~]# zabbix_get -s 192.168.198.131 -p 10050 -k "docker_stats[docker_signage_1,network_tx_bytes]"
137637
[root@mha ~]# zabbix_get -s 192.168.198.131 -p 10050 -k "docker_low_discovery[docker]"
{
"data":[
{
"{#CONTAINERNAME}":"docker_signage_1"}
]
}
zabbix监控容器情况和磁盘IO

4、在zabbix导入模板
http://down.51cto.com/data/2366161 从这里下载到windows本地,然后在web页面导入后,很快就加入自动发现了
zabbix监控容器情况和磁盘IO

zabbix监控容器情况和磁盘IO
zabbix监控容器情况和磁盘IO

5、磁盘IO
然后添加grahs(图形)和添加对应的自定义监控项

zabbix监控容器情况和磁盘IO

zabbix监控容器情况和磁盘IO





     本文转自wsw26 51CTO博客,原文链接:http://blog.51cto.com/wsw26/2068179,如需转载请自行联系原作者





相关文章
|
3月前
|
缓存 运维 Linux
Linux系统调优详解(十二)——IO调优之磁盘测速
Linux系统调优详解(十二)——IO调优之磁盘测速
63 1
|
17天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
28天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
24 0
|
3月前
|
运维 Linux
Linux系统调优详解(五)——磁盘IO状态查看命令
Linux系统调优详解(五)——磁盘IO状态查看命令
55 5
|
13天前
|
存储 消息中间件 缓存
jeecgboot运行磁盘不足问题( java.io.IOException)和redis闪退问题
jeecgboot运行磁盘不足问题( java.io.IOException)和redis闪退问题
17 0
|
28天前
|
监控 网络协议 Unix
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
19 0
|
2月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
26 2
|
3月前
|
监控 Cloud Native 关系型数据库
使用 Grafana 统一监控展示 - 对接 Zabbix
使用 Grafana 统一监控展示 - 对接 Zabbix
|
4月前
|
Linux 测试技术
百度搜索:蓝易云【linux系统磁盘IO性能检测教程】
这些是在Linux系统中检测磁盘IO性能的常见方法。根据您的需求和具体环境,您可以选择适合您的方法来监视和测试磁盘IO性能。请注意,在进行性能测试时要小心,以避免对系统造成不必要的负载或影响正常运行。
46 0
|
16小时前
|
存储 安全 文件存储
如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问
如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问
9 0

推荐镜像

更多