2018年7月13日金曜日

Perl でメール送信(Email::Sender編) 添付ファイルあり

Email::Sender を使ったサンプルコードを記載。今度は添付ファイルありバージョン。


#!/usr/bin/perl
#
# メール送信サンプル
#
use Encode;
use Email::MIME;
use Email::MIME::Creator;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP;
use IO::All;
use strict;
use warnings;
use utf8;

# サブルーチンを呼んでメールを送る
&mailSend();

sub mailSend {
   my $from    = 'foo@localhost';
   my $mailto  = 'user01@bar.com, user02@bar.com';
   my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'メール送信テスト');
   my $message = <<"BODY";
テストで送信するメールです

ここに本文を記載します。本文はヒアドキュメントを
利用して作成しています。

※本メールへの返信はしないでください。
BODY

  my $body = Encode::encode('iso-2022-jp', $message);
   my $file = '/home/A0gaku/attachment.zip';

  my @parts = (
     Email::MIME->create(
       'attributes' => {
       'content_type' => 'text/plain',
       'charset'      => 'ISO-2022-JP',
       'encoding'     => '7bit',
       },
       'body' => $body,
     ),

    Email::MIME->create(
       'attributes' => {
       'fimename'     => 'attached.zip',
       'content_type' => 'application/octet-stream',
       'encoding'     => 'base64',
       'name'         => 'attachment.zip',
       },
       'body' => io($file)->all,
     ),
   );

  my $mail = Email::MIME->create(
     header   => [
       From    => "$from",
       To      => "$mailto",
       Subject => "$subject",
      ],

    parts => [@parts],
   );


   my $transport = Email::Sender::Transport::SMTP->new({
     host => 'smtp.foo.com',
     port => 25,
   });

  sendmail($mail, { transport => $transport });
}

Perl でメール送信(Email::Sender編) 添付ファイル無し

Email::Sender を使ったサンプルコードを記載。モジュールは標準ではインストールされていないので、CPANから追加して使うこと。添付ありで IO::All を使うので、事前に入れておく。

# cpan
> install Email::MIME
> install Email::Sender
> install IO::All

#!/usr/bin/perl
#
# メール送信サンプル
#
use Encode;
use Email::MIME;
use Email::MIME::Creator;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP;
use strict;
use warnings;
use utf8;

# サブルーチンを呼んでメールを送る
&mailSend();

sub mailSend {
   my $from    = 'root@localhost';
   my $mailto  = 'user01@bar.com, user02@bar.com';
   my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'メール送信テスト');
   my $message = <<"BODY";
テストで送信するメールです

ここに本文を記載します。本文はヒアドキュメントを
利用して作成しています。

※本メールへの返信はしないでください。
BODY

  my $body = Encode::encode('iso-2022-jp', $message);

  my $mail = Email::MIME->create(
     header   => [
       From    => "$from",
       To      => "$mailto",
       Subject => "$subject",
      ],

    attributes => {
       content_type => 'text/plain',
       charset      => 'ISO-2022-JP',
       encoding     => '7bit',
     },

    body => $body,
   );

  my $transport = Email::Sender::Transport::SMTP->new({
     host => 'smtp.foo.com',
     port => 25,
   });

  sendmail($mail, { transport => $transport });
}

2018年7月5日木曜日

Perl でメール送信(MIME::Lite編) 添付ファイルあり

MIME::Lite 使ったサンプルコードを記載。今度は添付ファイルありバージョン。


#!/usr/bin/perl
#
# メール送信サンプル
#
use Encode;
use MIME::Lite;
use strict;
use warnings;
use utf8;

# サブルーチンを呼んでメールを送る
&mailSend();

sub mailSend {
   my $from    = 'root@localhost';
   my $mailto  = 'user01@bar.com, user02@bar.com';
   my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'メール送信テスト');
   my $message = <<"BODY";
テストで送信するメールです

ここに本文を記載します。本文はヒアドキュメントを
利用して作成しています。

※本メールへの返信はしないでください。
BODY

  my $body = Encode::encode('iso-2022-jp', $message);

  # コンテナを作成
   my $msg = MIME::Lite->new(
       From => "$from",
       To => "$mailto",
       Subject => "$subject",
       Type => 'multipart/mixed',
   );

  # メッセージを作成
   $msg->attach(
     Type => 'text/plain; charset="ISO-2022-JP"',
     Encoding => '7bit',
     Data => "$body"
   );

  # 添付ファイル
   $msg->attach(
       Type => 'application/octet-stream',
       Disposition => 'attachment',
       Path => '/home/foo/attachment.zip',
       Filename => 'attachment.zip',
   );

# 送信
   my $smtp = 'smtp.foo.com';
   $msg->send('smtp',$smtp);
}

Perl でメール送信(MIME::Lite編) 添付ファイル無し

MIME::Lite を使ったサンプルコードを記載。モジュールは標準ではインストールされていないので、CPANから追加して使うこと。

