青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xiaoguozi's Blog
Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預(yù)料,人們需要更細心的觀察別人,要隨時注意才能保護別人,因為他們未必知道自己要什么·····

前言: Nagios是相當(dāng)不錯的監(jiān)控工具,被稱作是“監(jiān)控之神”,但同樣也有“難搞死”頭銜。發(fā)揮Nagios一切魅力的都是他的插件,正因為豐富多樣的插件讓 nagios有血有肉。監(jiān)控的內(nèi)容不斷在變化,插件也不斷變化,默認的一些插件可能越來越不能滿足需求,這個時候就要自己來寫些插件了。

以下就是用我的第一個Nagios插件來說明編寫方法和我遇到一些問題調(diào)試方法。如果你有耐心可以通篇看完,應(yīng)該對第一次寫的人來說會有很大幫助(如果你看不懂,可能是我寫得不清楚 那就沒辦法了 表達能力有限)

需求:

監(jiān)控普通磁盤的健康狀況(普通磁盤以外還有RAID、陣列的監(jiān)控是不同方法來做的,這里先不討論,先從最簡單的入手),定期進行檢測,并進行報警,報警內(nèi)容磁盤是否正常,不正常是什么狀態(tài)。

分析編寫過程:

我寫腳本的前提都是先從手動成功完成,再到自動化(我想其它人的思路應(yīng)該都一樣的)

1、找到監(jiān)控磁盤的方法

通過一番查找 smartctl 這個命令是比較不錯的  centos slackware一般的默認都有這個

smartctl -H /dev/sda  只檢測狀態(tài)

smartctl -i /dev/sda   只檢測硬盤信息

smartctl -a /dev/sda 檢測所有信息

2、獲取檢測信息

# smartctl -H /dev/sda

smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

SMART Health Status: OK

關(guān)鍵的最后一行說明磁盤的情況       截取  DISK_HEALTH=`smartctl -H /dev/sda | tail -1 | cut -d: -f2-  `

3、 進行關(guān)鍵判斷

據(jù)我所知道的 smartctl 5.38  是出以上的結(jié)果 為OK

而 smartctl 5.39 是出以下結(jié)果

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED

關(guān)鍵詞是PASSED

所以要分析判斷多種情況

4、腳本編寫步驟

1)了解nagios插件編寫規(guī)范

Nagios的插件可以用腳本(shell、Perl)C編譯后的可執(zhí)行程序,但必須滿足以下兩件事:

A、既出時有一個返回值

B、至少向標(biāo)準(zhǔn)輸出設(shè)備(STDOUT)輸出一行文件。(但也不能太大,默認是4K,如果想大些,修改源程序吧,方法搜。)

返回值定義:

Plugin Return Code Service State DISK State
0 OK OK 或者PASSED
1 WARNING 插件警告  DISK報警只分OK或者CRITICAL
2 CRITICAL  DISK檢測非OK 或者PASSED
3 UNKNOWN  未知狀態(tài)

2)插件編寫SHELL速成法

在這里我選用我最熟悉的SHELL進行腳本編寫 ,

我的速成法就是,直接去nagios exchange 去下比較成熟的比較簡單的shell腳本,這樣會從一開始借鑒別人好的方法,養(yǎng)成好的習(xí)慣,而且只要你有一點SHELL編程經(jīng)驗也可以很快寫得像一個老手。(不過不要把自己搞暈了就行)

3)以下是我的check_disk_health.sh

#!/bin/bash
# ========================================================================================
# disk health  plugin for Nagios
#
# Written by    : Ajian
# Release       : 1.2.0
# Creation date : 2009-07-28
# Revision date : 2009-07-30
# Description   : Nagios plugin (script) to check disk health .
#               This script has been designed and written on Linux System.
#
# USAGE         : ./check_disk_health.sh [-d (disk)]
#
# Exemple: ./check_cpu_stats.sh
#          ./check_cpu_stats.sh -d /dev/sda
#
#
# HISTORY :
#     Release   |     Date      |    Authors            |       Description
# --------------+---------------+----------------------+-----------------------------------
#  1.0.0        | 2009-07-28     | Ajian                | Create the script
#  1.2.0        | 2009-07-30    |  Ajian                | modify the script and run well ,fix a bug.
# -----------------------------------------------------------------------------------------
# NOTICE:
#-----------------------------------------------------------------------------------------
#     You should have the root Permissions ,You can use sudo to realize .
# -----------------------------------------------------------------------------------------                                  
 
