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

資訊專欄INFORMATION COLUMN

我們忘記監(jiān)控的 10 件事

inapt / 3090人閱讀

摘要:在我們信賴一些并且我們也直接監(jiān)控這些權(quán)威的服務(wù)器是的,發(fā)生過所有的權(quán)威都下線的情況因?yàn)樗苌侔l(fā)生以至于每個(gè)人都忘記了這件事情。對我們的硬件來說,監(jiān)控我們的輸出很重要。我們已經(jīng)發(fā)現(xiàn)重要的是要有可視性的健康檢查的狀態(tài)。

  

注:該文作者為 ehiah,原文地址為 10 Things We Forgot to Monitor

總有一組標(biāo)準(zhǔn)的統(tǒng)一監(jiān)控指標(biāo)(Disk Usage, Memory Usage, Load, Pings 等等)。除了那個(gè)以外,我們還有從操作我們的生產(chǎn)系統(tǒng)學(xué)習(xí)到的很多經(jīng)驗(yàn),幫助我們形成監(jiān)控的廣度。

我喜歡的其中一條 tweets 是來自于 @DevOps_Borat:

  

"Law of Murphy for devops: if thing can able go wrong, is mean is already wrong but you not have Nagios alert of it yet."

  

devops 的墨菲定律:如果事情可能出錯(cuò)了,那意味著它已經(jīng)是錯(cuò)誤的但你還沒有使用 Nagios 為它報(bào)警。

下面是我在 bitly 的一個(gè)監(jiān)控小清單,它來自于成長的經(jīng)驗(yàn)(有時(shí)是痛苦的),和那些實(shí)例后面之后的小的故事片段。

1 - Fork Rate

我曾經(jīng)有過這樣一個(gè)問題,故意通過在 /etc/modprobe.conf 中使用 options ipv6 disable=1alias ipv6 off 來禁掉 IPv6。這給我們帶來了一個(gè)大的問題:每次一個(gè)新的 curl 對象被創(chuàng)建,modprobe 將大量產(chǎn)生,檢查 net-pf-10 來評估 IPv6 的狀態(tài)。這個(gè) fork 轟炸了 box,然后我們終于通過觀察 /proc/stat 中的進(jìn)程數(shù)量以每秒幾百的增加來追蹤到了原因。我們的正常期望是在一個(gè)穩(wěn)定的網(wǎng)絡(luò)的生產(chǎn)環(huán)境中 fork 速率是每秒 1-10 。

#!/bin/bash
# Copyright bitly, Aug 2011 
# written by Jehiah Czebotar

DATAFILE="/var/tmp/nagios_check_forkrate.dat"
VALID_INTERVAL=600

OK=0
WARNING=1
CRITICAL=2
UNKNOWN=-1

function usage()
{
    echo "usage: $0 --warn= --critical="
    echo "this script checks the rate processes are created"
    echo "and alerts when it goes above a certain threshold"
    echo "it saves the value from each run in $DATAFILE"
    echo "and computes a delta on the next run. It will ignore"
    echo "any values that are older than --valid-interval=$VALID_INTERVAL (seconds)"
    echo "warn and critical values are in # of new processes per second"
}

while [ "$1" != "" ]; do
    PARAM=`echo $1 | awk -F= "{print $1}"`
    VALUE=`echo $1 | awk -F= "{print $2}"`
    case $PARAM in
        -w | --warn)
            WARN_THRESHOLD=$VALUE
            ;;
        -c | --critical)
            CRITICAL_THRESHOLD=$VALUE
            ;;
        --valid-interval)
            VALID_INTERVAL=$VALUE
            ;;
        -h | --help)
            usage
            exit 0;
            ;;
    esac
    shift
done

if [ -z "$WARN_THRESHOLD" ] || [ -z "$CRITICAL_THRESHOLD" ]; then
    echo "error: --warn and --critical parameters are required"
    exit $UNKNOWN
fi
if [[ $WARN_THRESHOLD -ge $CRITICAL_THRESHOLD ]]; then
    echo "error: --warn ($WARN_THRESHOLD) can"t be greater than --critical ($CRITICAL_THRESHOLD)"
    exit $UNKNOWN
fi

NOW=`date +%s`
min_valid_ts=$(($NOW - $VALID_INTERVAL))
current_process_count=`awk "/processes/ {print $2}" /proc/stat`

if [ ! -f $DATAFILE ]; then
    mkdir -p $(dirname $DATAFILE)
    echo -e "$NOW	$current_process_count" > $DATAFILE
    echo "Missing $DATAFILE; creating"
    exit $UNKNOWN
fi