perldoc を読むと

WAIT!
     MIME::Lite is not recommended by its current maintainer. There are a
     number of alternatives, like Email::MIME or MIME::Entity and
     Email::Sender, which you should probably use instead. MIME::Lite continues
     to accrue weird bug reports, and it is not receiving a large amount of
     refactoring due to the availability of better alternatives. Please
     consider using something else
.

非推奨のようです。色々調べてみたのですが、技術評論社の第20回 Email::Sender:メールを送信するが詳しいです。


#!/usr/bin/perl
#
# メール送信サンプル
#
use Encode;
use MIME::Lite;
use strict;
use warnings;
use utf8;

# サブルーチンを呼んでメールを送る
&mailSend();

sub mailSend {
   my $from    = 'root@localhost';
   my $mailto  = 'user01@bar.com, user02@bar.com';
   my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'メール送信テスト');
   my $message = <<"BODY";
テストで送信するメールです

ここに本文を記載します。本文はヒアドキュメントを
利用して作成しています。

※本メールへの返信はしないでください。
BODY

  my $body = Encode::encode('iso-2022-jp', $message);

  my $msg = MIME::Lite->new(
     From => "$from",
     To => "$mailto",
     Subject => "$subject",
     Type => 'text/plain; charset="ISO-2022-JP"',
     Encoding => '7bit',
     Data => "$body"
   );

  # SMTPサーバを指定します。FQDNではなくIPアドレスでもok
   my $smtp = 'smtp.foo.com';

  $msg->send('smtp', $smtp);
}

2018年7月4日水曜日

Perl でメール送信(Net::SMTP編)

Net::SMTP を使ったサンプルコードを記載。モジュールは標準でインストールされているはずなので、CPANから追加なしで使えるはず。


#!/usr/bin/perl
#
# メール送信サンプル
#
use Encode;
use Net::SMTP;
use strict;
use warnings;
use utf8;

# サブルーチンを呼んでメールを送る
&mailSend();


sub mailSend {
   # メールを作成します。
   #
http://chaichan.lolipop.jp/perlnote/perlnote2007-09-02.htm を参考にする
   # 複数アドレスの送信ができるよう、ヘッダー部とNet::SMTPに送るデータが若干
   # 違うのがミソ

   my $from    = 'root@foo.com';
   my $mailto  = 'user01@bar.com, user02@bar.com';
   my @mailto  = split(',', $mailto);
   my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'メール送信テスト');
   my $header  = "From: $from\n" .
                 "To: $mailto\n" .
                 "Subject: $subject\n" .
                 "Mime-Version: 1.0\n" .
                 "Content-Type: text/plain; charset = ISO-2022-JP\n" .
                 "Content-Trensfer-Encoding: 7bit\n";
   my $message = <<"BODY";
テストで送信するメールです

ここに本文を記載します。本文はヒアドキュメントを
利用して作成しています。

※本メールへの返信はしないでください。
BODY

  my $body = Encode::encode('iso-2022-jp', $message);

  # SMTPサーバに接続します。FQDNではなくIPアドレスでもok
   my $smtp = Net::SMTP->new('smtp.foo.com');
   if ( !$smtp ) {
        print "メールサーバーにアクセスできません\n";
   }

  # メールを送信します。
   $smtp->mail($from);
   $smtp->to(@mailto);
   $smtp->data();
   $smtp->datasend($header);
   $smtp->datasend($body);
   $smtp->dataend();
   $smtp->quit;
}

2018年7月3日火曜日

CPANを使ってみる

Perl からメールを出す必要があり、四苦八苦したときの備忘録です。

Net::SMTP を使ってメールを出すんですが、見つけたサンプルでは MIME::Entity を使ってエンコードをしていました。

標準でMIME::Entity がインストールされていないので、Encode::encode を使って取りあえず変換→送信はできているのですが、いい機会なので CPAN のインストールを設定をしてみました。

モジュールがインストールされているか否かは次の方法で分かります。

  1. perl -Mモジュール名 -e ''
    ※何も表示されなければインストール済み
  2. perldoc モジュール名
    ※ドキュメントが表示されればok
    インストールされている場所が知りたい場合は
    perldoc -l モジュール名
    バージョンが知りたいときは(出ないこともあるけど)
    perldoc -m モジュール名

MIME::Entity がインストールされているか確認

#  perl -MMIME::Entity -e ''
Can't locate MIME/Entity.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

ということで入っておりませんでした。

開発用の rpm も cacti のインストール時に必要と思われるものは入れてありますが、CPANのインストールを行う場合は一式あった方が先々問題が出なそうでしたので、
# yum -y groupinstall 'Development tools'

でインストールをしておきました。

2018/07/13 追記
 CentOS 7 ではリリース当初は groupinstall が使えなかったようです。自分が使っている 7.5 では警告は出るもののインストールは完了しました。CentOS 7 からは

# yum groups install "Development Tools"

