社内でfluentdについての勉強会を開催しました

社内向け勉強会でfluentdについて紹介したので、その際の資料を公開します。

非常に基本的な内容だけなので、利用されたことが有る方にはあまり有益な情報がないですが、
参考になればとおもいます。

実際にfluentd→mongoDB→node.jsという流れでログをチェックできるWebアプリも作成してみました。
これはまだ試作段階なので公開していませんが、
fluentdのおかげでこんなアプリもとても簡単に作成できました。
JSONデータとして管理できるのはかなりのメリットだと感じました。

未インストールのパッケージに含まれるファイル一覧を確認する方法(CentOS)

ふと思いだせなかったので
CentOSであればrpmの-qplオプションを指定することで未インストールパッケージ一覧を見ることが可能です。

rpm -qpl xxx.rpm

但し、これで見ようとするとrpmパッケージを手元にダウンロードしておく必要あります。

そこで、まずyumrpmパッケージをインストールせずダウンロードだけしておきます。

ダウンロードのみを実行するためには、yum-downloadonlyパッケージを予めインストールしておく必要があります。
(CentOS6以降だとyum-plugin-downloadonlyという名前のパッケージに変わっているようです。)

$ yum install yum-downloadonly

以降、yum installコマンドのオプションとして--downloadonlyオプションが利用可能になる。

$ yum install --downloadonly パッケージ名

ダウンロードしたrpmパッケージは/var/cache/yum以下に配置されています。
yum insatll --downloadonly --downloaddir=/tmp パッケージ名
とすることで指定したところにダウンロードすることも可能です。

例えば、mongodb-serverをepelリポジトリからダウンロードした場合は以下のようなところに配置されています。

$ ls /var/cache/yum/epel/packages/mongodb-server-1.6.4-1.el5.x86_64.rpm 
/var/cache/yum/epel/packages/mongodb-server-1.6.4-1.el5.x86_64.rpm

ディレクトリ指定した場合はこのようになります

$ yum install --downloadonly --downloaddir=/tmp mongodb-server
$ ls /tmp/mongodb-server-1.6.4-1.el5.x86_64.rpm 
/tmp/mongodb-server-1.6.4-1.el5.x86_64.rpm

あとはrpmコマンドでファイル一覧を確認すればOKです。

$ rpm -qpl /tmp/mongodb-server-1.6.4-1.el5.x86_64.rpm 
/etc/logrotate.d/mongodb
/etc/mongodb.conf
/etc/rc.d/init.d/mongod
/usr/bin/mongod
/usr/bin/mongos
/usr/com/mongodb
/usr/share/man/man1/mongod.1.gz
/usr/share/man/man1/mongos.1.gz
/var/log/mongodb
/var/run/mongodb

これでインストールを実施する前にどういう形でファイルが配置されるかを確認しておくことが可能になります。

逆に、あるファイルがどのパッケージに含まれているかを確認するためにはrpmコマンドで以下のように実施すればOKです。

$ rpm -qf /usr/bin/mongod
mongodb-server-1.6.4-1.el5

Zabbix用Chrome Extension『Chromix』公開しました

Zabbixのトリガー確認用 Chrome ExtensionChromix - Chrome Web Storeを公開しました。

いちいちZabbixの管理画面を見ることなく、障害が発生した情報をキャッチできます。
機能はかなり絞っているのであまり使い所がないかもしれませんが、
複数のZabbix Serverを立てて運用している場合など便利になるかもしれません。
お試し下さい。

個人的にjQueryHTML5、CSS3などの技術の勉強のために作ったものなので、
まだまだ出来はよくないですが、何かの役に立てばと思っています。

使い方

事前作業

このアプリは、Zabbix APIを使ってアクセスするので、
Zabbix1.8系を利用の方は、Zabbix Serverの管理画面から、アクセスしたいユーザを「API access」グループに所属させ、APIアクセス権限を付与して下さい。
Zabbix1.9以上を利用の方は必要ありません。