# now compare this to previous
mv $DATAFILE{,.previous}
while read ts process_count; do
    if [[ $ts -lt $min_valid_ts ]]; then
        continue
    fi
    if [[ $ts -ge $NOW ]]; then
        # we can"t use data from the same second
        continue
    fi
    # calculate the rate
    process_delta=$(($current_process_count - $process_count))
    ts_delta=$(($NOW - $ts))
    current_fork_rate=`echo "$process_delta / $ts_delta" | bc`
    echo -e "$ts	$process_count" >> $DATAFILE
done < $DATAFILE.previous
echo -e "$NOW	$current_process_count" >> $DATAFILE

echo "fork rate is $current_fork_rate processes/second (based on the last $ts_delta seconds)"
if [[ $current_fork_rate -ge $CRITICAL_THRESHOLD ]]; then
    exit $CRITICAL
fi
if [[ $current_fork_rate -ge $WARN_THRESHOLD ]]; then
    exit $WARNING
fi
exit $OK
2 - flow control packets

TL;DR; 如果你的網(wǎng)絡(luò)配置了優(yōu)異的 flow control packets 并且沒有配置禁止它,你可以暫時(shí)的引起丟棄流量。(如果這聽起來不像一個(gè)中斷,你需要檢查你的頭。)

$ /usr/sbin/ethtool -S eth0 | grep flow_control
rx_flow_control_xon: 0
rx_flow_control_xoff: 0
tx_flow_control_xon: 0
tx_flow_control_xoff: 0

注意:讀這個(gè)來弄明白如何將這些 flow control frames 級聯(lián)到 switch-wide 的 連接丟失,如果你使用了特定的 Broadcom NIC’s,你應(yīng)該在你的 switch gear 趨勢你的指標(biāo)。不僅于此,還要觀察你的丟幀現(xiàn)象。

  

注:how these flow control frames can cascade to switch-wide loss of connectivity (不知道怎么翻譯,然后含義是什么,求大神解析)

3 - Swap In/Out Rate

通常檢查的是 swap 使用是否超過了一個(gè)閥值,但是即使你有少量的內(nèi)存交換,這個(gè)實(shí)際的 swapped in/out 的速率都可能影響性能,而不是數(shù)量。這是一個(gè)更直接的檢查那個(gè)狀態(tài)的腳本:

#!/bin/bash
# Show the rate of swapping (in number of pages) between executions

OK=0
WARNING=1
CRITICAL=2
UNKNOWN=-1
EXITFLAG=$OK

WARN_THRESHOLD=1
CRITICAL_THRESHOLD=100

IN_DATAFILE="/var/tmp/nagios_check_swap_pages_in.dat"
OUT_DATAFILE="/var/tmp/nagios_check_swap_pages_out.dat"
VALID_INTERVAL=600

function usage()
{
    echo "usage: $0 --warn= --critical="
    echo "Script checks for any swap usage"
}

while [ "$1" != "" ]; do
    PARAM=`echo $1 | awk -F= "{print $1}"`
    VALUE=`echo $1 | awk -F= "{print $2}"`
    case $PARAM in
        --warn)
            WARN_THRESHOLD=$VALUE
            ;;
        --critical)
            CRITICAL_THRESHOLD=$VALUE
            ;;
        -h | --help)
            usage
            exit 0;
            ;;
    esac
    shift
done


NOW=`date +%s`
min_valid_ts=$(($NOW - $VALID_INTERVAL))

CURRENT_PAGES_SWAPPED_IN=`vmstat -s | grep "pages swapped in" | awk "{print $1}"`
CURRENT_PAGES_SWAPPED_OUT=`vmstat -s | grep "pages swapped out" | awk "{print $1}"`

mkdir -p $(dirname $IN_DATAFILE)
if [ ! -f $IN_DATAFILE ]; then
    echo -e "$NOW	$CURRENT_PAGES_SWAPPED_IN" > $IN_DATAFILE
    echo "Missing $IN_DATAFILE; creating"
    EXITFLAG=$UNKNOWN
fi
if [ ! -f $OUT_DATAFILE ]; then
    echo -e "$NOW	$CURRENT_PAGES_SWAPPED_OUT" > $OUT_DATAFILE
    echo "Missing $OUT_DATAFILE; creating"
    EXITFLAG=$UNKNOWN
fi

if [ $EXITFLAG != $OK ]; then
    exit $EXITFLAG
fi