が正しいようです。
--- 追記終わり ---

最近のcpanはyamlが必要なのでcpanを使う前にyamlのインストールをしました。
# yum -y install libyaml-devel

続いて CPAN のインストールをします。
# yum -y install cpan


CPANの設定のします。全てデフォルトのまま。(問いに対しEnterキー押下のみ。)
# cpan

最後に
Would you like me to append that to /root/.bashrc now? [yes]


commit: wrote '/root/.cpan/CPAN/MyConfig.pm'

You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> quit ← 一旦終了

と聞かれ、.bashrc が書き換わっております。Perl でモジュールの開発をする方はローカル→共通と使い分けすると思うのですが、自分はモジュールの開発はしないのでパスの通っているディレクトリにインストールされるよう .bashrc の変更をします。(Perl関連の追加5行をコメントアウトする。)

# vi .bashrc

#export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
#export PERL_MB_OPT="--install_base /root/perl5";
#export PERL_MM_OPT="INSTALL_BASE=/root/perl5";
#export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
#export PATH="/root/perl5/bin:$PATH";

一旦ログアウトし、再度 rootでログイン。念のため環境変数の確認をする。

# exit
$ su -
# echo $PERL5LIB
← 空白ならok

yaml のライブラリはインストール済みですが、モジュールがまだですのでYAML のモジュールをインストール。続いて MIME::Entity をインストールしてみます。YAML のモジュールが未インストールだとモジュールの追加(コンパイル時)に失敗します。
※ CPAN も古いのが入っているので、ついでに上げておいた方がいいかも

# cpan
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> install YAML
Reading '/root/.cpan/Metadata'
   Database was generated on Sat, 30 Jun 2018 09:17:03 GMT
Running install for module 'YAML'
Running make for T/TI/TINITA/YAML-1.26.tar.gz

(snip)

Appending installation info to /usr/lib64/perl5/perllocal.pod
   TINITA/YAML-1.26.tar.gz
   /bin/make install  -- OK

cpan[2]> install MIME::Entity
Running install for module 'MIME::Entity'
Running make for D/DS/DSKOLL/MIME-tools-5.509.tar.gz

(snip)

Appending installation info to /usr/lib64/perl5/perllocal.pod
   DSKOLL/MIME-tools-5.509.tar.gz
   /bin/make install  -- OK

cpan[3]> quit


無事にインストールができたようです。root での確認では自分のローカルにインストールされている可能性もあるので、一般ユーザで確認をしてみることをにします。

# exit
$ perl -MMIME::Entity -e ''

なにも出力されませんので、問題なくインストールができたようです。


2018/07/13 追記

cpan でデフォルトインストール(基本的には対話形式で入れたいので、環境変数で一時的対応をする)
# export PERL_AUTOINSTALL='—defaultdeps'

cpan でモジュールのインストール時や upgrade でエラーが出る。(インストール環境に左右されますが、自分の足りなかった物たち)
# yum -y install expat-devel
# yum -y install perl-Env
# yum -y install openssl-devel

シェルでヒストリが効かない (Bundle::CPANをインストール)
# cpan
> install Bundle::CPAN


2018年6月19日火曜日

device eth0 does not seem to be present

VMware vCenter Converter を使って CentOS6 を ESXi → ローカル → ESXi とコピーしたところ、タイトルのメッセージが出てネットワークの接続ができない。

俺の覚え書きさんの【CentOS6】NICが有効化できないときの対処 を参考に

# vi /etc/udev/rules.d/70-persistent-net.rules

を編集。一番下の行を生かし、eth1 を eth0 に変更し無事完了。

2018年5月9日水曜日

Cacti で不要rrdファイルの削除

Data Source を削除しても、対応する rrdファイルは削除されず残っております。Try & Error で Cacti の設定をしておりますが、いらなくなった rrdファイルの整理をしてみました。(残り容量がまだまだあるので、いますぐやらなくても大丈夫ではありますが。)

  1. [console] → "Utilities" → [System Utilities] を選択。
  2. "RRD Utilities" → [RRDfile Cleaner] を選択
  3. "Time Since Update" をプルダウンし、 "> 1 Week” を選択。(この辺はお好みで。)
    delete_rrd-01
  4. 一覧が表示されるので、削除するrrdファイルにチェックを入れ、右下 "Choose an action" から "Delete" を選択し、[Go] ボタンをクリック。(全ていらないファイルだと思うので、 "RRD File Name"バー右脇のチェックボックスをクリックし全選択が楽。)
    delete_rrd-02

タイムスタンプを見ているだけだと思うので、/usr/share/cacti/rra 配下のタイムスタンプが更新されていないファイルを削除しても一緒だと思います。

2018年5月8日火曜日

Windows 10 April 2018 Update を適用したら WOL ができなくなった...

表題通りです。

 Windows10 で Wake On LAN を使ってみるで一通り設定すべきことを書いておいたので、どこが変更されたか確認してみました。

  1. ドライバーは変更されていなかったです。
  2. 高速スタートアップが有効化されていました。

