成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Docker 簡單監(jiān)控

fizz / 2538人閱讀

摘要:簡單監(jiān)控標(biāo)簽空格分隔監(jiān)控作者是,原文地址是從遷移到容器是非常容易的,除了監(jiān)控部分。這是一個(gè)熱身,一個(gè)概念驗(yàn)證或者是一個(gè)冒煙測(cè)試用于斷言在我的監(jiān)控系統(tǒng),一切都是正確安裝的。目前是收集一些與容器相關(guān)的指標(biāo)。

Docker 簡單監(jiān)控

標(biāo)簽(空格分隔): Docker 監(jiān)控 Monitoring


  

作者是 LE JOURNAL DE CHRISTOPHE,原文地址是 Simple Monitoring for Docker (Part I)

從 VM 遷移到 Docker 容器是非常容易的,除了監(jiān)控部分。一個(gè)簡單的方法,運(yùn)行一個(gè)數(shù)據(jù)收集客戶端(比如 Zabbix 客戶端),絕對(duì)不是一個(gè)好的解決方案,因?yàn)樗c Docker 的每個(gè)容器中只有一個(gè)清楚明確任務(wù)的哲學(xué)相悖,并且也因?yàn)樗笫褂枚ㄖ频溺R像。從收集 LXC 和 Docker 容器的指標(biāo)開始,我用一個(gè)基于系統(tǒng)的簡單腳本來收集來自于 Docker 容器的指標(biāo)。

我使用 Zabbix 來匯總性能指標(biāo),因此該腳本將被設(shè)計(jì)成用在 Zabbix 客戶端的 user parameter。一個(gè) user parameter 是一個(gè)被 Zabbix 運(yùn)行并且返回某些信息的基本腳本。User parameters 不得不被定義在客戶端的配置文件中,但可能接收參數(shù)是為了單個(gè)腳本的多個(gè)信息。

主機(jī)指標(biāo)

這些指標(biāo)在 Docker 主機(jī)級(jí)別生成,而不是容器級(jí)別。這是一個(gè)熱身,一個(gè)概念驗(yàn)證或者是一個(gè)冒煙測(cè)試用于斷言在我的監(jiān)控系統(tǒng),一切都是正確安裝的。目前是收集一些與容器相關(guān)的指標(biāo)。

正在運(yùn)行的容器數(shù)量

已經(jīng)定義的容器總數(shù)量

崩潰的容器數(shù)量 即多少個(gè)已經(jīng)停止的容器以非 0 返回碼退出。

以下是一個(gè)簡單的 shell 實(shí)現(xiàn):

#!/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 in
    running) COUNT_FUNCTION="countContainers"; shift;;
    crashed) COUNT_FUNCTION="countCrashedContainers"; shift;;
    all) COUNT_FUNCTION="countContainers -a"; shift;;
esac

$COUNT_FUNCTION

然后對(duì) Zabbix 做一些配置后,會(huì)生成看起來像這樣的圖:

因?yàn)槲矣?9 個(gè)容器長期運(yùn)行,3 個(gè)數(shù)據(jù)容器和一個(gè)容器以定時(shí)每小時(shí)啟動(dòng)一次,這是符合我期望的。

一個(gè)類似的腳本可以被寫的用于收集鏡像的指標(biāo),比如鏡像的總數(shù)量以及多少是 dangling 的。

容器指標(biāo)

首先我想收集每個(gè)容器的以下指標(biāo):

容器的 IP 地址

容器的狀態(tài)(running, paused, stopped, crashed)

user 和 system CPU time

容器進(jìn)程的內(nèi)存使用

網(wǎng)絡(luò)活動(dòng)(in 和 out)

IP 地址和容器狀態(tài)

這些可以在 docker inspect 發(fā)現(xiàn)。IP 地址被發(fā)現(xiàn)在 NetworkSettings.IPAddress 以及我從以下獲取到的 State 計(jì)算狀態(tài):

0 -> Running

1 -> Paused

2 -> Stopped

3 -> Crashed (即以非零返回碼退出)

CPU 和 Memory

cpu 和 內(nèi)存可以在 /sys/fs/cgroup/docker 目錄下 cpuacct.statmemory.stat 文件檢索到。

Network activity

根據(jù)博客文章,目前檢索 network activity 比檢索 CPU 或 Memory 更復(fù)雜并且我不喜歡在文章中提到的方法。盡管如此,這些數(shù)據(jù)可以十分容易的從容器中檢索到的,通過在容器實(shí)例運(yùn)行一個(gè)簡單的 ifconfig eth0 命令或是從 /sys 層次結(jié)構(gòu)中查看。感謝 Docker 1.3 中引進(jìn)的 exec 命令,運(yùn)行這個(gè)命令進(jìn)入一個(gè)運(yùn)行著的容器是十分容易的,不需要任何定制鏡像或者在啟動(dòng)容器時(shí)指定任何命令。

腳本
#!/usr/bin/env python

__author__ = "Christophe Labouisse"

import argparse
import re
import os

from docker import Client
from docker.utils import kwargs_from_env


def 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_rsss+(d+)", line)
                if m:
                    print(m.group(1))
                    return

    print(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) # Paused
    elif bool(state["Running"]):
        print(0) # Running
    elif int(state["ExitCode"]) == 0:
        print(2) # Stopped
    else:
        print(3) # Crashed


parser = 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)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26345.html