function swap_rate() {
    local file=$1
    local current=$2
    local rate=0

    mv $file ${file}.previous
    while read ts swap_count; do
        if [[ $ts -lt $min_valid_ts ]]; then
            continue
        fi
        if [[ $ts -ge $NOW ]]; then
            # we can"t use data from the same second
            continue
        fi
        # calculate the rate
        swap_delta=$(($current - $swap_count))
        ts_delta=$(($NOW - $ts))
        rate=`echo "$swap_delta / $ts_delta" | bc`
        echo -e "$ts	$swap_count" >> $file
    done < ${file}.previous
    echo -e "$NOW	$current" >> $file
    echo $rate
}

in_rate=`swap_rate $IN_DATAFILE $CURRENT_PAGES_SWAPPED_IN`
out_rate=`swap_rate $OUT_DATAFILE $CURRENT_PAGES_SWAPPED_OUT`

echo "swap in/out is $in_rate/$out_rate per second"
if [[ $in_rate -ge $CRITICAL_THRESHOLD ]] || [[ $out_rate -ge $CRITICAL_THRESHOLD ]]; then
    exit $CRITICAL
fi
if [[ $in_rate -ge $WARN_THRESHOLD ]] || [[ $out_rate -ge $WARN_THRESHOLD ]]; then
    exit $WARNING
fi
exit $OK
4 - Server Boot Notification

意外重啟是生活的一部分,你知道它在你的主機(jī)上是什么時(shí)候發(fā)生的嗎?大部分的人不知道,我們使用一個(gè)簡單的初始化腳本來觸發(fā)一個(gè)系統(tǒng) boot 的 ops 郵件。溝通新服務(wù)的配置,和幫助捕獲狀態(tài)改變的信息即使業(yè)務(wù)正常處理故障不報(bào)警,這是非常有價(jià)值的。

#!/bin/bash
#
# *************************************************
# chkconfig: 2345 99 99
# description: notify email address on system boot.
# *************************************************
# Installing:
# 1) save as /etc/rc.d/init.d/notify
# 2) set the desired email address in "MAILADD" variable
# 3) chmod a+w /etc/rc.d/init.d/notify
# 4) /sbin/chkconfig --level 2345 notify on

PATH=/bin:/usr/sbin:/usr/bin
SERVER=`hostname`
case $1 in
    start)
        PUBLIC_IP=`curl --connect-timeout 5 -s icanhazip.com`
        PUBLIC_IPV6=`curl -6 --connect-timeout 5 -s icanhazip.com`
        [email protected]
        mail -s " Boot of $SERVER" $MAILADD <

5 - NTP Clock Offset

如果沒監(jiān)控,是的,你眾多服務(wù)器中的一臺(tái)可能是關(guān)閉的。如果你從沒有考慮過時(shí)鐘延期,你可能并沒有在您的服務(wù)器上運(yùn)行 ntpd。

我們使用 check_ntp_time 來檢查。

6 - DNS Resolutions

內(nèi)部 DNS - 它是你基礎(chǔ)架構(gòu)中比你認(rèn)識到的更加信賴的隱藏部分。這個(gè)檢查項(xiàng)是:

每臺(tái)服務(wù)器的本地 resolutions

如果你在你的數(shù)據(jù)中心有本地的 DNS,你需要檢查 resolution, 和 查詢的數(shù)量

檢查你使用的每個(gè)上游 DNS 解析器的可用性

外部 DNS - 通過你發(fā)布的外部的 nameservers 是能很好的校驗(yàn)?zāi)愕耐獠坑蛎恼_解析的。在 bitly 我們信賴一些 CC TLD’s 并且我們也直接監(jiān)控這些權(quán)威的服務(wù)器(是的,發(fā)生過所有的權(quán)威 nameservers 都下線的情況)

7 - SSL Expiration

因?yàn)樗苌侔l(fā)生以至于每個(gè)人都忘記了這件事情。解決方案非常簡單,僅僅需要檢查它并且報(bào)警,然后留下足夠的時(shí)間來更新你的 SSL 證書。

define command{
    command_name    check_ssl_expire
    command_line    $USER1$/check_http --ssl -C 14 -H $ARG1$
}
define service{
    host_name               virtual
    service_description     bitly_com_ssl_expiration
    use                     generic-service
    check_command           check_ssl_expire!bitly.com
    contact_groups          email_only
    normal_check_interval   720
    retry_check_interval    10
    notification_interval   720
}
8 - DELL OpenManage Server Administrator (OMSA)

我們在兩個(gè)數(shù)據(jù)中心運(yùn)行 bitly,一個(gè)是使用 DELL 硬件 作為管理環(huán)境,另外一個(gè)是 Amazon EC2。對我們的 DELL 硬件來說,監(jiān)控我們的 OMSA 輸出很重要。給我們報(bào)警 RAID 狀態(tài),磁盤故障(預(yù)兆或是硬性故障),RAM 問題,電源供給狀態(tài)以及更多。