ということで、電源オプションから高速スタートアップを無効化しました。Wake on LAN for Windows 用に ping が通るか確認したところ、

  1. 同一セグメントからは ok
  2. 他セグメントからは NG

Windows Defender ファイアウォールの設定を確認したのですが、スコープで任意のIPアドレスが指定されているので問題ないはず。→ でも通らない。

面倒なので、ufufu diaryさんのブログのページを参考に、グループポリシーエディタで強制設定することにしました。これで次の大型アップデートが来ても pingの疎通確認は ok かな?

設定箇所:

「gpedit.msc」でグループポリシーを開く

 →コンピューターの構成
 →管理用テンプレート
 →ネットワーク
 →ネットワーク接続
 →Windowsファイアーウォール内

 「ドメインプロファイル」「標準プロファイル」それぞれで、
 「ICMPの例外を許可する」を「有効」にした上で、
 「着信エコー要求を許可する」にチェックすることで、回避できました。

2018年4月19日木曜日

Windows10 起動時にディスク100%だった原因は Chromeでした

無職のエンジニアさんの Windowsでディスクに書き込みアクセスし続けたのはChromeだった を参考に、閲覧とダウンロードの履歴を消してみました。結構たまっているものですねぇ。

capture_chrome01

さてどうなるか、データ消去が終わったので再起動をしてみることにします。→ カリカリの時間が短くなりました! (Chromeさんたら、おちゃめさんねorz)

ハードディスク100%秒だと思っていたのですが、起動時にChromeが何かと作業をしていたのですね。System Ready(というかアイドル状態?)になるまで10分→3分になりました。

以前は重くて何もできなかったのですが(できないことも無いんだけど...)、System Readyになる 3分間も操作ができるようになりました!

FireFox に乗り換えないと駄目かと思っていましたが、Chromeさんとのお付き合いが継続できそうです。

ついでに拡張機能のClick&Cleanも入れてみました。86%(バージョンで微妙に違うみたい)で止まったいます。

Installボタンをクリックしちゃうと、Disk Cleanup とか QuickScan for Malware等々がインストールされちゃいますので、グレー表示になっているSkipボタンにカーソルを乗せると色が変わりますので、Skipボタンをクリックし完了。

capture_chrome02

オプションはデフォルトで自分には必要十分な状態でした。特に変更はせずデフォルトのままです。

capture_chrome04

アドレスバーでURLを入力するときに、履歴を消しているので補完候補が出てこないのが不便だと思わなければお薦めの拡張機能です。

2018/04/20 追記
 デフォルトオプションだと、Chrome終了時に個人データは削除されませんねorz... アドレスバーの補完は便利といえば便利なので、しばらく様子見をすることにします。

 設定から削除するよりは Click&Clean で削除する方が操作アクションも少ないので、

  • 重くなったら削除をする
  • Chromeが閉じるとき、個人データを削除のオプションを有効にする

のいずれかをのんびりと決めたいと思います。原因がわかっているので、そのぶん気が楽。

2018/04/23 追記
 通知を表示する(推奨) は少々ポップアップのダイアログがうるさいのでチェックを外すことにしました。

2018年4月16日月曜日

Cacti で snmp を使ったデータ取得(AlaxalA温度)

スクリプトを使ったメモリ使用状況をと思っていましたが、その前に snmpを使ったデータ取得をしてみることにしました。ちなみに取得するデータは一つだけです。うまくいったら複数取得に進もうと思います。

AlaxalA の温度取得の MIB は .1.3.6.1.4.1.21839.2.2.18.2.1.3.1.3.1.1 になります。バージョンが 0.x台の Cactiでの snmpデータ取得が書かれているサイトですと、値の取得時は [Data Input Methods] で Input Methods を作成となっていましたが、1.x 台ですと Input Methods の指定をする必要は無いようです。(というか、プルダウンコンボの選択肢は「Script/Command」と「Script Server」だけでした。)

cacti_00

自分は次の手順で登録を行ないました。

【Step.1: Data Template の作成】

  1. [Console]→"Templates"→[Data Source]をクリック
  2. Data Templatesバーの右端"+"をクリックし、項目の入力

    Data Templates
       Name AlaxalA - Temperature
  3. Data Source
       Name: |host_description| - Temperature
       Data Input Method: Get SNMP Data
       Data Source Profile:System Dedault
       Data Source Active: Data Source Activeにチェックを入れる

    Data Source Item
       Internal Data Source Name:Temperature
       Minimum Value ("U" for No Minimum):0
       Maximum Value ("U" for No Maximum):0
       Data Source Type:GAUGE
    cacti_01

    項目入力後、Createボタンをクリック。

  4. Custom Data [data input: Get SNMP Data] が画面下部に追加されるので、
      OID:.1.3.6.1.4.1.21839.2.2.18.2.1.3.1.3.1.1
      SNMP Version: 2
    を入力して Saveボタンをクリック。