# Nagios return codes
#定義 nagios返回的狀態(tài)變量
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3     
 
# Paths to commands used in this script.  These may have to be modified to match your system setup.
# 定義關(guān)鍵的核心命令smartctl 路徑 如果你的系統(tǒng)不是這個地址,請更改。 以下注釋的是調(diào)試的信息,是自動獲取命令路徑的方法。
SMARTCTL="/usr/sbin/smartctl"
#SMARTCTL=`which smartctl`
#if [ $? -ne 0 ]; then
#        echo " smartctl is found in $SMARTCTL ; Go on ... "
#        echo "smartctl the command cannot find"
#        exit $STATE_UNKNOWN
#fi
# Plugin parameters value if not define
# 定義默認的檢測硬盤
CHECK_DISK="/dev/sda"                 
 
# Plugin variable description
# 插件描述信息
PROGNAME=$(basename $0)
RELEASE="Revision 1.2.0"
AUTHOR="(c) 2009 Ajian ()"
 
# Functions plugin usage
# 插件的使用方法函數(shù)
print_release() {
    echo "$RELEASE $AUTHOR"
}                         
 
print_usage() {
        echo ""
        echo "$PROGNAME $RELEASE - Disk health check script for Nagios"
        echo ""
        echo "Usage: check_disk_health.sh -d /dev/sdb"
        echo ""
        echo "  -d  the disk (/dev/sda) "
        echo "          not the Hard disk partition(sda2 is wrong)"
        echo "  -v  check the version"
        echo "  -h  Show this page"
        echo ""
    echo "Usage: $PROGNAME"
    echo "Usage: $PROGNAME --help"
    echo ""
    exit 0
}                                                                                                         
 
print_help() {
        print_usage
        echo ""
        echo "This plugin will check disk health  "
        echo ""
        exit 0
}                                                 
 
# Parse parameters
# 傳遞參數(shù)
while [ $# -gt 0 ]; do
    case "$1" in
        -h | --help)
            print_help
            exit $STATE_OK
            ;;
        -v | --version)
                print_release
                exit $STATE_OK
                ;;
        -d | --disk)
                shift
                CHECK_DISK=$1
                #判斷磁盤是否存在
                if [ ! -b $CHECK_DISK ];then
                        echo "$CHECK_DISK is no exsit,Please change it "
                        exit $STATE_CRITICAL
                fi
                ;;
        *)  echo "Unknown argument: $1"
            print_usage
            exit $STATE_UNKNOWN
            ;;
        esac
shift
done
 
#根據(jù)不同的操作進行不同的操作,這里暫時只支持Linux
case `uname` in
        Linux )
             #最核心的部分 前面都是些腳本的基本功能 一個框架 因為第一個腳本牽扯到了很多東西,雖然功能很簡單,
             #但折騰了我不少,在后面的分析中會具體說到 總之注意sudo用法 腳本一開始就有說哦
                DISK_HEALTH=`$SMARTCTL  -H $CHECK_DISK | tail -1 | cut -d: -f2- `
                #DISK_HEALTH="OK"
        #       DISK_INFO=`/usr/bin/sudo $SMARTCTL -i $CHECK_DISK | grep "Device:"`
                if [ "$DISK_HEALTH" = " OK" ]|| [  "$DISK_HEALTH" = " PASSED" ];then
                        echo "OK - $CHECK_DISK status is $DISK_HEALTH "
                        #echo "OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                        exit $STATE_OK
                else
                        echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH "
                        #echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                        exit $STATE_CRITICAL
        fi
            ;;
 
        *)              echo "UNKNOWN: `uname` not yet supported by this plugin. Coming soon !"
                        exit $STATE_UNKNOWN
            ;;
        esac4)運行腳本

