摘要:在我們信賴一些并且我們也直接監控這些權威的服務器是的,發生過所有的權威都下線的情況因為它很少發生以至于每個人都忘記了這件事情。對我們的硬件來說,監控我們的輸出很重要。我們已經發現重要的是要有可視性的健康檢查的狀態。
注:該文作者為 ehiah,原文地址為 10 Things We Forgot to Monitor
總有一組標準的統一監控指標(Disk Usage, Memory Usage, Load, Pings 等等)。除了那個以外,我們還有從操作我們的生產系統學習到的很多經驗,幫助我們形成監控的廣度。
我喜歡的其中一條 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 的墨菲定律:如果事情可能出錯了,那意味著它已經是錯誤的但你還沒有使用 Nagios 為它報警。
下面是我在 bitly 的一個監控小清單,它來自于成長的經驗(有時是痛苦的),和那些實例后面之后的小的故事片段。
1 - Fork Rate我曾經有過這樣一個問題,故意通過在 /etc/modprobe.conf 中使用 options ipv6 disable=1 和 alias ipv6 off 來禁掉 IPv6。這給我們帶來了一個大的問題:每次一個新的 curl 對象被創建,modprobe 將大量產生,檢查 net-pf-10 來評估 IPv6 的狀態。這個 fork 轟炸了 box,然后我們終于通過觀察 /proc/stat 中的進程數量以每秒幾百的增加來追蹤到了原因。我們的正常期望是在一個穩定的網絡的生產環境中 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=2 - flow control packets--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
TL;DR; 如果你的網絡配置了優異的 flow control packets 并且沒有配置禁止它,你可以暫時的引起丟棄流量。(如果這聽起來不像一個中斷,你需要檢查你的頭。)
$ /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
注意:讀這個來弄明白如何將這些 flow control frames 級聯到 switch-wide 的 連接丟失,如果你使用了特定的 Broadcom NIC’s,你應該在你的 switch gear 趨勢你的指標。不僅于此,還要觀察你的丟幀現象。
3 - Swap In/Out Rate注:how these flow control frames can cascade to switch-wide loss of connectivity (不知道怎么翻譯,然后含義是什么,求大神解析)
通常檢查的是 swap 使用是否超過了一個閥值,但是即使你有少量的內存交換,這個實際的 swapped in/out 的速率都可能影響性能,而不是數量。這是一個更直接的檢查那個狀態的腳本:
#!/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=4 - Server Boot Notification--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
意外重啟是生活的一部分,你知道它在你的主機上是什么時候發生的嗎?大部分的人不知道,我們使用一個簡單的初始化腳本來觸發一個系統 boot 的 ops 郵件。溝通新服務的配置,和幫助捕獲狀態改變的信息即使業務正常處理故障不報警,這是非常有價值的。
#!/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` MAILADD=your@email.example mail -s " Boot of $SERVER" $MAILADD <5 - NTP Clock Offset 如果沒監控,是的,你眾多服務器中的一臺可能是關閉的。如果你從沒有考慮過時鐘延期,你可能并沒有在您的服務器上運行 ntpd。
我們使用 check_ntp_time 來檢查。
6 - DNS Resolutions內部 DNS - 它是你基礎架構中比你認識到的更加信賴的隱藏部分。這個檢查項是:
每臺服務器的本地 resolutions
如果你在你的數據中心有本地的 DNS,你需要檢查 resolution, 和 查詢的數量
檢查你使用的每個上游 DNS 解析器的可用性
外部 DNS - 通過你發布的外部的 nameservers 是能很好的校驗你的外部域名的正確解析的。在 bitly 我們信賴一些 CC TLD’s 并且我們也直接監控這些權威的服務器(是的,發生過所有的權威 nameservers 都下線的情況)
7 - SSL Expiration因為它很少發生以至于每個人都忘記了這件事情。解決方案非常簡單,僅僅需要檢查它并且報警,然后留下足夠的時間來更新你的 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)我們在兩個數據中心運行 bitly,一個是使用 DELL 硬件 作為管理環境,另外一個是 Amazon EC2。對我們的 DELL 硬件來說,監控我們的 OMSA 輸出很重要。給我們報警 RAID 狀態,磁盤故障(預兆或是硬性故障),RAM 問題,電源供給狀態以及更多。
9 - Connection Limits你可以使用連接限制運行一些如 memcached 和 mysql 的程序,但是當你擴展你的應用層時,你監控了多接近這些限制值的極限嗎?
與此相關的是解決問題的過程中遇到的文件描述符的限制。我們使用運行服務器的常規做法,在我們的運行腳本中設置 ulimit -n 65535 最小化這個問題。我們也設置 Nginx 的 worker_rlimit_nofile。
10 - Load Balancer Status我們使用一個健康檢查配置我的負載均衡,為了是任何給定的服務器從輪詢中移除,我們可以非常簡單的強迫它失敗。我們已經發現重要的是要有可視性的健康檢查的狀態。因此我們基于同樣的健康檢查監控和報警(如果你使用 EC2 Load Balancers,你可以使用 Amazon API 來監控 ELB 狀態)。
其他的需要監控的寫進 Nginx Error Logs 的最新日志,服務的重啟(假設你在某些地方已經有一些東西來重啟他們,但失敗了),numa stats,新進程的 core dumps(如果你運行任何 C 代碼)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7894.html
摘要:在這里的腳本有,部署到預發布生產服務器,清理目錄,壓縮,備份數據庫,在本地,等等。目錄存儲了所有數據庫,,,,等等的配置文件。我使用做所有的排序任務,從發送郵件到從拉取數據。當我第一次開始開發和的時候,我使用,但是已經把所有事情移植進了。 本文原文是 11 Things I Wish I Knew About Django Development Before I Star...
摘要:微信,我只給用戶更好的私密交友行為。所有的朋友圈,游戲比分,也只是圍繞這一件事,讓朋友間多些行為共鳴。在解決的同時,去發現用戶更多的圍繞這件事的其它行為而已。 我想用一句話作為本章的開場產品道,非常道!這六個字需要我們慢慢體會。 作為一個產品人,在當今這個社會可真是不好當,他需要你具備的條件是很多,這些條件中最重要的一條大家都知道,找到適合自己的一件事情,然后用心堅持做下去,然后呢,用...
摘要:微信,我只給用戶更好的私密交友行為。所有的朋友圈,游戲比分,也只是圍繞這一件事,讓朋友間多些行為共鳴。在解決的同時,去發現用戶更多的圍繞這件事的其它行為而已。 我想用一句話作為本章的開場產品道,非常道!這六個字需要我們慢慢體會。 作為一個產品人,在當今這個社會可真是不好當,他需要你具備的條件是很多,這些條件中最重要的一條大家都知道,找到適合自己的一件事情,然后用心堅持做下去,然后呢,用...
摘要:使用這個工具是由的幾個人創建的。它最厲害的地方在于,在下,使用,這對于我們來說有利無弊。在我們的這個案例中,我們添加集群層面的日志記錄,攝取應用程序日志到,用和進行集群監控,基于的授權認證,以及一些其它的事情。 在過去一年內,Descomplica 計劃往核心組件服務化的方向發展,我們一開始使用 Elastic Beanstalk 將這些服務編排到 AWS。 那時候來說,這個決定是明智...
閱讀 2144·2023-04-26 00:38
閱讀 1930·2021-09-07 10:17
閱讀 887·2021-09-02 15:41
閱讀 637·2021-08-30 09:45
閱讀 541·2019-08-29 17:25
閱讀 3204·2019-08-29 15:07
閱讀 2183·2019-08-29 12:52
閱讀 3734·2019-08-26 13:35