次はグラフテンプレートを作成します。

【Step.2: Graph Template の作成】

  1. [Console]-"Templates"→[Graph]をクリック
  2. Graph Templatesバー右端の"+"をクリック。

  3. 項目が多いので、入力・変更した点のみ記述
    Tempate [new]
       Name:AlaxalA - Temperature

    Graph Template Options
       Common Options
        Title:|host_description| - Temperature
        Vertical Label (--vertical-label):Temperature - Celsius

    Scaling Options
        Auto Scale: チェックを外す
       Upper Limit (--upper-limit): 55
    cacti_02

    Auto Scale は動作保証温度50℃(ファン無しは45℃)に対する絶対値のグラフを見たいの外しました。
    Upper Limit は 55℃まで見たいので 55 にしましたが、10単位で表示されるようで、作成されたグラフを見たら 60になっていました。
    ※変更なし部分はたたんであります。

    項目入力後、Createボタンをクリック。
    cacti_02
  4. Graph Template Items と Graph Item Inputs が上部に追加されますので、表示したい項目を入力します。各パラメータの意味はパソコンおやじさんのRRDTool+Cactiによるサーバ監視(Linux編)が詳しいです。
    グラフの色ですが、Cacti のスキンを Classic以外にすると、全色表示されません。(全色表示されると逆に選ぶのが大変だったりますが...)
    とりあえずこんな感じで作ってみました。
    cacti_03
    cacti_04
    で、表示されたのがこちら。
    cacti_05
    なんか殺風景でかっこわるい。
  5. 他のグラフテンプレートを見てみると、Graph Template Itemsの Text Format に表示用の文字が入っていたので指定してみました。結果がこちら。
    cacti_06
    cacti_07
    概ね希望通りの表示なのでokとします。欲を言えば
    ・小数点以下を一桁に
    ・度数の後に℃を表示したい(マルチバイト文字は化けるので×)


値一つの snmpデータの表示ができたので、次は複数値の表示挑戦予定です。

2018/04/20 追記
 既存のグラフテンプレートを見ると、今回の設定と違っていました。GPRINT は GPRINT だけのものが選択されていました。Consolidation Function (CF Type)で MAX とか LAST を選ぶようです。次のように変更をしました。

cacti_04-2

2018年3月12日月曜日

cacti でダッシュボード(もどき)

機器登録も完了して、ほぼ運用体制が完了。こうなるとダッシュボードっぽいものが欲しくなってきました。

デフォルトでは用意されていないので、グーグル先生にきいてみたところ DDN LAB'SさんのCactiで好きなグラフだけ集めたダッシュページを作るが参考になりそうです。

でさっそく htmlファイルを作成してみました。Cacti が動いているローカルサーバのロードアベレージとメモリの状態。
cacti_dashboard01

これでいいかなと思ったのですが、動的にグラフを作成するため数が少ない時は問題なのですが、しょぼい自サーバでノード数が多くなるとリロード時に表示する数分グラフ作成が走るので、画面表示に時間がかかりすぎました。

じゃぁMRTGみたいにグラフのPNGファイルを作っておけばいいんじゃないと思い、5分ごとにグラフを作ることにしました。rrdtool のオプションとか全然知らないので、

  • グラフ表示右端歯車マークをクリック
  • 遷移した場面右端のスパナ(?)みたいなマークをクリック

で表示された RRDtool Command を参考にシェルを作成しました。--start とか --end とかはUNIXタイムで指定してあげる必要がありそうです。

シェルの中で指定することもできるんでしょうけど、自分のスキルでは力及ばず解決に至りませんでした。力業で perlスクリプトを作り、戻り値をセットすることで逃げました。

Cacti が 5分ごとに動いているので、グラフ作成用のシェルを Cactiが動いた後の1分後に動かすようにしました。1,6,11 ... 56 って指定するのが面倒なので調べてみたところ、

# cat /etc/cron.d/cacti
*/5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
1-56/5 * * * *  root    /root/script/makegraph.sh > /dev/null 2>&1

って書いてあげれば自分の要望を満たしてくれることが分かりました。こんな書き方もできるんですねぇ。

で、できたのが↓こちら。
cacti_dashboard02

15分平均はいらないので、最終的には次のようにしました。
cacti_dashboard03

個人的にはこれで満足できるレベル。メモリ使用状況が freeコマンドで表示される free の値が気に入らないので、次は標準で用意されているデータテンプレートとグラフテンプレートを使うのをやめ、自分用に一から作ってみることにします。(freeコマンドとfree値ではなく、availableの値を空き容量として表示させたい。かつ2Gと4Gに線を引いてみたい。)

2018年2月19日月曜日

Cacti 1.1.33 から 1.1.35 にアップグレードする

ブラウザが Chrome の場合はキャッシュクリアが必要なことが分かったので、1.1.33 から 1.1.35 にアップグレードしてみた。

