変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

インターネット

PHPでSNMP監視【2】

綺麗なグラフが描けるHightcharts jsでsnmpのグラフを改造中。
範囲グラフの場合

棒グラフの場合

あとX軸の背景色を交互に指定(alternateGridColor)できるし、
グリッド線も色、太さ、線種が指定できる。

gridLineColor: ‘#C0C0C0’

gridLineWidth: 1

gridLineDashStyle: ‘ShortDash’

しかし、

gridLineColor: function()  {

    return 1;

    },

の様に書くと、hightcharts.jsの中で、d.toLowerCase is not a function ってエラーが出るので、
00時だけ赤い線にしたい などは簡単にはできない。

// 事前に調べておく。

var nowdate = new Date();
var year = nowdate.getFullYear();       // 年
var mon  = nowdate.getMonth() + 1;  // 月
var date = nowdate.getDate();              // 日

xAxis:

・・・ ,

plotLines: [{
value: Date.UTC(year,mon-1,date,0,0,0,0),
width: 3,
gridLineDashStyle: ‘ShortDash’,
color: ‘#800000’,
zIndex: 3
}]

な感じで少しばんがると、

多少なんとかなる。



PHPでSNMP監視

phpでsnmp監視できるらしい。
元ネタはSNMPの活用(4) – ホスト情報をMySQLに自動蓄積~グラフの生成
CentOS6.2ではどうなるのかな。
まずphp-pearとphp-snmpを入れた方がいいらしい。

# pear -V

でコマンドがありませんと出たら、

# yum list php-*

で見るとphp用のモジュールはいっぱいあるのが判る。@が無いのはインストールしていないモジュールだ。

# yum list php-pear php-snmp

Available Packages
php-pear.noarch                        1:1.9.4-4.el6                        base
php-snmp.i686                       5.3.3-3.el6_2.5                      updates

と出たら、

# yum -y install php-pear

で、pearをインストする必要がある。
# pear -V
再度確認すると

Installed Packages
php-pear.noarch                       1:1.9.4-4.el6                        @base
php-snmp.i686                       5.3.3-3.el6_2.5                     @updates

と出るはずだ。
次にDB.phpもインストしないと使えないので

# pear install DB

WARNING: “pear/DB” is deprecated in favor of “pear/MDB2”
downloading DB-1.7.14.tgz …
Starting to download DB-1.7.14.tgz (133,103 bytes)
………………………..done: 133,103 bytes
install ok: channel://pear.php.net/DB-1.7.14

# find / -name DB.php -print

/usr/share/pear/DB.php

でやっと入ったようだ。
1.phpmyadminでSNMP専用のデータベースを作る。
2.phpmyadminでそのデータベースにテーブルを作る。

snmpで調べる対象を登録するテーブルを作る。

create table snmp_object (
code int PRIMARY KEY,
object_id_1m   varchar(255),
object_id_5m   varchar(255),
title   varchar(255),
sub_title_1m   varchar(255),
sub_title_5m   varchar(255)
);

snmpで調べる対象をテーブルに登録する。

insert into snmp_object(code,object_id_1m,object_id_5m,title,sub_title_1m,sub_title_5m)
values(0,’.1.3.6.1.2.1.2.2.1.10.2′,’.1.3.6.1.4.1.2021.9.1.9.1′,’.1.3.6.1.2.1.2.2.1.16.2′,’In’,’Out’);

insert into snmp_object(code,object_id_1m,object_id_5m,title,sub_title_1m,sub_title_5m)
values(1,’.1.3.6.1.4.1.2021.10.1.5.1′,’.1.3.6.1.4.1.2021.10.1.5.2′,’CPU使用率’,’1分間平均’,’5分間平均’);

insert into snmp_object(code,object_id_1m,object_id_5m,title,sub_title_1m,sub_title_5m)
values(2,’.1.3.6.1.4.1.2021.4.6.0′,’.1.3.6.1.4.1.2021.4.4.0′,’空きメモリ量’,’空き物理メモリ’,’空きスワップメモリ’);

