だいたい次のような3つのステップを踏むことになります。
◯ 広告
簡単な 需要予測ツール を作りました。MRTGログを貼り付けるだけで逼迫が想定される日を自動で計算してくれます。ちなみに MRTG のログは mrtg_page.html を mrtg_page.log にすると取得できます。
Step1. Web サーバを起動
Web サーバを起動して MRTG が log や html ファイルを保存するためのディレクトリを用意します。
Step1-1. Web サーバ起動
「Apacheは、El Capitanではインストール済みです。」だそうです。
$ httpd -v $ sudo /usr/sbin/apachectl start
Step2. SNMP デーモンを移動する。
設定ファイル snmpd.conf を修正して SNMP デーモンを起動します。
Step2-1. snmpd.conf を取る。
たぶん、失敗します。sudo 使ってるのにファッ!?って思ったのですが...
$ sudo mv /etc/snmp/snmpd.conf /usr/share/snmp mv: rename /etc/snmp/snmpd.conf to /usr/share/snmp/snmpd.conf: Operation not permitted
Step2-2. System Integrity Protection を無効にする
Step3-1. OSX起動時に
System Integrity Protectionを無効にする方法Command + R
を押しっぱなしにしてRecovery OSを起動する。
Step3-2. そのあと、Terminalを起動してcsrutil disable
を実行すればよい。
$ sudo mv /etc/snmp/snmpd.conf /usr/share/snmp
? 読み込み先は /usr/share/snmp/snmpd.conf って決まってるのかな
Step2-3. コミュニティ名を修正
sudo vi /usr/share/snmp/snmpd.conf
でコミュニティ名を修正
# sec.name source community # 修正前 # com2sec local localhost COMMUNITY # com2sec mynetwork NETWORK/24 COMMUNITY # 修正後 com2sec local localhost mycomunity com2sec mynetwork 127.0.0.1/24 mycomunity
?コミュニティってなんだったっけ
Step2-4. SNMP デーモンを起動させて、その起動を確認する。
$ snmpwalk -v2c -c mycomunity localhost Timeout: No Response from localhost $ # SNMP デーモンが起動していません。 $ # SNMP デーモンを起動させます。 $ sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist $ snmpwalk -v2c -c mycomunity localhost SNMPv2-MIB::sysDescr.0 = STRING ... 長大な文字列 ... $ # SNMP デーモンの起動が確認できました。
?launchctl load -w じゃないコマンドは
Step3. MRTG をインストール
設定ファイル /usr/local/mrtg/mrtg.cfg を作成して mrtg コマンドを実行します。
Step3-1. MRTG をインストール
brew install mrtg
Step3-2. cfgmaker で MRTG の config を作成
$ # 1) MRTG の設定を保存するためのディレクトリを作成 $ mkdir /usr/local/mrtg $ $ # 2) MRTG の config を自動生成 $ cfgmaker --output=/usr/local/mrtg/mrtg.cfg mycomunity@127.0.0.1 --base: Get Device Info on mycomunity@127.0.0.1: --base: Vendor Id: Unknown Vendor - 1.3.6.1.4.1.8072.3.2.255 --base: Populating confcache --base: Get Interface Info --base: Walking ifIndex ...
Step3-3. SNMP_Session.pm の line 149, 604 を修正
もし以下のようなエラーが発生したら...(エラーが出力されても基本的な config は出力してくれるので、さして問題ではなさそうですが...。)
$ cfgmaker --ifref=descr --ifdesc=descr mycommunity@127.0.0.1 Subroutine SNMP_Session::pack_sockaddr_in6 redefined at /System/Library/Perl/5.18/Exporter.pm line 66. at /usr/local/bin/../lib/mrtg2/SNMP_Session.pm line 149. Subroutine SNMP_Session::unpack_sockaddr_in6 redefined at /System/Library/Perl/5.18/Exporter.pm line 66. at /usr/local/bin/../lib/mrtg2/SNMP_Session.pm line 149. Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at /System/Library/Perl/5.18/Exporter.pm line 66. at /usr/local/bin/../lib/mrtg2/SNMP_Session.pm line 604. Subroutine SNMPv1_Session::unpack_sockaddr_in6 redefined at /System/Library/Perl/5.18/Exporter.pm line 66. at /usr/local/bin/../lib/mrtg2/SNMP_Session.pm line 604. --base: Get Device Info on mycommunity@127.0.0.1 ...
vi /usr/local/bin/../lib/mrtg2/SNMP_Session.pm
で以下の様に編集
# line 149 # 変更前 # Socket6->import(qw(pack_sockaddr_in6 inet_pton getaddrinfo unpack_sockaddr_in6)); # 変更後 Socket6->import(qw(inet_pton getaddrinfo)); ... 中略 ... # line 604 # 変更前 # Socket6->import(qw(pack_sockaddr_in6 inet_pton getaddrinfo unpack_sockaddr_in6)); # 変更後 Socket6->import(qw(inet_pton getaddrinfo));
Step3-4. mrtg.cfg を修正してログファイル等の保存先を指定する。
vi /usr/local/mrtg/mrtg.cfg
としてファイルを編集します。以下の1行を追記してください。html ファイルや log ファイルが保存されます。mrtg
コマンド実行後に確認すると log ファイルや html ファイルが保存されているのを確認することができます。
WorkDir: /Library/WebServer/Documents/mrtg
Step3-5. mrtg コマンドを実行
mrtg /usr/local/mrtg/mrtg.cfg
Step3-6. crontab に登録
*/5 * * * * /usr/local/bin/mrtg /usr/local/mrtg/mrtg.cfg
crontab は絶対パスで登録してくださいねってことらしいです...。
http://qiita.com/ryusukefuda/items/878556158d8f1d3d887a
Step3-7. indexmaker
indexmaker /usr/local/mrtg/mrtg.cfg > /Library/WebServer/Documents/mrtg/index.html
詰まったところ
① snmpwalk -v2c -c comu_name localhost を実行してもタイムアウト
原因 1) プロセスが起動していない
$ # 1) プロセスがないことを確認 $ ps ax | grep snmpd 780 s000 R+ 0:00.00 grep snmpd $ $ # 2) つぎのコマンドを実行し、MacのSNMPを有効にします。 $ sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist $ $ # プロセスが起動していることを確認 $ ps ax | grep snmpd 696 ?? Ss 0:02.34 snmpd -f 780 s000 R+ 0:00.00 grep snmpd
原因2) firewallの設定
/etc/hosts.allow は自分で作らない限りは、無いはずなのでこちらが原因になることはないと思いますが。
/etc/hosts.allowの、"All : ALL : deny"を一時的にコメントしてみた。
$ sudo vi /etc/hosts.allow All : 192.168.0.2 : allow All : 192.168.0.11 : allow All : 192.168.0.12 : allow #All : ALL : deny
② crontab を設定しても全然更新されない。
コマンドを実行してみるとエラーが返される。
$ mrtg /usr/local/mrtg/mrtg.cfg 2012-11-11 18:30:45: ERROR: Creating templock /usr/local/mrtg/mrtg.cfg_l_860: Permission denied at /opt/local/bin/mrtg line 1968.
どうも一時ファイルを作成しようとするも権限がなくて蹴られている。乱暴だけど権限を付与して解決。
sudo chmod -R 777 /usr/local/mrtg/
③ indexmaker 周り
1) vi
cfgファイルを触る時は、文字コードを指定して。
文字化けします。
(Linux)viで文字コードを指定してテキストファイルを開く : 3流プログラマのメモ書き
vi -c ":e ++enc=euc-jp" index.html
2) indexmaker 起動時のオプションでも、文字コード指定
でも、index.html を直接さわって削除しないと行けない。
--addhead="<META HTTP-E QUIV=\"Content-Type\" CONTENT=\"text/html; charset=euc-jp\">"
sed で編集もできない様子。
$ sed -e "s/charset=iso-8859-15/charset=euc-jp/" /Library/WebServer/Documents/mrtg/localhost/index.html RE error: illegal byte sequence
ただし、環境変数をいじると、上手く行く様子。まだやっていない。
そのまま、Terminal でいじればいいのかな?
MacのデスクトップをGeekToolでカスタマイズ - ソフトウェアエンジニアのブログ
LANG=C NOLOCALE=1
現在の環境変数を確認してから、実行したほうが良さそう。
ただ、何も設定されてない様子(´・ω・`)?
linuxやるブログ LANG 変数
$ echo $LANG $ #応答無し
おとなしく vi の置換機能を使うのが早いかな。
:%s/charset=iso-8859-15/charset=euc-jp
SNMPコマンドを試し打ち
$ snmpwalk -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10 IF-MIB::ifInOctets.1 = Counter32: 146477277 IF-MIB::ifInOctets.2 = Counter32: 0 IF-MIB::ifInOctets.3 = Counter32: 0 IF-MIB::ifInOctets.4 = Counter32: 0 IF-MIB::ifInOctets.5 = Counter32: 662048654 IF-MIB::ifInOctets.6 = Counter32: 0 IF-MIB::ifInOctets.7 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.1 IF-MIB::ifInOctets.1 = Counter32: 146480169 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.2 IF-MIB::ifInOctets.2 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.3 IF-MIB::ifInOctets.3 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.4 IF-MIB::ifInOctets.4 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.5 IF-MIB::ifInOctets.5 = Counter32: 662049026 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.6 IF-MIB::ifInOctets.6 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.7 IF-MIB::ifInOctets.7 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.10.8 IF-MIB::ifInOctets.8 = Counter32: 0 $ $ snmpwalk -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16 IF-MIB::ifOutOctets.1 = Counter32: 146484542 IF-MIB::ifOutOctets.2 = Counter32: 0 IF-MIB::ifOutOctets.3 = Counter32: 0 IF-MIB::ifOutOctets.4 = Counter32: 0 IF-MIB::ifOutOctets.5 = Counter32: 54206934 IF-MIB::ifOutOctets.6 = Counter32: 346 IF-MIB::ifOutOctets.7 = Counter32: 0 IF-MIB::ifOutOctets.8 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.1 IF-MIB::ifOutOctets.1 = Counter32: 146488115 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.2 IF-MIB::ifOutOctets.2 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.3 IF-MIB::ifOutOctets.3 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.4 IF-MIB::ifOutOctets.4 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.5 IF-MIB::ifOutOctets.5 = Counter32: 54206934 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.6 IF-MIB::ifOutOctets.6 = Counter32: 346 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.7 IF-MIB::ifOutOctets.7 = Counter32: 0 $ snmpget -v 2c -c mycommunity localhost 1.3.6.1.2.1.2.2.1.16.8 IF-MIB::ifOutOctets.8 = Counter32: 0