んー、何の問題もなく完了。失敗は成功の母というが、まさにその通りですね。失敗した数だけ成長している! (のか?)

2018年2月18日日曜日

LED電球切れた...

LDA7L-H-V5
2012年7月3日にオーム社のLED電球を買い、2個ある片側を交換。

特に問題もなかったので、その年の暮れ(?)だったかにアイリスオーヤマの LDA7L-H-V5 を追加購入し、両方LED化しました。

オーム社のLEDにしなかったのは記憶にないのですが、おそらくアイリスオーヤマの方がモノが良いのではないかと判断した気がします。




ところが、本日後から買ったアイリスオーヤマの LED電球が切れてしまいました。当たりはずれはあるものの、自分の中ではアイリスオーヤマの株が下がりました...

CM-A40GL
代わりに買ったのが、近所のスーパーで安かったドウシシャのCMA40GL。518円税込みでした。

オーム社とドウシシャ、今度はどちらが先に切れるか? 5年半先行しているオーム社が切れるのが先だとは思いますが、その日がいつになるか?

2018年2月6日火曜日

Cacti のアップグレード失敗は ESXi が原因でした... (←ではない!)

もう一台仮想マシンを作成し、原因追及を使用と思った時のことでした。NIC は認識しているのにネットワーク接続ができない。接続中をチェックし、OKボタンをクリックするも再確認をするとチェックが外れている。なぜ?!

ESXi

そういえばメモリーリークで NIC を認識しても接続ができない BUG があったような... ちなみに使用している ESXi のバージョンは ESXi 5.1 Update 2 (5.1.0 1483097) で既知の不具合、本番環境はだいぶ前に ESXi 5.1 Express Patch 4 (5.1.0 1612806) に上げたことを思い出しましたよ。

本番環境に合わせてこちらもパッチを当てておけばよかったです... ssh で入る設定もしていないので、ログも見られず。でも多分当たり。(年末あたりからシステム入れ替え予定なので、検証用の ESXi はパッチを当てず運用予定。← いいのか?)

一人用検証環境(HP MicroServer メモリ6Gショボショボ環境)なので、仮想マシンをシャットダウンして ESXi を再起動。全ての問題は解決しました!

Cacti 1.1.33 のインストール設定も ok でした。バージョンアップしたときも、こちらが原因でうまく動いていないように見えたのかもしれませんね。

再起動前の変な環境でも、Chrome は×、Firefox だと〇だったので、ブラウザによるものかなと思ったりしたのですが、再起動後はどちらのブラウザでも問題ありませんでした。

2018/02/07 追記
 また Console → [Management] → Devices で snmp取得がぐるぐる回る現象が発生。Chrome のキャッシュを削除したら治った。おかしくなった(実はなっていない?!)ときは Chrome のキャッシュを削除するようにしよう。

 NIC が接続できなかったのは ESXi のBUGに起因するけど、Cacti の表示がおかしくなったのは Chromeのキャッシュで確定ですかね。別マシンから Chrome でアクセスすれば問題なかったし、問題のある端末でも Firefoxに変えたらOKだったので。

2018/02/19 追記
 アップグレード時に自分で

3.アップグレード確認の画面に遷移
 注意書きを一通り読む

と書いておきながら、全然読んでいませんねぇ。Chrome使っているならキャッシュをクリアしろって書いてあるじゃないですか... 謎が解けました!

2018年2月4日日曜日

Cacti 1.1.28 から 1.1.33 にアップグレードは失敗でした...

問題なく終了したと思ったのですが、なにかがうまくいっていなかったようです... グラフの更新とか問題なかったのでokだと思っていたのですが。

既存デバイスを consoleタブ → [Management] → Devices から選択(新規デバイスつ登録時も同じ)すると 1.1.28 はサクッと SNMP Information が表示されるのですが、1.1.33 ではぐるぐる回っているだけで待てども終了する兆し無し。

キャプチャするのを逃しましたが、SNMP のバージョンを v2 で指定しているのに、v3 の項目が表示されたりしてなにかがおかしくなっているようです。

1.1.28
capture_window-device-1.1.28

1.1.33
capture_window-device-1.1.33

スナップショットから戻しと思いましたが、okだと思い削除しており後の祭り状態。データ取り始めて数日なので、諦めて 1.1.33 で再構築することにしました。

phpファイルの上書きだけなので、yum のアップデートで特に問題になるとは思っていませんでした。ちょっと見通しが甘かったですね...

次回バージョンアップの機会で再チャレンジです。

2018/02/06 追記
 もしかしたら全然問題なくアップデートできていたのかもしれません。ESXi のメモリーリークが原因だったのかも。

2018/02/19 追記
 アップグレード時に自分で

3.アップグレード確認の画面に遷移
 注意書きを一通り読む

と書いておきながら、全然読んでいませんねぇ。Chrome使っているならキャッシュをクリアしろって書いてあるじゃないですか... 謎が解けました!