insert into snmp_object(code,object_id_1m,object_id_5m,title,sub_title_1m,sub_title_5m)
values(3,’.1.3.6.1.4.1.2021.9.1.9.1′,’.1.3.6.1.4.1.2021.9.1.9.1′,’ディスク使用率’,’/ Disk used’,’/ Disk used’);

データを格納するテーブルを作る。

create table log (
snmp_time   timestamp    PRIMARY KEY,
code int,
snmp_val_1m    varchar(255),
snmp_val_5m    varchar(255)
);

ALTER TABLE `log`
DROP PRIMARY KEY,
ADD PRIMARY KEY(
`code`,
`snmp_time`);

phpはコマンドラインからも使えるようになっているので、
3.こんなスクリプトを作る。

#!/usr/bin/php
<?php
/**************
**snmpget.php**
**************/
require_once(“DB.php”);
snmp_set_quick_print(1);
$dsn = “mysql://<database-username>:<database-passward>@<host-name>/<database-name>;
$ipaddr =<ip-address>;
$community = “public”;
// MySQLに接続
$db = DB::connect($dsn);
// 文字セットを指定
$db->query(” SET NAMES ‘utf8’ “);
// 設定を読み出す
$sql = “SELECT code, object_id_1m, object_id_5m, title from snmp_object”;
$code_res = $db->query($sql);
if ($code_res !== false){
while ($row =& $code_res->fetchRow()) {
$code =         $row[0];
$object_id_1m = $row[1];
$object_id_5m = $row[2];
$title =        $row[3];
// snmpからデータ収集
$snmp_val_1m = (float)snmpget($ipaddr, $community, $object_id_1m);
$snmp_val_5m = (float)snmpget($ipaddr, $community, $object_id_5m);
if ($snmp_val_1m !== false && $snmp_val_5m !== false) {
// データベースへ書き込み
$sql = sprintf(“insert into log(snmp_time,code,snmp_val_1m,snmp_val_5m) values(CURRENT_TIMESTAMP,%s,’%s’,’%s’);”,
$code,$snmp_val_1m,$snmp_val_5m);
$res = $db->query($sql);
if (PEAR::isError($res)) {
// print $sql . ” fail.\n”;
} else {
// print “success.\n”;
}
}
}
} else {
// print “fail. no object.^n”;
}

$db->disconnect();
?>

これを実行するとデータが格納される。

select * from log;

とりあえず、MRTGのクローン設定に

*/5 * * * * root /root/snmpget.php

を居候させて様子を見てみよう。
あとはグラフ化すれば良いのだけれど、
データが充分溜まったらやろうかな。
出来上がったCPU負荷率グラフはコレ。
※Highcharts-2.1.9のサンプルのseries: 部分に、PHPコードを組み込んだだけもの。

