Zabbixからデスクトップへのサーバーのステータスを表示する

Zabbix監視システムは、AIX、Linux、* BSD、Windows、Mac OS X、ネットワーク機器、Webアプリケーション、およびSNMPまたは少なくともpingをサポートするハードウェアを実行しているサーバーに優れた監視機能を提供します。 Zabbixは無料で、GPLの下で配布されています。 システムのサーバー部分は、* nixの下にのみインストールされます。

サーバーのクラッシュ、過度のプロセッサ負荷、ディスク容量の不足などの望ましくないイベントが発生した場合に、電子メール、ジャバー、SMSへの通知の送信を設定できます。 美しいグラフィックとネットワークマップを備えたWebインターフェイスもあります。

しかし、ご存知のように、システム管理者は怠け者です。 したがって、Webインターフェイスに絶えず登らないようにするために、デスクトップにグラフィックスとネットワークマップを直接表示することをお勧めします。



便利屋テーブル



この記事では、Windows XP / 7をクライアントマシンと見なしますが、Linuxでスクリプトを少し仕上げて使用できます。







動作原理:

Zabbixは、必要なグラフィックと表示したいネットワークマップを作成します。 PHPスクリプトは、Zabbixを1分間に1回呼び出し、これらの画像を受信して​​、デスクトップから1つの画像を生成します。 図はWebサーバーに配置されます。 クライアントマシン上の別のスクリプトが定期的にこの画像をダウンロードし、壁紙として設定します。



ステップ0。Zabbixをインストールして設定します。

この質問はすでにドキュメントにまとめられているので、ここでは説明しません。

この記事ではバージョン1.8.2を使用しています。 以前のバージョンでは異なるイメージアドレスが使用されるため、Zabbix 1.4または1.6を使用している場合は、スクリプトを調整する必要があります。



手順1. Zabbixで必要なグラフィックスとネットワークマップを作成します。

この手順でも問題は発生しません。

グラフは、マップ- 構成-ホストページ、ネットワークマップで作成できます。



ステップ2.デスクトップの背景画像を生成するスクリプトを作成します。

PHP、画像を受信するためのcURL拡張、gdライブラリ、および画像を操作するためのImageMagickを使用します。

まず、Zabbixでユーザーを作成する必要があります。このユーザーの下で、スクリプトがシステムにログインします。

また、このスクリプトは、 サボテンからルーターのWANインターフェイスを読み込むスケジュールと、サーバールームのWebカメラから画像を受け取ります。 サボテンのグラフは、Zabbixのグラフよりも視覚的に見えます。

スクリプトの結果はBMPファイルになります。



このスクリプトは普遍的ではありませんが、ニーズに合わせて簡単に再作成できます。 ファイルの先頭の定数値をシステムの設定に変更してください。



<?php <br/>

<br/>

// , ! <br/>

<br/>

//1. <br/>

define ( 'TMP_PATH' , '/usr/local/share/zabbix/php/tmp/' ) ; <br/>

//2. URL - Zabbix <br/>

define ( 'ZABBIX_URL' , 'http://monitoring.local/' ) ; <br/>

//3. Zabbix <br/>

define ( 'ZABBIX_USER' , 'mon' ) ; <br/>

//4. Zabbix <br/>

define ( 'ZABBIX_PW' , 'qwerty' ) ; <br/>

//5. Cacti <br/>

define ( 'CACTI_URL' , 'http://monitoring.local/cacti/' ) ; <br/>

//6. Cacti <br/>

define ( 'CACTI_USER' , 'admin' ) ; <br/>

//7. Cacti <br/>

define ( 'CACTI_PW' , 'qwerty' ) ; <br/>

//8. <br/>

define ( 'WALLPAPER_WIDTH' , 1280 ) ; <br/>

//9. <br/>

define ( 'WALLPAPER_HEIGHT' , 1024 ) ; <br/>

//10. , . <br/>

// . <br/>

$resources = array ( ) ; <br/>

// <br/>

$resources [ ] = array ( 'url' => 'http://monitoring.local/map.php?noedit=1&sysmapid=2' , 'x' => 280 , 'y' => 0 ) ; <br/>

// <br/>

$resources [ ] = array ( 'url' => 'http://monitoring.local/chart2.php?graphid=494&width=1138&period=86400' , 'x' => 26 , 'y' => 400 ) ; <br/>

//- <br/>

