Ubuntuでapcupsd + Zabbixを䜿甚しおippon Winner 3000無停電電源装眮を監芖する

この蚘事を曞くきっかけは䜕ですか 「ippon winner 3000 monitor」ずいうク゚リをむンタヌネットで怜玢したす。 むンタヌネットは通垞NUTの蚭定に関する蚘事を出したした。 このプロゞェクトは本圓に興味深いもので、倚くの機胜がありたす。 しかし、小さなものが1぀ありたす USB経由のippon winner 3000ではサポヌトされおいたせん。 COMポヌトでは、すべおがうたく機胜したす。 USB接続の蚭定を芋たしたが、実際に怜蚌せずにコピヌしお貌り付けるように思えたす。 たぶん私は間違っおいたす。 少なくずも私はこれを機胜させるために半日殺したが、無駄だった。

私は代替プロゞェクトapcupsdを芋぀けたした。すべおが小さな蚭定で箱から出されたした。 ipponの勝者3000 UPSを1台のコンピュヌタヌに接続し、そのタスクはUSB経由で監芖を担圓し、Zabbixもそのコンピュヌタヌ䞊にありたす。 Zabbixの詳现に぀いおは説明したせんが、別の蚘事に倀するものであり、1぀の蚘事に倀するものではない、ずだけ蚀いたす。 プロセスを曞くこずには意味がありたせん;そのような蚘事はたくさんありたす。 既補の蚭定を持ち蟌むだけです。 パッケヌゞ自䜓をむンストヌルしたす。
$sudo apt-get install apcupsd

デフォルトの構成ファむルずスクリプトはすべお、デフォルトで/ etc / acpupsdにありたす。ステヌタスファむルず構成ファむルの名前に特に泚意しおください。

apcupsd-ippon0.conf
UPSC USB
UPSTYPE USB
デバむス/ dev / usb / hiddev0
LOCKFILE / var / lock
SCRIPTDIR / etc / apcupsd
PWRFAILDIR / etc / apcupsd
NOLOGINDIR /など
オンバッテリヌ遅延6
バッテリヌレベル5
3分
タむムアりト0
アノむ300
アノディレむ60
NOLOGON無効
キルディレむ0
NETSERVERオン
NISIP 127.0.0.1
NISPORT 3551
EVENTSFILE /var/log/apcupsd/apcupsd-ippon0.events
EVENTSFILEMAX 10
UPSCLASSスタンドアロン
UPSMODE無効
STATTIME 60
STATFILE /var/log/apcupsd/apcupsd-ippon0.status
LOGSTATSオフ
DATATIME 0

apcupsd-ippon1.conf
UPSC USB
UPSTYPE USB
デバむス/ dev / usb / hiddev1
LOCKFILE / var / lock
SCRIPTDIR / etc / apcupsd
PWRFAILDIR / etc / apcupsd
NOLOGINDIR /など
オンバッテリヌ遅延6
バッテリヌレベル5
3分
タむムアりト0
アノむ300
アノディレむ60
NOLOGON無効
キルディレむ0
NETSERVERオン
NISIP 127.0.0.1
NISPORT 3552
EVENTSFILE /var/log/apcupsd/apcupsd-ippon1.events
EVENTSFILEMAX 10
UPSCLASSスタンドアロン
UPSMODE無効
STATTIME 60
STATFILE /var/log/apcupsd/apcupsd-ippon1.status
LOGSTATSオフ
DATATIME 0


簡単なスクリプトを䜿甚しお実行したす
apcups-start.sh
 #!/bin/bash [ -n "`pgrep apcupsd`" ] && killall apcupsd ; sleep 5 ; UPS_DAEMON="/sbin/apcupsd" for CONF_FILE in /etc/apcupsd/apcupsd*conf do $UPS_DAEMON -f $CONF_FILE echo $UPS_DAEMON -f $CONF_FILE done 


各構成ファむル「apcupsd * conf」でapcupsdデヌモンを起動したす。 / var / log / apcupsdディレクトリに移動しお、その内容を調べたす。すべおがうたくいった堎合、その内容は次のようになりたす。

apcupsd-ippon0.events
apcupsd-ippon0.status
apcupsd-ippon1.events
apcupsd-ippon1.status


名前から、むベント拡匵子を持぀ファむルがデヌモンむベント、ala start-stopなどの原因であるこずは明らかです。 私たちにずっお、ステヌタス拡匵子を持぀ファむルは非垞に興味深いものです。 その䞭の1぀に぀いお説明しながら説明したす。 今埌、zabbiの倖郚凊理はこれらのファむルから情報を取埗するず蚀いたす。

/var/log/apcupsd/apcupsd-ippon0.status
 APC001,031,0762-バヌゞョン番号、行数、バむト数
日付2016-01-19 20:25:01 +0300-UPSから情報を受信する時間
 HOSTNAMEzavdiag-DNSサヌバヌ名
バヌゞョン3.14.102011幎9月13日debian-apcupsdビルドバヌゞョン
 UPSNAMEzavdiag-apcupsd.confからの名前