2018年2月1日木曜日

Cacti 1.1.28 から 1.1.33 にアップグレードする

設定も終わり、トラフィック監視もそれとなくできている今日この頃。月初になったので CentOS関連の更新があるかと思い確認したところ

[rot@cacti ~]$ sudo yum check-update
[sudo] A0gaku のパスワード:
読み込んだプラグイン:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00
epel/x86_64/metalink                                     | 7.7 kB     00:00
epel                                                     | 4.7 kB     00:00
extras                                                   | 3.4 kB     00:00
mariadb                                                  | 2.9 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/4): epel/x86_64/updateinfo                              | 879 kB   00:00
(2/4): extras/7/x86_64/primary_db                          | 166 kB   00:00
(3/4): epel/x86_64/primary_db                              | 6.2 MB   00:00
(4/4): updates/7/x86_64/primary_db                         | 6.0 MB   00:01
Loading mirror speeds from cached hostfile
  * base: ftp.riken.jp
  * epel: ftp.riken.jp
  * extras: ftp.riken.jp
  * updates: ftp.riken.jp

cacti.noarch                       1.1.33-1.el7                          epel
epel-release.noarch                7-11                                  epel
tzdata.noarch                      2018c-1.el7                           updates
yum.noarch                         3.4.3-154.el7.centos.1                updates

と Cacti 1.1.33 がリリースされていました。rpm は 1.1.28 の次に 1.1.33 でしたね。Changelog を見ると色々と更新されていました。先々のことを鑑み、アップグレードをしてみます。

アップグレードの方法ですが、次の方針で行うことにしました。

  1. cronを止める
    # vi /etc/cron.d/cacti
    先頭に '#' を入れ、cron を無効化
  2. ESXi に入れてあるのでスナップショットの作成
  3. yum で cacti のアップデート
    # yum update -y cacti
  4. spine のソースを落としコンパイル → インストールまで
  5. ブラウザで管理画面にログイン
    今回は設定の確認だけで、特に変更する箇所(赤字)はありませんでした
  6. cronを動かす
    # vi /etc/cron.d/cacti
    先頭の '#' を削除し、cron を有効化

特に問題もなくアップグレードができました。本当だったら DBのバックアップとか旧Cacti環境のバックアップが必要なんでしょうけど、ダメだったらスナップショットから戻す方針で作業を実施しました。

5分以内に完了しなかったので、ログが 1回分欠落しているけど許容範囲ということで。

終わってから気が付きましたが、項番4. の spine のインストールですが、make を完了し make install 待ちにしておくと時間短縮ができましたね... 項番5. のチェックで修正が入るとダメですけど。

---
2018/02/19 追記
 自分の場合、監視する台数も少ないんで spine → cmd.php に切り替えて、アップデート後のんびりと spine を入れてあげればいいですね。焦らなくていいので、こちらの方法がベストかも。
---

作業時の画面ショットはこんな感じ。

1.管理画面にアクセス
 Beginボタンをクリック
capture_window-upd1

2.パラメータチェックの画面に遷移
 赤字の項目は無し
capture_window-upd2

3.アップグレード確認の画面に遷移
 注意書きを一通り読む
capture_window-upd3

4.アップグレード成功の画面に遷移
 ダメだったら潔く(?)スナップショットから 1.1.28 の旧環境に戻す
capture_window-upd4

5.ログを確認してみる
 1回分ロスト、想定内
 ※14:40 の RRDsProcessed:60 になっているのは何だろう?
capture_window-upd_log


2018/02/04 追記
 グラフの更新がうまくいっているので問題ないと思っていましたが、実は失敗していました...

2018/02/06 追記
 問題無かったのかもしれません。ESXi のメモリーリークが原因でした。 

2018/02/19 追記
 
↑ メモリーリークは NIC が接続できないには関連していましたが、cacti のバージョンアップとは無関係の模様。

 アップグレード時に自分で

3.アップグレード確認の画面に遷移
 注意書きを一通り読む

と書いておきながら、全然読んでいませんねぇ。Chrome使っているならキャッシュをクリアしろって書いてあるじゃないですか... 謎が解けました!

2018年1月31日水曜日

Cacti 1.1.28 対象となる機器の登録

MRTGのときは手作業で対象となる機器の登録をしていましたが、Cacti は GUI から登録が可能です。数が多いとMRTGでは大変ですが、Cactiですとだいぶ楽になるかと。(/usr/share/cacti/cli 配下にphpのスクリプトがあるので、CLI から大量の機器も一括で登録できたりするのかな?)

新規登録ですが、

  1. consleタブ → [Management] → Device を選択します。
  2. 右側ペイン Devices 右端の +をクリックします。

右側ペインが Device [new] に変わりますので、必要な項目を入力していきます。必要項目は自分の場合ですと

  1. General Device Options の
    Description → 機器名を入力
    Hostname → IPアドレスを入力
    Device Template → Cisco Router or Generic SNMP device を選択
  2. SNMP Options の
    SNMP Community を入力