$resources [ ] = array ( 'url' => 'http://192.168.4.18/axis-cgi/jpg/image.cgi?resolution=320x240' , 'x' => 960 , 'y' => 690 ) ; <br/>

// cacti <br/>

$resources [ ] = array ( 'url' => 'http://monitoring.local/cacti/graph_image.php?local_graph_id=5&rra_id=0&view_type=tree&graph_start=' . ( time ( ) - 86400 ) . '&graph_end=' . time ( ) , 'x' => 357 , 'y' => 690 ) ; <br/>

<br/>

// <br/>

// , , . <br/>

<br/>

$error = false ; <br/>

<br/>

//"" Zabbix <br/>

$ch = curl_init ( ) ; <br/>

curl_setopt ( $ch , CURLOPT_URL , ZABBIX_URL . '/index.php' ) ; <br/>

curl_setopt ( $ch , CURLOPT_POST , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_POSTFIELDS , array ( 'form' => '1' , 'form_refresh' => '1' , 'name' => ZABBIX_USER , 'password' => ZABBIX_PW , 'enter' => 'Enter' ) ) ; <br/>

curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_COOKIEJAR , "./cookie.txt" ) ; // <br/>

curl_setopt ( $ch , CURLOPT_COOKIEFILE , "./cookie.txt" ) ; <br/>

<br/>

$t = curl_exec ( $ch ) ; <br/>

curl_close ( $ch ) ; <br/>

<br/>

<br/>

//"" cacti. , cacti <br/>

$ch = curl_init ( ) ; <br/>

curl_setopt ( $ch , CURLOPT_URL , CACTI_URL . '/graph_image.php' ) ; <br/>

curl_setopt ( $ch , CURLOPT_POST , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_POSTFIELDS , array ( 'action' => 'login' , 'login_username' => CACTI_USER , 'login_password' => CACTI_PW ) ) ; <br/>

curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_COOKIEJAR , "./cookie.txt" ) ; <br/>

curl_setopt ( $ch , CURLOPT_COOKIEFILE , "./cookie.txt" ) ; <br/>

<br/>

$t = curl_exec ( $ch ) ; <br/>

curl_close ( $ch ) ; <br/>

<br/>

// <br/>

foreach ( $resources as $k => $res ) <br/>

{ <br/>

$ch = curl_init ( ) ; <br/>

curl_setopt ( $ch , CURLOPT_URL , $res [ 'url' ] ) ; <br/>

curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ) ; <br/>

curl_setopt ( $ch , CURLOPT_COOKIEJAR , "./cookie.txt" ) ; <br/>

curl_setopt ( $ch , CURLOPT_COOKIEFILE , "./cookie.txt" ) ; <br/>

<br/>

$file = curl_exec ( $ch ) ; <br/>

if ( $file ) file_put_contents ( TMP_PATH . 'temp_img' . $k . '.tmp' , $file ) ; <br/>

else $error = true ; <br/>

curl_close ( $ch ) ; <br/>

} <br/>

<br/>

// "" <br/>

$wp = imagecreatetruecolor ( WALLPAPER_WIDTH , WALLPAPER_HEIGHT ) ; <br/>

<br/>

if ( ! $error ) <br/>

{ <br/>

// <br/>

<br/>

// <br/>

$bg = imagecolorallocate ( $wp , 58 , 110 , 165 ) ; <br/>

imagefill ( $wp , 0 , 0 , $bg ) ; <br/>

<br/>

// <br/>

$images = array ( ) ; <br/>

foreach ( $resources as $k => $res ) <br/>

{ <br/>

$im = imagecreatefromfile ( TMP_PATH . 'temp_img' . $k . '.tmp' ) ; <br/>

if ( ! $im ) <br/>

{ <br/>

$error = true ; <br/>

break ; <br/>

} <br/>

imagecopy ( $wp , $im , $res [ 'x' ] , $res [ 'y' ] , 0 , 0 , imagesx ( $im ) , imagesy ( $im ) ) ; <br/>

imagedestroy ( $im ) ; <br/>

} <br/>

imagepng ( $wp , TMP_PATH . 'temp_fin.png' ) ; <br/>

} <br/>

<br/>

if ( $error ) <br/>

{ <br/>

// , <br/>

$bg = imagecolorallocate ( $wp , 192 , 192 , 192 ) ; <br/>

imagefill ( $wp , 0 , 0 , $bg ) ; <br/>

} <br/>

<br/>

// PNG BMP ImageMagick <br/>

$imgk = new Imagick ( TMP_PATH . 'temp_fin.png' ) ; <br/>