ケヌブルUSBケヌブル-制埡ケヌブルのタむプ
ドラむバヌUSB UPSドラむバヌ-ドラむバヌ名
 UPSMODEスタンドアロン
 STARTTIME2016-01-19 14:40:36 +0300-デヌモンapcupsdが開始されたずき
モデルHID UPS-モデル
ステヌタスオンラむン-珟圚のステヌタスオンラむン、オンラむン、NOBATTなど、UPSから削陀
 LOADPCT12.0パヌセント負荷容量-VAに察する負荷レベル、UPSから削陀
 BCHARGE100.0パヌセント-UPSから削陀されたバッテリヌ充電の割合
 TIMELEFT62.4分-UPSから削陀された掚定バッテリヌ寿呜
 MBATTCHG5パヌセント-apcupsd.confのBATTERYLEVEL倀
 MINTIMEL3分-apcupsd.confのMINUTES倀
 MAXTIME0秒-apcupsd.confのタむムアりト倀
 OUTPUTV216.0ボルト-UPSから抜出された出力電圧
 DWAKE-01秒-負荷がオンになり、UPSから削陀されるたで、電源が回埩しおからUPSが埅機する秒数誀っお衚瀺されるず思いたす
 LOTRANS176.0ボルト-蚱容電圧の䞋限、UPSから削陀
 HITRANS264.0ボルト-蚱容電圧の䞊限、UPSから削陀
 ALARMDEL30秒-電源障害時の信号䌝達の遅延期間。UPSから削陀されたす
 LINEFREQ50.0 Hz-UPSから抜出された入力電圧呚波数
 NUMXFERS0-UPSから取埗した状態倉曎の数
 TONBATT0秒-珟圚のバッテリヌ寿呜、UPSから削陀
 CUMONBATT0秒-バッテリ寿呜の合蚈、UPSから削陀
 XOFFBATTN / A-バッテリヌからネットワヌクぞの最埌の移行時間
セルフテストいいえ-UPSセルフテストの結果OK、BT-䜎充電、BG-過負荷、NO-盎前の5分間は開始したせんでした、UPSから削陀されたす
 STATFLAG0x07000008ステヌタスフラグ-UPSから取埗したステヌタスビット文字列
 SERIALNOS42140618978-UPSシリアル番号、UPSから削陀
 NOMPOWER2700ワット-UPSから抜出された定栌電力ワットアクティブ
終了APC2016-01-19 20:25:02 +0300-ステヌタス出力の時間</ blockquote>


詳现に぀いおは、 こちらをご芧ください。
たた、 apcupsd構成の詳现を芋぀けるこずもできたす。
スクリプトファむルを線集し、メヌルアドレスを入力したす。

スクリプトの目的を簡単に説明したす。

changeme-バッテリヌの亀換が必芁なずきに呌び出されたす
commfailure-ブロックずの通信が倱われたずきに呌び出されたす
commok-ブロックずの通信が埩元されたずきに呌び出されたす
onbatter y-兵舎から電源に切り替えるずきに呌び出されたす
offbattery-バッテリヌから切り替えるずきに呌び出されたす
killpower-シャットダりン前に呌び出されたす


これでapcupsdの蚭定が完了したした。 芁するに、プロセスは次のようになりたす。デヌモンはUPSデバむスをポヌリングし、状態が倉化したずきに適切なスクリプトを呌び出し、ステヌタスファむルを生成したす。 珟圚、これらすべおをZabbixにバむンドする必芁がありたす。

私の意芋では、唯䞀の論理的な方法は、 倖郚チェックを䜿甚しおヘッドにデヌタを入力するこずです。

これを行うには、ステヌタスファむルを解析し、指定されたパラメヌタヌの倀を取埗するスクリプトを䜿甚したす。 私の堎合、゚ヌゞェントずzabbixサヌバヌの䞡方が同じコンピュヌタヌに配眮されたす。 ゚ヌゞェントはポヌト10050でサヌバヌ10051をリッスンしたす。倖郚怜蚌ファむルが眮かれおいるディレクトリを芋぀ける必芁がありたす。 これを行うには、サヌバヌ構成ファむル/etc/zabbix/zabbix_server.confで文字列ExternalScripts = / usr / lib / zabbix / externalscriptsを探したす。 このディレクトリにチェックファむルを配眮したす。 bashスクリプトであっおも、ファむル名にドットを䜿甚しないでください。 最初に、次のようなスクリプトを䜜成したした。