(注意:在最開始自己寫的腳本是沒有sudo的,以上腳本是已經(jīng)調(diào)試過后的,還需要配置一些其它的東西,慢慢看吧)
給與腳本執(zhí)行權(quán)限,手動執(zhí)行

# ./check_disk_health.sh
OK – /dev/sda status is  OK

結(jié)果正確了,其實這個時候,高興得太早了。 我先不說問題、繼續(xù)正常的一般流程。

5、配置Nagios 調(diào)用插件

1)在遠程NRPE 被監(jiān)控服務(wù)器上修改nrpe.conf
# vim /usr/local/nagios/etc/nrpe.cfg
添加 command[check_sda_health]=/usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda
(注意這里了,先提醒下,這里是錯誤的,一般是正確的,是這個腳本的特殊性造成的)

2)在Nagios 監(jiān)控服務(wù)器上添加一些配置

定義服務(wù)

define service{
use                             Disk-Health
host_name                       DB-56
servicegroups                   Disk-Health
service_description            check sda disk health
contact_groups                  admins
check_command               check_nrpe!check_sda_health
}
如果像上面定義一個服務(wù) 那么就要注意相關(guān)的定義了 ,
定義Disk-Health 模版  把硬盤檢測定義一個模版會比較好控制,因為硬盤的檢測不像其它服務(wù)一樣需要準(zhǔn)確的及時性反正檢測得太多可能會造成壓力,一般一天檢測幾次就夠了。
定義DB-56 主機需要定義
定義組 admins
以上這些只要安裝過nagios 一般都知道的了 只是強調(diào)下模版的單獨定義

3)通過WEB控制檢測 查看結(jié)果

結(jié)果是失敗 報警CRITCTL 但是狀態(tài)里面的信息都是空的  CRITCTL – /dev/sda status is

6、調(diào)試

從Nagios的遠程監(jiān)控來看是失敗的,并且沒有獲取到任務(wù)有用的信息。

分析可以看到,說明nrpe調(diào)用  這個變量獲取到的是為空的信息
DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
即是空的 只有一個原因,肯定是沒有執(zhí)行 如果執(zhí)行了 肯定會有字段 不管這個字段是否相符。
但是手動執(zhí)行是沒有問題。
經(jīng)過對smartctl的查看 原來這個命令是只允許root進行調(diào)用的。
現(xiàn)在需要解決的問題是:非root 用戶 如何遠程調(diào)用含有需要有root權(quán)限命令的腳本進行監(jiān)控。
(不要小看這一句話,每一個詞都是一個需要攻克的地方)
以下是調(diào)試步驟:
1)非root用戶
NRPE插件是用nagios這個用戶來執(zhí)行的 所以要得到真實的情況需要
A: su nagios   再執(zhí)行腳本 (這個方法比較好)
B: sudo -u nagios ./check_disk_health.sh
結(jié)果:

sudo -u nagios ./check_disk_health.sh
CRITICAL – /dev/sda status is
跟遠程的結(jié)果是一樣的了 沒有信息
2)需要有root權(quán)限
需要root權(quán)限只有一個辦法就是用sudo
將DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
改為DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
(最后發(fā)現(xiàn)這時加sudo 并不是關(guān)鍵 關(guān)鍵是很行腳本時用sudo )
結(jié)果:sudo -u nagios ./check_disk_health.sh
Password:
需要輸入密碼  sudo不用輸入密碼的方法
修改sudo配置文件
執(zhí)行 visudo
添加
nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
建議:最好進行sudo的一些控制,很多網(wǎng)方法就是nagios ALL=NOPASSWD:ALL
結(jié)果:
su nagios
/usr/bin/sudo check_disk_health.sh
OK – /dev/sda status is OK
那么在nrpe.conf配置文件中需要添加sudo
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh
最開始那個是錯誤的 注意啊 這個是需要添加/usr/bin/sudo 就是說只要腳本中涉及到提升到root權(quán)限的命令那么就要用這個
3)遠程調(diào)用
遠程調(diào)用方法:./check_nrpe -H 192.168.0.56 -c check_sda_health
同上如果想模擬真實環(huán)境請切換到相應(yīng)的執(zhí)行用戶 su nagios 再執(zhí)行以上操作
結(jié)果:   NRPE: Unable to read output
這個錯誤的原因一定要明白,之所以報這個錯意思是說NRPE沒有獲取到任何信息,也說是寫腳本之前說的其中第二條規(guī)范
問題:在沒有任何信息的情況下怎么來獲取NRPE執(zhí)行的日志呢
就是要確定問題在哪,經(jīng)過一大番的查找眼睛偶爾看到一個有趣的小方法
修復(fù)nrpe.conf配置文件 在要檢查的命令后面添加>>/tmp/output 2>&1 將錯誤導(dǎo)出到文件中進行查看
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda >>/tmp/output 2>&1
重記nrpe服務(wù)
遠程調(diào)用 結(jié)果當(dāng)然還是NRPE: Unable to read output
查看/tmp/output
sudo: sorry, you must have a tty to run sudo
有錯誤就簡單了  原來這個是默認不允許sudo 在后端進行
visudo
注釋Defaults requiretty 就OK了
結(jié)果通過WEB查看也正確了。
(注意:注釋后 檢測仍然會是Unable 不過看/tmp/output就會有正確的結(jié)果,所以有正確的結(jié)果后,一定要去掉 >>/tmp/outpt 2>&1 信息都導(dǎo)到文件中了 nagios還是得不到任何消息。)

