当前位置: 首页 > news >正文

网站里的活动专题栏怎么做/百度山西授权代理

网站里的活动专题栏怎么做,百度山西授权代理,杭州市招投标网,wordpress如何拖移小工具https://segmentfault.com/a/1190000002362911 从 VM 迁移到 Docker 容器是非常容易的,除了监控部分。一个简单的方法,运行一个数据收集客户端(比如 Zabbix 客户端),绝对不是一个好的解决方案,因为它与 Doc…

https://segmentfault.com/a/1190000002362911

从 VM 迁移到 Docker 容器是非常容易的,除了监控部分。一个简单的方法,运行一个数据收集客户端(比如 Zabbix 客户端),绝对不是一个好的解决方案,因为它与 Docker 的每个容器中只有一个清楚明确任务的哲学相悖,并且也因为它要求使用定制的镜像。从收集 LXC 和 Docker 容器的指标开始,我用一个基于系统的简单脚本来收集来自于 Docker 容器的指标。

我使用 Zabbix 来汇总性能指标,因此该脚本将被设计成用在 Zabbix 客户端的 user parameter。一个 user parameter 是一个被 Zabbix 运行并且返回某些信息的基本脚本。User parameters 不得不被定义在客户端的配置文件中,但可能接收参数是为了单个脚本的多个信息。

主机指标

这些指标在 Docker 主机级别生成,而不是容器级别。这是一个热身,一个概念验证或者是一个冒烟测试用于断言在我的监控系统,一切都是正确安装的。目前是收集一些与容器相关的指标。

  1. 正在运行的容器数量
  2. 已经定义的容器总数量
  3. 崩溃的容器数量 即多少个已经停止的容器以非 0 返回码退出。

以下是一个简单的 shell 实现:

#!/bin/bash

function countContainers() {docker ps -q $1 | wc -l
}function countCrashedContainers() {docker ps -a | grep -v -F 'Exited (0)' | grep -c -F 'Exited ('
}TYPE=${1-all}case $TYPE inrunning) COUNT_FUNCTION="countContainers"; shift;;crashed) COUNT_FUNCTION="countCrashedContainers"; shift;;all) COUNT_FUNCTION="countContainers -a"; shift;;
esac$COUNT_FUNCTION

然后对 Zabbix 做一些配置后,会生成看起来像这样的图:

因为我有 9 个容器长期运行,3 个数据容器和一个容器以定时每小时启动一次,这是符合我期望的。

一个类似的脚本可以被写的用于收集镜像的指标,比如镜像的总数量以及多少是 dangling 的。

容器指标

首先我想收集每个容器的以下指标:

  1. 容器的 IP 地址
  2. 容器的状态(running, paused, stopped, crashed)
  3. user 和 system CPU time
  4. 容器进程的内存使用
  5. 网络活动(in 和 out)

IP 地址和容器状态

这些可以在 docker inspect <container-id> 发现。IP 地址被发现在 NetworkSettings.IPAddress 以及我从以下获取到的 State 计算状态:

  • 0 -> Running
  • 1 -> Paused
  • 2 -> Stopped
  • 3 -> Crashed (即以非零返回码退出)

CPU 和 Memory

cpu 和 内存可以在 /sys/fs/cgroup/docker 目录下 cpuacct.stat 和 memory.stat 文件检索到。

Network activity

根据博客文章,目前检索 network activity 比检索 CPU 或 Memory 更复杂并且我不喜欢在文章中提到的方法。尽管如此,这些数据可以十分容易的从容


器中检索到的,通过在容器实例运行一个简单的 ifconfig eth0 命令或是从 /sys 层次结构中查看。感谢 Docker 1.3 中引进的 exec 命令,运行这个命令进入一个运行着的容器是十分容易的,不需要任何定制镜像或者在启动容器时指定任何命令。

脚本