Zabbix APIの詳細についてはこちらを参照(http://tech-sketch.jp/2012/04/zabbix-api1.html)

インストール

Chrome Web StoreからChromixをインストールして下さい。

Zabbix Server情報登録

最初はZabbix Serverの情報が登録されていないので、
バー上のアイコンをクリックしてポップアップを表示し、
右上の「Add Zabbix」をクリックしてZabbix Serverの情報を登録して下さい。

URLの欄はZabbixのトップページのURL(http://はつけないで下さい)を、
ID、Passwordの欄は事前作業で設定したアカウントの情報を登録して下さい。
(Zabbix Serverとの接続に失敗した場合はバー上のアイコンが赤色に変更になります。)

トリガー確認

上記設定が完了すると、自動的に現在「障害」の状態のトリガー情報一覧が表示されます。
(最大で最新の100件しか表示されないためご注意下さい)

バックグラウンド処理

ポップアップ表示でトリガーの内容を確認する以外に、
バックグラウンドでトリガーの発生個数をカウントしています。
前回ポップアップ表示で確認して以降に発生したトリガーの数をカウントしているため、
一度、ポップアップ表示するとカウント数が変更されます。

オプション画面

このようにオプションの画面からデスクトップ通知のOn Offを設定できます。
また、バックグラウンドでトリガーの発生を確認する周期と、ポップアップの表示時間についてもオプション画面から設定可能です。
特に指定していない場合は、20秒に一回トリガーの発生を確認し、障害が発生した場合は20秒間デスクトップ通知を行います。

デスクトップ通知

動作確認済み

Zabbixバージョン
1.8.3,1.8.4,1.9.8.2.0.0rc2

Chrome
19.0.1084.41 beta-m

第5回Zabbix勉強会に登壇しました

クラウドとオンプレミスの環境の統合管理をZabbixで」というテーマで話してきました。

この取り組みは昨年度から行なっており、まだまだ開発途中ではあるのですが、
実際に運用を行われていたり、Zabbixを活用されている方の生の声を聞きたくて発表しました。
「自分が取り組んでいる内容が本当に正しい方向で進めれているのだろうか?」
など、長期に渡って取り組み続けていると疑問に思うことがよくあります。

そういうのを確かめる意味でも発表の機会をいただけたこと大変感謝しています。
@kodai74さんありがとうございます。


発表内容はslideshareにアップしています。
http://www.slideshare.net/ikedai/zabbix2012-05-12fix

デモはちょっとうまくいかなかったですが、
なんとなく雰囲気が伝わったかなと思います。
(デモ動画をあらかじめ用意しておいてよかったw)


皆さんの反応を見ていると、やはり同じような管理上の問題を抱えている方が沢山いらっしゃるんだと感じました。
ひとまず、公開できるよう作りこんでいきたいと思います。


http://togetter.com/li/302229
ここの内容もチェックして、今後の開発の参考にさせていただきます。


懇親会も楽しかったです。
@sechiroさんのざびたんをはじめ、楽しい内容のものばかりでとても刺激になりました。
Twitterなどネット上だけで知っていた人とも沢山お会いでき、名刺交換も今までにないぐらい行えました。

外の方と交流して、その分野に詳しい人と話すのは非常に勉強になりますね。


スタッフの皆様お疲れ様でした!

ThinkITさんにZabbix2.0について寄稿しました

すでにご存知の方も多いかと思いますが、
ThinkITさんにZabbix2.0の記事を寄稿いたしました。

4月13日に第1回目の記事(http://thinkit.co.jp/story/2012/04/13/3504)が公開され、
本日無事最終回である第4回目の記事(http://thinkit.co.jp/story/2012/05/11/3541)が公開されました。

初めての社外メディアへの寄稿だったため、どれぐらいの方に読んでもらえるか心配でしたが、
いくつかはてブをしていただいたりTwitterなどでレスポンスいただいたりと、読んでもらえたのかと思っています。

Zabbixは2年程前から利用を始め、
その使いやすさと柔軟性の高さから興味を持ち、
使い続けて来ました。

使い続けることでZabbixに少しずつ詳しくなり、
こうして執筆記事として寄稿できたことが自分にとって非常にいい経験になりました。

Zabbixに限らず、技術はじっくり興味を持って接し続けていくことで見えてくることもあると感じました。

これからも色んな情報を展開していきたいと思います。

Google Apps Scriptでスプレッドシートを操作してみる

とあるタスク管理用にGoogleスプレッドシートを利用しています。
スプレッドシートの利用時に、毎週行う作業が発生するので、
手運用は面倒だなということで、
Google Apps Scriptを利用してみることにしました。

行いたいことの情報としては以下の3点
1. 毎週月曜日に行いたい作業である
2. 「テンプレート」という名前のシートの「A1」欄に作業日の日付を入力(2012/04/12のような形式で)
3. 日付を変更した「テンプレート」をコピーして新たなシート(シート名は作業日の日付)を1枚作成する

この3つを実現するため、以下のようなスクリプトを作成しました。

function weeklyTask() {
  var SPREADSHEET_ID = 'スプレッドシートID';
  var SHEET_NAME = 'テンプレート';
  ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  sheet = ss.getSheetByName(SHEET_NAME);
  sheet.getRange('A1').setValue(getToday());
  sheet.copyTo(ss).setName(getToday());
}

function getToday(){
  var nowdate = new Date();
  var year = nowdate.getFullYear(); // 年 
  var mon  = nowdate.getMonth() + 1; // 月 
  var day = nowdate.getDate(); // 日
  return(year + '/' + mon + '/' + day);
}

SpreadsheetApp.openById(SPREADSHEET_ID);
これで、どのスプレッドシートかを指定しています。
スプレッドシートIDとは、スプレッドシートを開いているURLのkeyの値を確認して下さい。
(例:https://docs.google.com/spreadsheet/ccc?key=abcdefg#gid=3 これだと、IDは「abcdefg」です)

ss.getSheetByName(SHEET_NAME);
この部分で、シートの名前を指定してどのシートに対して操作するかを指示しています。
今回の場合は「テンプレート」という名前を指定しています。

sheet.getRange('A1').setValue(getToday());
sheet.getRangeの引数で指定したA1の欄に対して今日の日付をセットしています。

sheet.copyTo(ss).setName(getToday());
copyTo()というのが、シートコピーを実行する関数で、コピーしたシートの名前をsetNameで指定しています。

これで2,3の作業が実現できます。

最後に、1の毎週月曜日に行うという指定を、
「Script editor」→「リソース」→「すべてのトリガー」
という順に進んでトリガーの追加を行うことで実現します。

図で示したように時間をドリブンで関数(weeklyTask)を実行することができます。

このように非常に簡単に作業を自動化することができます。
ちなみに、自動処理が失敗した場合にメールで通知してくれるNotificationの機能もあります。

オープンソースソースカンファレンス2012 Tokyo/Spring参加レポート

3/16(金) 明星大学で実施されたOSC2012に参加してきました。
今回は初日だけの参加です。

今まではセッションを聴講する側での参加だったのですが、
今回初めてZABBIX-JPコミュニティの運営スタッフとして、展示ブースでお手伝いしてきました。
手伝いといっても、これといって何もできなかったですが、
ブースに来られた方にZabbix2.0の内容などの紹介をしたり、質問に答えたりするといったサポートをしてきました。

ZABBIX-JPコミュニティの中の方々と話しているだけで参考になる情報をたくさんお聞きすることができ、勉強になりました。

以下、合間に参加したセッションの聴講メモです。

クラウド開発運用のコラボレーション手法 DevOpsをオープンソースで ~Crowbarの紹介~

デル株式会社 増月氏

パブリッククラウドプライベートクラウド、ハイブリッドクラウド
いろいろなクラウドが出てくる中、
一人あたりサーバの管理台数も非常に多くなってきている。
イントラネットであれば1人当たり100台規模。
インターネット上を見れば1人当たり1000台規模の管理などさまざま。

パブリッククラウドなどハイパースケールな環境の場合、
HWの故障は当たり前、
小さいコストの積み重ねが全体で見ると非常に膨大なコストにつながる
フラットな設計原則に従って設計することで
管理コストが減らせる

デルはソフトウェアの分野にも投資を始めている

クラウドの導入・運用に有効なcrowbarを開発

運用管理者と開発者間には壁があった

運用管理者:安定稼働が重要
開発者:新機能が重要

必要なことは、更新サイクルをできるだけ短くすることで、
新しくすることによるリスクを軽減しながら進めること。
このためにも出来る限り自動的にバージョンアップできたり、構築できるような仕組みが必要

crowbarはそれを実現する。
基本的にはChef上に実装。
パッケージの配布や設定等はChefで実行。
BIOS周りの設定などChefでできないところをcrowbarでカバー。
NagiosやGangliaとの連携も可能。

大規模環境の監視をスマートに!クラウド環境やスマホもOK OSS統合監視ツール PandoraFMS

株式会社アールワークス佐藤氏

perlphpで開発
監視実行する本体はperl、Web画面はphpで実装されているスペイン発のOSS統合監視ツール。
コミッタ:24人(うち、日本人が3名)

エージェントはLinuxWindows向けの他、
Android携帯や組み込み機器向けもある

負荷分散、冗長化にも対応した構成がとれる

携帯向け管理画面もあり(参照のみ)

PandoraFMSの実装

ポーリング監視に加えてソフトウェアエージェントからのデータプッシュ型監視もあり(Zabbix Agentのアクティブ監視のような形)
起動時にエージェントからプッシュでサーバに通知。
IPアドレスが変化する対象機器の監視が可能(Android携帯など)

ソフトウェアエージェントから送られるデータはxml形式
xml形式で送ることができればカスタマイズしたデータでもサーバ側で取り込めるので応用が効く

冗長化・負荷分散

監視サーバを横に並べるだけで冗長化・負荷分散可能
DBを起点として全ての監視サーバが自動連携。
(この点はZabbixとかにはない機能でいい感じの機能な気がする)
1台ダウンすると、そこで監視していた監視項目を均等に自動的に残りのサーバに振り分け

プッシュ通信の場合
サーバを複数設定しておき、失敗したら別のサーバにプッシュするような設定が可能

このままだとDBがシングルポイントになりかねない
この点についてはDB側の機能を使って回避

大規模環境の設定

Webコンソールを複数のサーバで立ち上げることも可能
WebUIでは、一括設定機能あり
エージェントからのpush通信による自動検出(Zabbixの自動登録機能みたいなイメージ)
ポーリングによる自動検出も可能(Zabbixのディスカバリ)

その他

Android端末の監視を実施して、
GoogleマップOpenStreetMapと連携して移動軌跡のトレースが可能

xmlの中に緯度経度を入れてPandoraFMSに通知することで居場所を知らせることが可能

2012/09にメジャーバージョン5.0にバージョンアップ予定
NetFlow対応
アラートで祝日の動作定義が可能(祝日ならどこの連絡先に通知など)
グラフ描画がFlashからHTML5

Web監視はエンタープライズ
その他にも、エンタープライズ版でしかできない機能がいくつかあるので使用時には注意が必要