一個腳本執(zhí)行成功后,就是大批量應(yīng)用,用生產(chǎn)環(huán)境驗證,出現(xiàn)問題繼續(xù)調(diào)試。

以上為所有的分析調(diào)試方法。如果你看到最后一步了,說明你很有耐心,你也一定會成功的,至于寫得好與壞、對與錯請盡管說,這不會影響你的成功。呵呵。
轉(zhuǎn)自:
http://blog.chinaunix.net/uid-20592013-id-2436813.html
posted on 2013-09-03 09:39 小果子 閱讀(1422) 評論(0)  編輯 收藏 引用 所屬分類: 學(xué)習(xí)筆記Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩播放| 中国亚洲黄色| 久久久无码精品亚洲日韩按摩| 欧美久久综合| 亚洲视屏一区| 久久中文字幕一区| 日韩亚洲一区在线播放| 久久久欧美一区二区| 99国产精品国产精品久久| 欧美中在线观看| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产日韩精品一区二区三区在线| 久久久视频精品| 中文精品视频| 欧美一区综合| 一本大道久久a久久精二百| 麻豆精品91| 欧美激情一区在线| 欧美大片一区二区| 欧美一区成人| 日韩小视频在线观看专区| 国产精品一区二区三区久久久| 欧美mv日韩mv国产网站| 久久精品av麻豆的观看方式| 亚洲一二区在线| 91久久中文字幕| 亚洲国产你懂的| 国产日韩欧美中文| 国产精品r级在线| 欧美午夜电影完整版| 欧美理论片在线观看| 欧美有码在线观看视频| 亚洲午夜久久久久久久久电影网| 亚洲黄色一区| 亚洲福利免费| 影音先锋亚洲精品| 好吊色欧美一区二区三区视频| 国产一区二区三区免费观看| 美女精品在线观看| 久久精品亚洲一区| 亚洲欧美日韩在线播放| 日韩视频在线免费观看| 一二三区精品福利视频| 亚洲一区二区三区四区视频| 99精品免费| 亚洲神马久久| 亚洲欧美日韩精品久久| 午夜伦理片一区| 国产日本欧美一区二区三区| 国产精品多人| 你懂的视频欧美| 欧美成人有码| 一本色道久久加勒比精品 | 香蕉久久夜色精品国产| 麻豆精品传媒视频| 欧美日韩国内| 欧美日韩高清不卡| 国产精品久久久一本精品| 国产欧美精品一区二区色综合| 久久久亚洲午夜电影| 蜜臀av在线播放一区二区三区| 美乳少妇欧美精品| 国产精品久久77777| 国产一区二区成人久久免费影院| 亚洲福利视频一区| 中国av一区| 国产一区二区三区成人欧美日韩在线观看| 国产亚洲人成网站在线观看| 亚洲激情视频网| 欧美激情在线播放| 免费久久精品视频| 欧美日本一区二区视频在线观看| 欧美理论电影在线观看| 国产日韩欧美亚洲| 亚洲九九九在线观看| 国产在线精品二区| 亚洲精品视频在线看| 羞羞色国产精品| 欧美成人午夜影院| 亚洲一区二区成人| 欧美片在线观看| 99热这里只有成人精品国产| 久久久久久久一区二区三区| 欧美日韩一本到| 在线精品国精品国产尤物884a| 亚洲片区在线| 久久久www免费人成黑人精品| 亚洲国产精品va在看黑人| 亚洲欧美日本日韩| 欧美四级在线| 亚洲人成网站在线播| 久久久久天天天天| 亚洲视频在线二区| 欧美精品一区二区久久婷婷| 精品成人一区二区| 欧美一区二区三区四区视频| 亚洲国内高清视频| 毛片基地黄久久久久久天堂| 国产一区二区久久久| 亚洲免费小视频| 欧美一区二区在线观看| 亚洲黄色视屏| 免费日韩av电影| 亚洲高清在线播放| 久久夜色精品亚洲噜噜国产mv| 免费成人美女女| 亚洲日本aⅴ片在线观看香蕉| 久久精品在线观看| 久久精品国产免费| 国产精品影片在线观看| 午夜精品久久久久久久白皮肤| 久久久www成人免费无遮挡大片| 亚洲精品一级| 午夜影视日本亚洲欧洲精品| 亚洲乱码精品一二三四区日韩在线| 亚洲视频每日更新| 亚洲国产日韩在线一区模特| 亚洲影院免费观看| 亚洲狼人综合| 久久久久久成人| 香蕉乱码成人久久天堂爱免费| 免费在线观看日韩欧美| 久久精品国产一区二区三区免费看| 欧美成人高清| 女人香蕉久久**毛片精品| 国产精品一区二区三区久久| 亚洲欧洲另类国产综合| 在线看不卡av| 久久不射电影网| 宅男66日本亚洲欧美视频| 欧美18av| 国产欧美精品| 亚洲午夜精品久久| 99这里有精品| 欧美二区在线| 欧美大片免费| 黑人极品videos精品欧美裸| 亚洲欧美一区二区原创| 午夜精品剧场| 亚洲高清在线视频| 在线观看一区二区视频| 久久xxxx精品视频| 久久久精品国产一区二区三区 | 久久在线观看视频| 男女av一区三区二区色多| 国产婷婷色一区二区三区四区 | 美腿丝袜亚洲色图| 国内久久婷婷综合| 久久av一区二区| 久久久青草青青国产亚洲免观| 国产精品免费在线| 亚洲女爱视频在线| 欧美一级一区| 国产日韩欧美精品综合| 欧美一区三区三区高中清蜜桃| 久久精品女人天堂| 精品成人一区二区三区| 久久综合久久综合这里只有精品| 久久资源av| 亚洲国产高清一区| 免费影视亚洲| 一本色道久久| 欧美一区中文字幕| 激情校园亚洲| 每日更新成人在线视频| 亚洲精品一区二区三区av| 一区二区三区产品免费精品久久75 | 亚洲免费电影在线| 亚洲综合日韩在线| 国产一区二区久久久| 久久夜色精品国产| 9色国产精品| 久久成人综合视频| 亚洲激情在线视频| 国产精品日韩在线播放| 久久频这里精品99香蕉| 最新日韩在线| 久久狠狠亚洲综合| 亚洲精品色婷婷福利天堂| 国产精品一区免费视频| 麻豆视频一区二区| 亚洲欧美日韩天堂| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲欧美日韩在线观看a三区| 国产精品亚洲激情| 久久中文精品| 一区二区精品在线| 欧美jjzz| 欧美一区二区网站| 久久在线免费观看| 亚洲图片你懂的| 欧美韩国一区| 午夜免费在线观看精品视频| 在线欧美日韩| 国产精品亚洲аv天堂网| 农村妇女精品| 欧美在线一级视频| 亚洲一区二区三区视频播放| 欧美成人亚洲成人| 久久精品五月婷婷|