apcupsd-bashスクリプト
 #!/bin/bash if [[ $1 == ippon? ]] && [ -f "/var/log/apcupsd/apcupsd-$1.status" ] ; then case $2 in BCHARGE) cat /var/log/apcupsd/apcupsd-$1.status | grep 'BCHARGE' | awk '{print $3}' ;; OUTPUTV) cat /var/log/apcupsd/apcupsd-$1.status | grep 'OUTPUTV' | awk '{print $3}' ;; LOADPCT) cat /var/log/apcupsd/apcupsd-$1.status | grep 'LOADPCT' | awk '{print $3}' ;; DWAKE) cat /var/log/apcupsd/apcupsd-$1.status | grep 'DWAKE' | awk '{print $3}' ;; STATFLAG) cat /var/log/apcupsd/apcupsd-$1.status | grep 'STATFLAG' | awk '{print $3}' ;; STATUS) cat /var/log/apcupsd/apcupsd-$1.status | grep 'STATUS' | awk '{print $3}' ;; XOFFBATT) cat /var/log/apcupsd/apcupsd-$1.status | grep 'XOFFBATT' | awk '{print $3}' ;; TONBATT) cat /var/log/apcupsd/apcupsd-$1.status | grep 'TONBATT' | awk '{print $3}' ;; TIMELEFT) cat /var/log/apcupsd/apcupsd-$1.status | grep 'TIMELEFT' | awk '{print $3}' ;; esac fi 


/etc/zabbix/zabbix_agentd.dディレクトリで、内容を含むuserparameter_apcupsd.confファむルを䜜成したす

UserParameter=apcupsd[*],/usr/lib/zabbix/externalscripts/apcupsd $1 $2

゚ヌゞェントの再起動
$sudo service zabbix-server restart

ただし、オフサむトのZabbixには譊告がありたす

倖郚チェックを乱甚しないでください Zabbixシステムのパフォヌマンスが倧幅に䜎䞋する可胜性がありたす。


そしお、私は管理者であるだけでなく、おしっこでもあるので、 Cの倖郚チェックを曞き盎すこずにしたした。 そしお、誰がこのパフォヌマンスを達成したかを知っおいたす。
内容を含むapcups.cファむルを䜜成したす。
apcupsd.c
 #include <stdio.h> #include <string.h> #include <unistd.h> char ValueParam[30]; char *GetValue(char *NameVar, char *FileName) { FILE *fconfig=fopen(FileName,"r"); char fileline[255]; unsigned char FLAGDDOT=0,FLAGSPACEB=0; memset(ValueParam,0,sizeof(ValueParam)); while(!feof(fconfig)) { fgets (fileline, 255, fconfig); if(strncmp(fileline,NameVar,strlen(NameVar))==0) { for(int i=0;i<strlen(fileline);i++) { if(fileline[i]!=':' && FLAGDDOT==0) continue; if(FLAGDDOT==0) { FLAGDDOT=1; continue; } if(fileline[i]==' ' && FLAGSPACEB==0) continue; if(fileline[i]==' ' && FLAGSPACEB==1) break; if(FLAGSPACEB==0) FLAGSPACEB=1; ValueParam[strlen(ValueParam)]=fileline[i]; ValueParam[strlen(ValueParam)+1]=0; } if(strlen(ValueParam)>0) break; } } fclose(fconfig); return ValueParam; } void main(int argc, char* argv[]) { //argv[1] - hostname argv[2] - param char fname[255]; //      "ippon"    2  if((argc==3) && (strncmp(argv[1],"ippon",5)==0) ) { memset(fname,0,sizeof(fname)); strcpy(fname,"/var/log/apcupsd/apcupsd-"); strcat(fname,argv[1]); strcat(fname,".status"); //      // /var/log/apcupsd/apcupsd-ipponX.status if(access( fname, F_OK ) != -1) { puts(GetValue(argv[2],fname)); } } return; } 


次のようにコンパむルしたす。
gcc apcupsd.c -o apcupsd -std=c99
コンパむルしたファむルを/ usr / lib / zabbix / externalscriptsに配眮したす。

残っおいるのは、Zabbixのテンプレヌトをむンポヌトするこずだけです。

普遍的なこずをするずいう目暙を自分自身に蚭定するのではなく、逆に、必芁な最小化を詊みたした。
テンプレヌトに存圚したす  パラメヌタヌの説明は䞊蚘を参照 
画像
グラフの堎合、4぀のパラメヌタヌのみを䜜成したした。
画像
バッテリヌの充電、電流負荷、出力電圧、およびバッテリヌの残り寿呜。

apcupsdデヌモンのスクリプト自䜓がメヌルに通知を送信するため、トリガヌには開始する理由がありたせん。 むンタヌネットを備えた電話は垞にあなたず䞀緒です。 それだけです、あなたの質問に答えおうれしいです。

さらに数日埌、私はあなたず共有する非垞に興味深いものを芋぀けたした。 おそらくこれは、䜕日間も創造的な苊痛からあなたを救うでしょう。

apcupsdプロゞェクトに関しおは、それは本質的に狭心で、䞻にAPC UPSの䞋で研ぎ柄たされおいたす。 これを䜿甚するず、USB経由で接続したずきに、USB + COMを組み合わせたデバむスが䜿甚される可胜性が高くなりたす。 私の堎合、それは䞀本勝者3000でした。マむナスのうち、バッテリヌの電力ず枩床は衚瀺されたせん。 明らかに、これらのパラメヌタヌはAPCにはありたせん。

NUTプロゞェクトに関しおは、より普遍的であり、それを䜿甚するず、たれなUPSを拟う可胜性が高くなりたす。 USB + COMを組み合わせた接続で最も重芁なマむナスは、COMでのみサポヌトされたす

Source: https://habr.com/ru/post/J275535/


All Articles