series: [
<?php
require_once(“DB.php”);
snmp_set_quick_print(1);

$dsn = “mysql://<database-username>:<database-passward>@<host-name>/<database-name>;

// MySQLに接続
$db = DB::connect($dsn);
// 文字セットを指定
$db->query(” SET NAMES ‘utf8’);

$sql = “SELECT code, title, sub_title_1m, sub_title_5m from snmp_object where code=1;”;
$code_res = $db->query($sql);
if ($code_res !== false){
  while ($row =& $code_res->fetchRow()) {
  $code =         $row[0];
  $title =        $row[1];
  $sub_title_1m = $row[2];
  $sub_title_5m = $row[3];
  }

  $sql = “SELECT snmp_time, code, snmp_val_1m, snmp_val_5m from log where code=1 order by snmp_time;”;
  $res = $db->query($sql);
  $d1 = array();
  $d5 = array();
  $cnt=0;
  $start_time = new DateTime();
  while ($row =& $res->fetchRow()) {
    // PHPでmysqlでtimestamp型をうまく扱えない様なので
    $snmp_time =   . $row[0];       // 一旦文字列に変換して
    $start_time0 = new DateTime($snmp_time, new DateTimeZone(JST));  // DateTime型に取り込んでみた。
    if( $start_time > $start_time0 ) {
      $start_time = $start_time0;
    }
    $code =        $row[1];
    $snmp_val_1m = $row[2];
    $snmp_val_5m = $row[3];
    $d1[$cnt] = $snmp_val_1m;
    $d5[$cnt] = $snmp_val_5m;
    $cnt = $cnt +1;
  }
  $d1_text = join(“,”,$d1);
  $d5_text = join(“,”,$d5);
  echo “{\n”;
  echo “type: ‘area’,\n”;
  echo “name: ‘” . $sub_title_1m . “‘,\n”;
  echo “pointInterval: 5 * 60 * 1000,\n”;
  echo “pointStart: Date.UTC(“ . date_format($start_time,‘Y’) . “,” . (0+date_format($start_time,‘m’)-1) . “,” . date_format($start_time,‘d’) . “,” . date_format($start_time,‘H’) . “,” . date_format($start_time,‘i’) . “,” . date_format($start_time,‘s’) . “,0),\n”;
  echo “data: [” . $d1_text . ” ]\n”;
  echo “},{\n”;
  echo “name: ‘” . $sub_title_5m . “‘,\n”;
  echo “pointInterval: 5 * 60 * 1000,\n”;
  echo “pointStart: Date.UTC(“ . date_format($start_time,‘Y’) . “,” . (0+date_format($start_time,‘m’)-1) . “,” . date_format($start_time,‘d’) . “,” . date_format($start_time,‘H’) . “,” . date_format($start_time,‘i’) . “,” . date_format($start_time,‘s’) . “,0),\n”;
  echo “data: [” . $d5_text . ” ]\n”;
  echo “}\n”;
}
$db->disconnect();
?>
]

実行結果はこんな感じ

series: [
{
type: ‘area’,
name: ‘1分間平均’,
pointInterval: 5 * 60 * 1000,
pointStart: Date.UTC(2012,1,02,04,20,02,0),
data: [169,154,138,125,104,40,1,0,0,0,0,1,0,2,0,0,0,0,5,0,0,0,1,0,1,5,1,0,0,0,4,0,5,0,0,0,0,0,1,0,1,1,0,19,0,0,1,2,0,0,0,7,0,2,0,0,0,0,2,0,1,0,0,0,0,0,0,0,11,4 ]
},{
name: ‘5分間平均’,
pointInterval: 5 * 60 * 1000,
pointStart: Date.UTC(2012,1,02,04,20,02,0),
data: [132,129,135,130,116,93,34,11,2,1,1,2,2,2,1,1,0,0,1,0,0,0,1,0,1,1,0,0,0,0,2,0,2,0,0,0,0,0,1,0,1,0,0,4,1,0,1,2,0,0,0,2,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,8,8 ]
}
]

グラグの見た目はこんな感じに。

100%制限を無くすと、

MRTGと比べるとどうだろう。

1分と5分が逆になっている様だな。



このブログで使っているテーマ

新テーマで紹介されてる、

Strange Little Town

です。
使ってもう2年も経ってますけどね。
外観のページで

現在のテーマはメニューに対応していません

って出ます。
そろそろバージョンアップないですかね?
Version 0.3のままなんですよね。
ヘッダーの画像を

小細工してみたが、

記事が読みにくいので没。



AMD Radeon HD 7950

HD7970がやっと出たと思ったら、性能制限版のHD7950も出たようだ。
外見はPCI Express補助電源コネクタのピンが8+6から6+6になっている程度しか違いがない。
Direct11でのベンチ性能はGeForce GTX580と同程度で、
DirectX9系はHD6970と同程度で、GeForce GTX580にHight設定で負けるのでFF-XIVには向いていないから、まだHD7970でガンガン攻めるしかない。
ベンチ時の発熱はHD7970とそれほど違いはない。
HD7970では最大消費電力がHD6970より20Wほど増えていたのだが、HD7950では40W低くなっている。
HD6970から性能を上げたいが、GeForce GTX580のもの凄い発熱や消費電力に悩んでいる人にフォーカスをあてた感じがする。
もう消費電力を上げたくない人にはお勧め。
だが、価格は4万円台と高めで微妙だ。