相關(guān)文章

  • 幾種 Docker 監(jiān)控工具對(duì)比

    摘要:在我們列舉的幾個(gè)監(jiān)控的服務(wù)或平臺(tái)中,這是唯一一款國內(nèi)產(chǎn)品。也是一款付費(fèi)監(jiān)控解決方案,計(jì)劃收費(fèi)方案是美分小時(shí)。同樣也支持監(jiān)控,還包括對(duì)容器級(jí)事件的監(jiān)測(cè)停止開始等等和管理容器產(chǎn)生的日志。由于是一個(gè)監(jiān)控方案,相對(duì)來說它的安裝和部署都比較簡單。 輕量級(jí)虛擬化容器 Docker,自發(fā)布以來便廣受業(yè)界關(guān)注,在開源界和企業(yè)界掀起了一陣風(fēng)。Docker 容器相對(duì)于 VM 有以下幾個(gè)優(yōu)勢(shì):啟動(dòng)速度快;資...

    張春雷 評(píng)論0 收藏0
  • Docker 監(jiān)控實(shí)戰(zhàn)

    摘要:監(jiān)控告警是運(yùn)營系統(tǒng)最核心的功能之一,騰訊內(nèi)部有一套很成熟的監(jiān)控告警平臺(tái),而且開發(fā)運(yùn)維同學(xué)已經(jīng)習(xí)慣這套平臺(tái),如果我們針對(duì)容器再開發(fā)一個(gè)監(jiān)控告警平臺(tái),會(huì)花費(fèi)很多精力,而且沒有太大的意義。也是一款付費(fèi)監(jiān)控解決方案,計(jì)劃收費(fèi)方案是美分小時(shí)。 如今,越來越多的公司開始使用 Docker 了,現(xiàn)在來給大家看幾組數(shù)據(jù): 2 / 3 的公司在嘗試了 Docker 后最終使用了它 也就是說 Docker...

    william 評(píng)論0 收藏0
  • 斌哥的 Docker 進(jìn)階指南—監(jiān)控方案的實(shí)現(xiàn)

    摘要:本文轉(zhuǎn)自劉斌博文如何選擇監(jiān)控方案,文中劉斌從技術(shù)的角度深入解釋了監(jiān)控的數(shù)據(jù)采集原理,介紹了現(xiàn)有開源的監(jiān)控方案,以及能夠?qū)M(jìn)行監(jiān)控功能的主流服務(wù)工具。下一章,劉斌將為大家介紹監(jiān)控的開原方案,主流服務(wù),及其特點(diǎn)。 過去的一年中,關(guān)于 Docker 的話題從未斷過,而如今,從嘗試 Docker 到最終決定使用 Docker 的轉(zhuǎn)化率依然在逐步升高,關(guān)于 Docker 的討論更是有增無減。另一...

    X_AirDu 評(píng)論0 收藏0
  • 用 OneAPM Cloud Insight 監(jiān)控 Docker 性能

    摘要:雖然這是監(jiān)測(cè)最簡單的方法,但之后我們還會(huì)提供在容器中監(jiān)控所有運(yùn)行的軟件的探針版本,敬請(qǐng)期待。儀表盤通過標(biāo)簽訂制指標(biāo)在中,您可以在自定義儀表盤中基于一個(gè)或多個(gè)標(biāo)簽來顯示指標(biāo)。報(bào)警在定義跨越集群容器的警報(bào)是非常有用的。 Docker 是構(gòu)建和部署軟件的一個(gè)新興的輕量級(jí)的平臺(tái),也是一個(gè)減輕替代虛擬機(jī)的容器。Docker 通過給開發(fā)者提供兼容不同環(huán)境的鏡像,成為解決現(xiàn)代基礎(chǔ)設(shè)施的持續(xù)交付的一個(gè)...

    leon 評(píng)論0 收藏0
  • Docker 監(jiān)控- Prometheus VS Cloud Insight

    摘要:由發(fā)明,適合于監(jiān)控基于容器的基礎(chǔ)架構(gòu)。有關(guān)其數(shù)據(jù)聚合的功能可以閱讀數(shù)據(jù)聚合分組新一代系統(tǒng)監(jiān)控的核心功能。所抓取的性能指標(biāo)算是較為全面,部署和展現(xiàn)方式都是相當(dāng)簡單易懂的。 如今,越來越多的公司開始使用 Docker 了,2 / 3 的公司在嘗試了 Docker 后最終使用了它。為了能夠更精確的分配每個(gè)容器能使用的資源,我們想要實(shí)時(shí)獲取容器運(yùn)行時(shí)使用資源的情況,怎樣對(duì) Docker 上的應(yīng)...

    liuyix 評(píng)論0 收藏0
  • 容器和實(shí)時(shí)資源監(jiān)控的必知要素

    摘要:將作為最直觀的例子盡管以下大部分適用于其他容器系統(tǒng),包括,我們可以將實(shí)時(shí)容器指標(biāo)分為四個(gè)基本類別可以監(jiān)視單個(gè)容器使用的總內(nèi)存,以及高速緩存和交換內(nèi)存的數(shù)量,以及表示進(jìn)程使用的且未緩存或存儲(chǔ)在磁盤上的內(nèi)存如匿名內(nèi)存映射的駐留集大小或和棧。 您是否實(shí)時(shí)監(jiān)控您的容器資源?如果沒有,那意味著您可能沒有對(duì)之進(jìn)行有效監(jiān)控。在快速變化的、動(dòng)態(tài)的微服務(wù)環(huán)境中,即使是幾秒鐘以前的監(jiān)視數(shù)據(jù)也可能不再可行。...

    frank_fun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<