$imgk -> pingImage ( TMP_PATH . 'temp_fin.png' ) ; <br/>

$imgk -> readImage ( TMP_PATH . 'temp_fin.png' ) ; <br/>

$imgk -> setImageCompression ( imagick :: COMPRESSION_NO ) ; <br/>

$imgk -> setImageFormat ( "bmp" ) ; <br/>

$imgk -> writeImage ( TMP_PATH . 'wp.bmp' ) ; <br/>

<br/>

<br/>

// php.net <br/>

function imagecreatefromfile ( $path ) <br/>

{ <br/>

$info = @ getimagesize ( $path ) ; <br/>

if ( ! $info ) return false ; <br/>

<br/>

$functions = array ( <br/>

IMAGETYPE_GIF => 'imagecreatefromgif' , <br/>

IMAGETYPE_JPEG => 'imagecreatefromjpeg' , <br/>

IMAGETYPE_PNG => 'imagecreatefrompng' , <br/>

IMAGETYPE_WBMP => 'imagecreatefromwbmp' , <br/>

IMAGETYPE_XBM => 'imagecreatefromwxbm' , <br/>

) ; <br/>

<br/>

if ( ! $functions [ $info [ 2 ] ] ) return false ; <br/>

<br/>

if ( ! function_exists ( $functions [ $info [ 2 ] ] ) ) return false ; <br/>

<br/>

return $functions [ $info [ 2 ] ] ( $path ) ; <br/>

} <br/>

?>








手順3.スクリプトをクラウンに追加する

サイトで公開されていないディレクトリにスクリプトを保存することをお勧めします。 それ以外の場合は、ブラウザからスクリプトを起動して、Cookieファイルをドラッグして削除できます。

クラウンにスクリプトを追加します。

# echo "*/1 * * * * root /usr/local/bin/php /usr/local/share/zabbix/get_image.php > /dev/null 2>&1" >> /etc/crontab





デフォルトでは、Zabbixは30秒ごとにデータを更新するため、1分ごとに写真を更新できます。



手順4.クライアントマシンに自動壁紙変更用のスクリプトをインストールします。

VBSスクリプトを作成します。

Windows XPの場合

Dim res<br/>

Set oXMLHTTP = CreateObject( "MSXML2.XMLHTTP" ) <br/>

oXMLHTTP. Open "GET" , "http://monitoring.local/tmp/wp.bmp" , 0 ' <br/>

oXMLHTTP.Send<br/>

On Error Goto 0 <br/>

<br/>

Set oADOStream = CreateObject( "ADODB.Stream" ) <br/>

oADOStream.Mode = 3 <br/>

oADOStream. Type = 1 <br/>

oADOStream. Open <br/>

oADOStream.Write oXMLHTTP.responseBody <br/>

oADOStream.SaveToFile "C:\\wp.bmp" , 2 ' <br/>

Set oXMLHTTP = Nothing <br/>

Set oADOStream = Nothing <br/>

<br/>

<br/>

Dim WshShell<br/>

Set WshShell = WScript.CreateObject( "Wscript.Shell" )<br/>

WshShell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper" , "" "C:\\wp.bmp" "" <br/>

WshShell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters" , 1, True <br/>

<br/>

Set WshShell = Nothing








Windows Vista / Windows 7

ここでは、状況はより複雑です。 壁紙を変更するには、WinAPI関数を呼び出す必要があります。 VBScriptではこれを実行できないため、C ++で小さなプログラムを作成する必要があります。

ここからアイデアが取られます

記事の最後に、コンパイル済みのexe-shnikへのリンクがありますが、念のため、ソースコードを引用します。

#include <windows.h> <br/>

#include <stdio.h> <br/>

#include <iostream> <br/>

int main ( int argc, char ** argv ) <br/>

{ <br/>

if ( argc == 0 ) return 1 ; <br/>

SystemParametersInfo ( SPI_SETDESKWALLPAPER, 0 , ( PVOID ) argv [ 1 ] , SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ) ; <br/>

return 0 ; <br/>

} <br/>







ここで、Windows XPのVBSスクリプトの行を置き換える必要があります

WshShell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, True







WshShell.Run "C:\wallpaper.exe C:\wp.bmp", 1, True







手順5. VBSスクリプトをタスクスケジューラに追加する

1分に1回スクリプトを実行する必要があります。



できた!



プロジェクトファイル-zabbix_wallpaper.zip



All Articles