脱毛これは私にとって非常に便利です。

訳が判らないスパムがやってきた。
hair loss It is highly helpful for me. Huge thumbs up for this blog post about hair loss!
実は翻訳サイトが変な直訳を翻訳出しただけ、
普通に禿に悩んでる人向けのケア サイトのサンプルで、
タイトルは、Cure Your Hair Loss 「貴方の脱毛を直す」 だ。
ドコの誰が作ったのか判らないシロモノだ。
でもデザインは白っぽいけど明るい雰囲気で悩みに悩んでいる人はほっとするんじゃなかろうか。
オマケにWordPressでできていた。



counterize-ja.poを改造

ダウンロードしたcounterize-ja.poがちょっと記載が足りなかったので追記してみた

#counterizeii/counterize.php:1203
msgid “Check All”
msgstr “全選択”

#counterizeii/counterize.php:1205
msgid “Uncheck All”
msgstr “全解除”

#counterizeii/counterize.php:1207
msgid “Delete selected Entries”
msgstr “チェックを入れた項目を削除”。

でもこのままでは使えないので、counterizeのインストール先のディレクトリィで

# msgfmt -o counterize-ja.mo counterize-ja.po

と実行してmoファイルを作り直す。
あとはページを開きなおすだけ。



Raspberry Pi

25ドルの格安Linuxコンピュータ「Raspberry Pi」製造開始

ARM1176JZFSアプリケーションプロセッサ(700MHz)とVideocore 4 GPUを備えたBroadcom BCM2835を搭載したボードで、

サイズは85.60×53.98ミリ。

RCAビデオ、HDMI、オーディオ出力、USB 2.0、SDカードスロットなどのインターフェイスを装備。

キーボード/ マウスを接続し、テレビをモニターにして使用できる。

RAM 256MBでEthernetポートを備えるModel Bは35ドル(約2700円)

らしい。
ブログ鯖には充分すぎる性能だ。
日本でも発売されないかな。
でも、メモリがちょっと少なすぎ、
やっぱりCuBoxかな。こっちは130ドル。
 



BenQ G615HDPL

LEDバックライトを採用した15.6型ワイド液晶ディスプレイ

  • 高度画像補正技術「Senseye 3」搭載
  • グレア(光沢)パネル採用で深みのある鮮やかな色調表現
  • DCR(Dynamic Contrast Ratio)搭載でコントラスト比100万:1を実現
  • 値段も安い。

というのも、入力信号 アナログRGB のみだからだ。
VESAマウント(100x100mm)も付いているが、
※スタンド部分は取り外しが出来ません。
と親切な注意書きが付いている。
これで地デジテレビを見れるかどうかは
使っているチューナーやグラフィック デバイスに依存するので、
各メーカーで提供している地デジ・チェッカーを試してみるしかない。
DVDやブルーレイのコンテンツ(映画など)が観れる可能性はHDCP未対応のDVI入力より可能性は高い。
多少高いが、デジタルDVI-D(HDCP対応)のある G2025HD を選んだ方がマシだろう。
だが、本音で言えばHDMIが付いている、RL2240H の方がいい。DVIが無くてもHDMIが付いているものが増えてきたからだ。
ゲームで残像感が気になるなら、ココの記事とサンプルを見ると何がいいのか思いつくだろう。
店頭で確認するならゲームの中で動き回るキャラの名前がブレて読めないとか細かいところを観るといいだろう。



プライベート クラウド