9 - Connection Limits

你可以使用連接限制運(yùn)行一些如 memcached 和 mysql 的程序,但是當(dāng)你擴(kuò)展你的應(yīng)用層時(shí),你監(jiān)控了多接近這些限制值的極限嗎?

與此相關(guān)的是解決問題的過程中遇到的文件描述符的限制。我們使用運(yùn)行服務(wù)器的常規(guī)做法,在我們的運(yùn)行腳本中設(shè)置 ulimit -n 65535 最小化這個(gè)問題。我們也設(shè)置 Nginx 的 worker_rlimit_nofile。

10 - Load Balancer Status

我們使用一個(gè)健康檢查配置我的負(fù)載均衡,為了是任何給定的服務(wù)器從輪詢中移除,我們可以非常簡單的強(qiáng)迫它失敗。我們已經(jīng)發(fā)現(xiàn)重要的是要有可視性的健康檢查的狀態(tài)。因此我們基于同樣的健康檢查監(jiān)控和報(bào)警(如果你使用 EC2 Load Balancers,你可以使用 Amazon API 來監(jiān)控 ELB 狀態(tài))。

其他的需要監(jiān)控的

寫進(jìn) Nginx Error Logs 的最新日志,服務(wù)的重啟(假設(shè)你在某些地方已經(jīng)有一些東西來重啟他們,但失敗了),numa stats,新進(jìn)程的 core dumps(如果你運(yùn)行任何 C 代碼)。

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

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

相關(guān)文章

  • 關(guān)于 Django 開發(fā) 11 件事

    摘要:在這里的腳本有,部署到預(yù)發(fā)布生產(chǎn)服務(wù)器,清理目錄,壓縮,備份數(shù)據(jù)庫,在本地,等等。目錄存儲(chǔ)了所有數(shù)據(jù)庫,,,,等等的配置文件。我使用做所有的排序任務(wù),從發(fā)送郵件到從拉取數(shù)據(jù)。當(dāng)我第一次開始開發(fā)和的時(shí)候,我使用,但是已經(jīng)把所有事情移植進(jìn)了。 本文原文是 11 Things I Wish I Knew About Django Development Before I Star...

    JayChen 評論0 收藏0
  • 好產(chǎn)品,只幫用戶做好一件事

    摘要:微信,我只給用戶更好的私密交友行為。所有的朋友圈,游戲比分,也只是圍繞這一件事,讓朋友間多些行為共鳴。在解決的同時(shí),去發(fā)現(xiàn)用戶更多的圍繞這件事的其它行為而已。 我想用一句話作為本章的開場產(chǎn)品道,非常道!這六個(gè)字需要我們慢慢體會(huì)。 作為一個(gè)產(chǎn)品人,在當(dāng)今這個(gè)社會(huì)可真是不好當(dāng),他需要你具備的條件是很多,這些條件中最重要的一條大家都知道,找到適合自己的一件事情,然后用心堅(jiān)持做下去,然后呢,用...

    劉永祥 評論0 收藏0
  • 好產(chǎn)品,只幫用戶做好一件事

    摘要:微信,我只給用戶更好的私密交友行為。所有的朋友圈,游戲比分,也只是圍繞這一件事,讓朋友間多些行為共鳴。在解決的同時(shí),去發(fā)現(xiàn)用戶更多的圍繞這件事的其它行為而已。 我想用一句話作為本章的開場產(chǎn)品道,非常道!這六個(gè)字需要我們慢慢體會(huì)。 作為一個(gè)產(chǎn)品人,在當(dāng)今這個(gè)社會(huì)可真是不好當(dāng),他需要你具備的條件是很多,這些條件中最重要的一條大家都知道,找到適合自己的一件事情,然后用心堅(jiān)持做下去,然后呢,用...

    cnTomato 評論0 收藏0
  • Kubernetes 落地案例|在線課程平臺(tái) Descomplica 使用 Kubernetes 5

    摘要:使用這個(gè)工具是由的幾個(gè)人創(chuàng)建的。它最厲害的地方在于,在下,使用,這對于我們來說有利無弊。在我們的這個(gè)案例中,我們添加集群層面的日志記錄,攝取應(yīng)用程序日志到,用和進(jìn)行集群監(jiān)控,基于的授權(quán)認(rèn)證,以及一些其它的事情。 在過去一年內(nèi),Descomplica 計(jì)劃往核心組件服務(wù)化的方向發(fā)展,我們一開始使用 Elastic Beanstalk 將這些服務(wù)編排到 AWS。 那時(shí)候來說,這個(gè)決定是明智...

    hzc 評論0 收藏0

發(fā)表評論

0條評論

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