の計4か所、実際には SNMP Community は Settings で設定してありますので3か所を入力して画面右下の [Create] ボタンをクリックします。

SNMP Options の SNMP Community は [Configuration] → Settings → Devices Defaultsタブ → SNMP Defaults の Community を設定しておくと便利です。

Create ボタンをクリック後、画面右上に Create Graphs for this Device等々のリンクが表示されます。Create Graphs for this Device のリンクをクリックすると各ポートが表示されますので、

  1. 監視をしたいポートの右端□をチェック
  2. bps表示にしたいので、 Select a Graph Type to Create の In/Out Bits (64-bit Cpunters)を選択
    ※以降も同じ選択するのであれば、Set Defaultボタンをクリックしデフォルトに設定

で対象デバイスの対象ポートを追加することができます。VLAN とか PortChannel も表示されるのでとても便利!!

後は必要数分作業を繰り返します。

しばらくするとグラフができますので、graphsタブを選択し右側の山マークタブをクリックします。デフォルトですと登録した全てのグラフが表示されますので、選択表示をしたい場合はフィルターを使うと便利です。

graph

デフォルトのグラフは相対表示かつオートスケールになっています。上の図は一番帯域を使う機器のポートになります。

グラフのテンプレートをコピーし、変更して絶対表示にしたいと思ったのですがうまくいきませんでした...

とりあえず表示までできましたので、次はグラフの絶対表示とかデバイスのテンプレートの追加ができるようにしたいと思います。

2018年1月30日火曜日

Cacti 1.1.28 の設定

セットアップ完了後、設定しておいた方がいいと思う点の備忘録です。

consoleタブをクリックし、 [Configuration] の Settings をクリックします。

  • pathタブ
    Logging → Rotate the Cacti Log にチェック 自分は Weekly で 7世代
  • Devices Defaultsタブ
    SNMP Defaults の Community を設定
  • Pollerタブ
    Poller Type 最初は cmd.php、動作に問題が無かったら spine に変更
  • Authenticationタブ
    Local Account Complexity Requirements の Require Special Character チェックを外す (自分の場合は英数で設定にしました、記号は無し)

こんなとこですかね?

2018年1月29日月曜日

Cacti 1.1.28 でデータ保持期間の変更

console→ [Presets] Data Profiles → System Default  で値を変えたいのですが、setup終了後 [Management] の Devices と Graphs に Local Linux Machine が自動登録されているため、値を変えることができません。


新規に Data Profiles を作成してデフォルトのプロファイルにしてもよいのでしょうが、既存のSystem Default を変更することにします。

  1. [Management] → Graphs に登録されているものをすべて削除
  2. [Management] → Devices に登録されているものをすべて削除
  3. [Presets] Data Profiles → System Default  をクリック

右側ペインの Data Source Profile RRAs (Read Only) → Names に表示されている

  • Daily (5 Minute Average)
  • Weekly (30 Minute Average)
  • Monthly (2 Hour Average)
  • Yearly (1 Day Average)

をクリックし、Rows の値を変えます。

保持期間をどれくらいにするかですが、3年+α(去年、一昨年、一昨々年)もあれば十分かなと思い次のように変えました。

    旧     新
Daily     600 328320
Weekly     700   54720
Monthly     775   13680
Yearly     797    1140

値の算出は unixpower.netさんの CentOS7 Cactiのデータ取得間隔と保存期間を参考にしました。cron は 5分おきで動かしているので Hourly の設定はしていません。丸めは発生しますが、許容範囲とします。(Daily~Yearlyの値を1440日分で算出しました。)

デバイスを登録した後、データ保持期間を変更するのは非常に面倒です。まずはデータ保存の期間を決め、その後デバイスの登録をすることをお勧めします。

2018年1月19日金曜日

Cacti 1.1.28 だと思っていたら 1.1.27 だった...

spectre・meltdown で年初は忙しく、Cacti をいじっている暇がありませんでした。だいぶ落ち着いたので、暮からの作業を進めることにします。

yum で入れた Cacti ですが、1.1.28 だと思っていたら 1.1.27 でした... インストールしたとき、Cacti のホームページのリリースバージョンが 1.1.28 だったので、てっきりそのバージョンだと思い込んでいた。

久々にホームページを覗くと、1.1.31 がリリースされている。yum check-update をするものの、こちらは 1.1.28 が最新でした。ソースを落としてコンパイル→インストールでもいいのですが、基本的に rpm を使いたいので 1.1.28 で update。

  1. インストール先の Cactiサーバにアクセスすると、setup がデフォルトで走る。
  2. パラメータも 1.1.27 のままでは赤字で進まないので、推奨値+αを設定。
  3. upgadeボタンをクリックして完了。

Maria-DB も 10.1.29 から 10.1.30 に上がっていましたが、こちらはスルー。その打ち上げる予定ではありますが。