プライベートクラウドとは、企業が自社内でクラウドコンピューティングのシステムを構築し、企業内の部門やグループ会社などに対してクラウドサービスを提供する形態のことであると思ってたが、
マイクロソフトが云うプライベート クラウドは、マイクロソフトのデータ センターに自社用に仮想化されたサーバーを借り、好みのサービスが作れりこめるサービスのことだ。
提供されるサービスにはPaaS、SaaSがあり、
PaaSとしてWindows Azure Platformがあり、
マイクロソフトのデータセンターにあるクラウド プラットフォームで、アプリケーションとデータをホストしている。
ここで使える機能は以下の3つだけだ。

  • アプリケーションの動作環境(Windows Azure)
  • Windows Azure AppFabric
  • SQL Azure

Windows Azureといっているが、アプリケーションといってもWebアプリケーション=IIS上のASP.NET Webアプリケーションなのだ。VirtualServerみたいにデスクトップを開いてMS-WordやMS-Excelをグリグリできる訳ではない。
Windows Azure AppFabricはクライアントで動くアプリケーションやMSのプライベート クラウドで動くアプリケーションなどで情報をやり取りするサービスだ。仮想のURLでクラウドに接続できるのでクライアントからクラウド上のサーバーにアクセスするのは便利だ。だが、クラウド上のサーバーからプッシュするには相変わらず携帯メールにショートメールを流すしかない。当然だが、スマートフォンどころか、社外からもアクセス可能にした途端にDDosでも仕掛けられたら一巻の終わり。
SaaSとしてMicrosoft Online Servicesがあり、ソフトウェア プラス サービス型の企業向け商用サービスの総称だ。一般消費者向けのMicrosoft Windows LiveなどのLiveサービスと同列のようでこれからも増えるだろう。
クラウドで扱えるサービスはWebベースなので、それにあったものに全て取り替えなければ意味が無い。
※例、MS-OfficeはMS-Office365へ
もし、金をケチってMS-Officeはそのまま使いたいとか
今と同じやり方でそのまま使いたい
などと我儘を言ってると、

  • 日報の転送、集計、印刷などExcelのマクロ三昧
  • 議事録や稟議書を回覧するためのBlog
  • 雑用向けの様々なWeb画面の作成

など今までメールで送っていたものをクラウド上のサーバーに送るための得たいの知れないものが多数必要になり、
結果として無駄なことには出費を惜しまないという散々な結果になる。
業務を共有ファイルやメールの利用から
Web化する時点で、

  • Webで出来ること              ブラウザで見るだけ
  • Webで出来きないこと           メールに添付すると迷惑な巨大ファイルは扱えない。
  • Webで出来るかどうか判らないこと    日報を閲覧とか、気が付けばデータが大量になってるもの。

に分ける必要がある。

送っといたので後よろしく

というメールでよくある業務の引継ぎをWeb化する必要はない。
必ず、『Webで出来きないこと』 が存在するのだ。
全ての業務をWeb化すると云っている奴はWeb=2ch板やエロサイト程度にしか認識がないのだろう。それだって管理・運営は結構手間がかかるものだが、それすらも考え付かないと思える。
大体、毎日の業務内容をサーバーに詰め込んでたら、いつかサーバーがパンクして慌てることになる。
そんなことも、事前に把握困難なのにWeb化なんて・・・
では諸氏の健闘を祈る。



ROBOT

MMORPGのBOTではなくGoogleとかからいっぱいくるROBOT
一週間くらいでapacheのアクセスログが8Mバイトくらいになる。
robotsは連打してくるので結構目立つ、画像検索robotはrobots.txtも気に指定無い様だ。
一年以上もログ眺めて大体判ってきたし、もういいだろう。
Counterize IIの設定でROBOTをカウントする様に設定されていたんでOFFに変えた。

※Counterize IIをアップデートした時に戻っていたらしい。

Counterize IIのログでもごっそりとROBOTが持っていくのが見える。
これで順当に減るはずだな。
LAN内接続はIP(192.168)フィルタしてあった。
参考:  Jetpackのサイト統計数はCounterize IIの約3分の2。apacheログでbotをgrepすると3分の1HIT。
ps.おかしいな?カウンタがいつもより増えてるぞ?




top