#!/usr/bin/env python__author__ = 'Christophe Labouisse'import argparse
import re
import osfrom docker import Client
from docker.utils import kwargs_from_envdef display_cpu(args):detail = c.inspect_container(args.container)if bool(detail["State"]["Running"]):container_id = detail['Id']cpu_usage = {}with open('/sys/fs/cgroup/cpuacct/docker/' + container_id + '/cpuacct.stat', 'r') as f:for line in f:m = re.search(r"(system|user)\s+(\d+)", line)if m:cpu_usage[m.group(1)] = int(m.group(2))if args.type == "all":cpu = cpu_usage["system"] + cpu_usage["user"]else:cpu = cpu_usage[args.type]user_ticks = os.sysconf(os.sysconf_names['SC_CLK_TCK'])print(float(cpu) / user_ticks)else:print(0)def display_ip(args):detail = c.inspect_container(args.container)print(detail['NetworkSettings']['IPAddress'])def display_memory(args):detail = c.inspect_container(args.container)if bool(detail["State"]["Running"]):container_id = detail['Id']with open('/sys/fs/cgroup/memory/docker/' + container_id + '/memory.stat', 'r') as f:for line in f:m = re.search(r"total_rss\s+(\d+)", line)if m:print(m.group(1))returnprint(0)def display_network(args):detail = c.inspect_container(args.container)if bool(detail["State"]["Running"]):ifconfig = c.execute(args.container, "ifconfig eth0")m = re.search(("RX" if args.direction == "in" else "TX") + r" bytes:(\d+)", str(ifconfig))if m:print(m.group(1))else:b = c.execute(args.container, "cat /sys/devices/virtual/net/eth0/statistics/"+("rx" if args.direction == "in" else "tx")+"_bytes")if re.match(r"\s*\d+\s*", b):print(b)else:print(0)else:print(0)def display_status(args):detail = c.inspect_container(args.container)state = detail["State"]if bool(state["Paused"]):print(1) # Pausedelif bool(state["Running"]):print(0) # Runningelif int(state["ExitCode"]) == 0:print(2) # Stoppedelse:print(3) # Crashedparser = argparse.ArgumentParser()parser.add_argument("container", help="Container name")subparsers = parser.add_subparsers(title="Counters", description="Available counters", dest="dataType")cpu_parser = subparsers.add_parser("cpu", help="Display CPU usage")
cpu_parser.add_argument("type", choices=["system", "user", "all"])
cpu_parser.set_defaults(func=display_cpu)ip_parser = subparsers.add_parser("ip", help="Display IP Address")
ip_parser.set_defaults(func=display_ip)memory_parser = subparsers.add_parser("memory", help="Display memory usage")
memory_parser.set_defaults(func=display_memory)network_parser = subparsers.add_parser("network", help="Display network usage")
network_parser.add_argument("direction", choices=["in", "out"])
network_parser.set_defaults(func=display_network)status_parser = subparsers.add_parser("status", help="Display the container status")
status_parser.set_defaults(func=display_status)c = Client(**(kwargs_from_env()))args = parser.parse_args()
args.func(args)

延伸

  • Simple Monitoring for Docker (Part II)
http://www.jmfq.cn/news/4845313.html

相关文章:

  • 长春怎样建网站?/适合seo的网站
  • 建设专业网站/什么是网络推广营销
  • 做网站凡科如何/百度搜索引擎的网址
  • 如何将自己做的网站/软文平台发布
  • 做医疗网站要几个人/网络营销案例ppt课件
  • wordpress连接谷歌地图/游戏优化大师官方下载
  • 手机网站建设代理商/做网站哪个平台好
  • 东营建设信息网官网查询/优化推广关键词
  • 网站开发做什么的/中国人民银行网站
  • 自学做动态网站/推广优化网站排名教程
  • 网站开发和设计如何合作/微信营销推广软件
  • 阜阳网站建设价格低/如何建立独立网站
  • 免费网站使用/免费观看b站的广告网站平台
  • 自己电脑做网站要下载/西点培训前十名学校
  • 合肥做网站的公司有哪些/如何建立网上销售平台
  • 跨境电商平台培训哪家最正规/企业网站排名优化公司
  • 营销技巧的重要性/seo公司后付费
  • 公司网站建设技术方案/seo营销论文
  • 怎样做旅游城市住宿网站/中国营销网站
  • 长沙做营销型网站公司/一个新产品怎么推广
  • 公司做了网站怎么做推广/企业seo案例
  • 怎么做苹果手机网站/百度公司的发展历程
  • 衡水提供网站设计公司哪家专业/百度网站建设
  • 如何建设大型电子商务网站/建站公司哪家好
  • 学校网站建设主要成绩/seo综合查询怎么用
  • 网站如何做团购/网络营销培训
  • 98证书兼职网/汕头自动seo
  • 公司怎么做网站页面/搜索引擎seo外包
  • wordpress申请网站/舆情危机公关公司
  • 用html5做的网站过程/网站优化软件哪个好