各稼働日の朝は、各サーバーの操作性のテストから始まりますが、これには多くの時間がかかります。
DSSLにはSDK があります 。 詳細な説明はこちらから入手できます 。
数晩過ごして、PHPでクラスを作成しました。これにより、WebサーバーはTrassirサーバーのステータスを確認し、ページに表示することができます。 Webを介してTrassirサーバーにアクセスするには、それらを構成する必要があります。 最初に、サーバー設定で「ブラウザーからTrassirへのアクセスを許可する」を有効にし、次に「Trassir SDK」を有効にします(そしてSDKパスワードを設定します)。 さらに、スクリプトを承認する権限が切り捨てられたユーザー(私の場合、監視ユーザー、パスワード123、SDKパスワード12345)を作成することをお勧めします。
一般に、SDKには大きなチャンスがあります。上記のリンクをご覧ください。
クラスコード自体:
<?php class TrassirServer { /* 1. . $serv = new TrassirServer('10.18.242.33', 'Monitoring', '123', '12345'); 2. ! $serv->check_connection(); 3. $serv->get_sid(); 4. $objects = $serv->get_objects(); SDK 5. $serv->get_health(); 3 (get_sid()) */ public $status = array(); //public $objects = array(); private $ip_address, $user, $sid, $sdk_sid; public function __construct($ip_address, $user, $password, $sdk_password) { //. $this->ip_address = $ip_address; $this->status['ip_address']= NULL; $this->user = $user; $this->password = $password; $this->sdk_password = $sdk_password; } public function check_connection (){ // . $url = 'http://'.trim($this->ip_address).':80/'; $curlInit = curl_init($url); curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,2); // - curl_setopt($curlInit,CURLOPT_HEADER,true); curl_setopt($curlInit,CURLOPT_NOBODY,true); curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true); $response = curl_exec($curlInit); curl_close($curlInit); if ($response){ $this->status['online'] = true; } else { $this->status['online'] = false; } return $this->status['online']; } /* { "success" : "0", "error_code" : "invalid username or password" } /* Username and Password should match to one of the server users. */ public function get_sid(){ // if ($this->status['online']){ $url = 'https://' . trim($this->ip_address) . ':8080/login?username=' . $this->user . '&password='.$this->password; // $responseJson_str = file_get_contents ($url); $server_auth = json_decode ($responseJson_str, true); // JSON if($server_auth['success']==1){ $this->status['sid'] = $server_auth['sid']; // sid } else{ $this->status['sid'] = false; } } return $this->status['sid']; } public function get_objects(){// if ($this->status['online']){ $url = 'https://' . trim($this->ip_address) . ':8080/objects/?password='.$this->sdk_password; $responseJson_str = file_get_contents ($url); // $comment_position = strripos ($responseJson_str, '/*'); // $responseJson_str = substr ($responseJson_str, 0, $comment_position); $objects = json_decode ($responseJson_str, true); return $objects; } return false; } /* { "disks": "1", "database": "1", "channels_total": "10", "channels_online": "5", "uptime": "12902", "cpu_load": "22.50", "network": "1", "automation": "1", "disks_stat_main_days": "56.15", "disks_stat_priv_days": "35.03", "disks_stat_subs_days": "40.20" } */ public function get_health() { if ($this->status['online'] && $this->status['sid']){ $url = 'https://' . trim($this->ip_address) . ':8080/health?sid='.$this->status['sid']; $responseJson_str = file_get_contents ($url); // $comment_position = strripos ($responseJson_str, '/*'); // $responseJson_str = substr ($responseJson_str, 0, $comment_position); $server_health = json_decode ($responseJson_str, true); // JSON } return $server_health; } } ?>
使用例は、3つのファイル、index.php、view.css(スタイルシートはオプションですが、それなしではすべてが悲しい)、list_of_servers.txt(検証のためにすべてのサーバーのIPアドレスをそれぞれ新しい行から表示するテキストファイル)が存在することを意味します。
view.css:
.error{ background-color: cc3f5b; #border: 1px dotted red; #width: 99%; padding-left: 5px; } .trassir_server{ #border-bottom: 1px solid black; width: 250px; height: 240px; background-color: #4682B4; color: white; margin-top: 15px; margin-left: 5px; display: inline-block; vertical-align: top; } .OK{ background-color: #4169E0; border-bottom: 1px solid black; padding-left: 5px; } .trassir_server_name{ font-size: 20px; text-align: center; height: 30px; } body{ background-color: #DCDCDC; }
index.php
<?php header('Content-Type: text/html; charset=utf-8'); ini_set('max_execution_time', 60); error_reporting(E_ALL); require ('classes/TrassirServer.php'); ?> <html> <head> <link rel='stylesheet' href='./css/view.css'> </head> <body> <?php $user = 'Monitoring'; $password = '123'; $sdk_password = '12345'; function trassir_server_monitor($ip, $user, $password, $sdk_password){ $serv = new TrassirServer($ip, $user, $password, $sdk_password); echo '<div class = "trassir_server">'; if ($serv->check_connection()) { if ($serv->get_sid()) { $objects = $serv->get_objects(); if($objects){ foreach ($objects as $obj) // { if ($obj['class'] == 'Server') { $serv->status['name']= $obj['name']; } } } echo '<div class = "trassir_server_name">'; // echo $serv->status['name']; echo '</div>'; echo '<div class = "trassir_server_status">'; // $health = $serv->get_health(); foreach ($health as $key => $value){ if (($key == 'disks' || $key == 'database' || $key == 'network' || $key == 'automation')&& $value=='1') { echo '<div class = "OK">'; echo $key . ': '; echo 'OK'; echo '</div>'; } else if ($key == 'cpu_load' && $value <= 75) { echo '<div class = "OK">'; echo ' : '; echo $value . '%'; echo '</div>'; } else if ($key == 'uptime' && $value > 3600) { echo '<div class = "OK">'; echo ': '; $day = floor($value/86400); $value1 = $value - $day*86400; $hour = floor(($value - $day*86400)/3600); echo $day.' days '.$hour . ' hours'; echo '</div>'; } else if ($key == 'uptime' && $value <= 3600) { echo '<div class = "error">'; echo $key . ' less than hour : '; echo $value . ' seconds'; echo '</div>'; } else if ($key == 'channels_total') { echo '<div class = "OK">'; echo ' : '; echo $value; $ch_total = $value; echo '</div>'; } else if ($key == 'channels_online' && $value == $ch_total) { echo '<div class = "OK">'; echo ' : '; echo $value; $ch_total = $value; echo '</div>'; } else if (($key == 'disks_stat_main_days' || $key == 'disks_stat_subs_days')&& $value > 45) { echo '<div class = "OK">'; echo $key . ': '; echo $value; echo '</div>'; } else if ( $key == 'disks_stat_priv_days') { echo '<div class = "OK">'; echo $key . ': '; echo $value; echo '</div>'; } else { echo '<div class = "error">'; echo $key . ': '; echo $value; echo '</div>'; } } echo '</div>'; } } if (!$serv->status['online'] || !$serv->status['sid'] || !$objects){ // , . echo '<div class = "error">'; echo 'server ' . $ip . '</br>'; echo 'connection error'; echo '</div>'; } echo '</div>'; } $list_of_servers = fopen("conf/list_of_servers.txt", "r"); if ($list_of_servers) { while (($buffer = fgets($list_of_servers)) !== false) { trassir_server_monitor($buffer, $user, $password, $sdk_password); } } fclose($list_of_servers); echo '<br/>'; ?> </body> </html>
私の場合の結果(わずか4台のサーバーのテスト期間):
計画:
- スクリプトを定期的に(1日に2、3回)自動的に実行し、サーバーステータス統計をデータベースに保存します。
- UZユーザーの集中管理が可能です(最初の実装が可能になるまでに関連があれば)。
このシステムの「幸せな」管理者がまだいる場合、機能を共同で改善したい場合は喜んでお手伝いします。 また、誰かが最終結果に興味を持っているが、開発に従事する準備ができていない場合は、denis.glushakov @ bk.ruに書き込み、あなたのことを忘れないようにします。
コードを最適化するためのヒントは、コメントで喜んで受け入れます。
2018年6月22日からUPD。 素材にまだある程度の関心があったので、小さな更新を行います。この恐怖をすべて、packagistで利用可能なまともなlibに書き直し(Trassirという言葉で検索)、完全な機能を備えた別の実装のシンフォニーで作成しました(データベース、ディスプレイの状態を保存します)統計など)。 誰でも構いません-メールに書き込みます。まだ公開する時間がないため、まだ完了していません。