クラウドの監視・管理サービスについて、第3弾。
ログ管理サービスPapertrailについてまとめます。
※下記は、2013年8月末時点の情報です。
(2013.9.9追記)
「ログの転送は、Syslog UDPで行います。ログの内容が平文で送信され~」と書きましたが、Papertrailには、TLS over TCPでログを転送するオプション機能が用意されていましたので、追記・修正しました。
Papertrailの機能
Papertrailは、ログ管理サービスです。
https://papertrailapp.com/
- ログを管理したいサーバーのrsyslogの転送設定を行うことにより、Papertrailのサーバーにログを集約します。
- ログの転送は、Syslog UDPで行います。
- ログの内容が平文で送信され、また、UDPプロトコルを使用しログを再送しないため、ログデータの取りこぼしが発生する可能性があることに注意する必要があります。
- オプションとして、TLSを使用して暗号化してTCPで送信する機能も用意されています。
- 転送されたログは、tail形式で表示されます。サーバー上にログが書き出されてからPapertrailに表示されるまでは、(僕が試す限り)10秒以内です。
- 時間帯やクエリー文字列を指定した検索機能や、検索条件の保存機能、特定の文字列が出現した際にアラート通知する機能などが用意されています。
- ログに含まれる日本語文字列の表示や、日本語による検索が可能です。
- 特定の文字列を含むログを受信時に除去するFilter機能があります。文字列は正規表現で指定できます。
- サーバーをグルーピングして表示することができます。
- ログを検索できる期間は無料プランで2日、有料プランでも最大で2週間ですが、アーカイブしたログをPapertrailに保存し、ダウンロードすることができます。
- ログを検索できる期間より古いログは、AWS Elastic MapReduce環境でHadoop / Hiveを組み合わせて検索する機能が用意されています。https://help.papertrailapp.com/kb/analytics/log-analytics-with-hadoop-and-hive/
- アーカイブしたログをユーザーが所有するAmazon S3バケットに保存することにより、ログの保存期間を無期限にすることができます。https://help.papertrailapp.com/kb/how-it-works/permanent-log-archives
ログ表示画面。
tail -fでログを垂れ流し表示しているイメージです。
日本語のログメッセージを検索したとき。
問題なく検索、表示できます。
デフォルトでは全サーバーのすべてのログが表示されますが、グルーピングしたサーバー群のみの表示、特定のサーバーのみの表示、特定の検索文字列を指定した表示など、柔軟な表示が可能です。
アラート通知設定画面。
検索条件ごとに、アラートの通知先Emailアドレス、アラートを通知する条件(期間とアラートメッセージ)を指定できます。
この例では、1分間に3回、’authentication failure’ を含むログが出現したとき、alert@example.com にアラートメールを送信します。
Papertrailの料金
https://papertrailapp.com/plans
- 無料のFreeプランでは、ログ容量について1ヶ月100MBまで、ログの参照期間について直近2日分まで、ログのアーカイブについて直近7日分まで使用可能です。
- $7/月のプランでは、ログ容量について1ヶ月1GBまで、ログの参照期間について直近1週間分まで、ログのアーカイブについて直近1年間まで使用可能です。
- ログ容量が各プランの上限に達したときは、Papertrail側でログの処理を停止します。
- プランをUpgradeするとログの処理が復旧します。
- 有料プランでは、1GBあたり20%の価格増で自動的にログ容量を増やす機能が用意されています。https://help.papertrailapp.com/kb/how-it-works/usage-and-payment
- ログを転送するサーバー数の制限はありません。
Papertrailの設定(Redhat系OSの場合)
まず、PapertrailのサイトでSign Upします。
ログイン後、「Add your first system」へ進むと、下記のようにログの転送先ホスト名とポート番号が表示されます。
logs.papertrailapp.com:<ポート番号>
※iptablesなどファイアウォールでOutboundのアクセス制限を行っている場合は、UDP/<ポート番号> への許可ルールを追加する必要があります。
サーバー側でのログ転送設定は、rsyslogのConfig /etc/rsyslog.conf で行います。
これは、rsyslogでログ集約サーバーにログを転送する場合と同じですね。
/var/log/messages, /var/log/secure, /var/log/cron など、syslogを転送する場合は、末尾に下記の1行を追記します。
# vi /etc/rsyslog.conf -- 末尾 *.* @logs.papertrailapp.com:<ポート番号>; --
任意のログも転送する場合は、上記で追加した転送先設定より前に、下記のように追記します。
$ModLoad imfile ... $InputFileName <ログファイル名> $InputFileTag <タグ名> $InputFileStateFile <ログ書き込み情報ファイル名> $InputFileSeverity <ログレベル> $InputRunFileMonitor ... $InputFilePollInterval 10
例えば、Apacheのアクセスログ、エラーログを転送する場合は、下記のように記述します。
-- $ModLoad imfile ... # Apache Access Log $InputFileName /var/log/httpd/access_log $InputFileTag apache-access: $InputFileStateFile stat-apache-access $InputFileSeverity info $InputRunFileMonitor # Apache Error Log $InputFileName /var/log/httpd/error_log $InputFileTag apache-error: $InputFileStateFile stat-apache-error $InputFileSeverity info $InputRunFileMonitor ... $InputFilePollInterval 10 --
設定後、rsyslogを再起動します。
# /etc/init.d/ryslog restart
Papertrail TLS over TCPの設定
https://help.papertrailapp.com/kb/configuration/encrypting-remote-syslog-with-tls-ssl#rsyslog
Papertrailには、ログ転送時の機密性、信頼性を高めるため、TLSで暗号化し、TCPで転送する機能が用意されています。
※TLSで暗号化しないSyslog TCP通信については、SupportにContactをとってほしい、とのことです。https://help.papertrailapp.com/kb/configuration/troubleshooting-remote-syslog-reachability
TLS over TCPによるログ転送設定手順は下記のとおりです。
(前述のSyslog UDPによるログ転送設定が完了していることを前提とします。)
・Papertrailの証明書を設置
https://papertrailapp.com/tools/syslog.papertrail.crt
をダウンロードし、/etc/syslog.papertrail.crt として設置します。
以下、rootユーザー権限で実行します。
# wget https://papertrailapp.com/tools/syslog.papertrail.crt \ -O /etc/syslog.papertrail.crt # chmod 644 /etc/syslog.papertrail.crt
・ファイアウォールやiptablesの設定
TCP/<ポート番号> へのOutboundアクセスを許可するルールを追加します。
・必要なパッケージをインストール
rsyslogのTLSプロトコルサポートパッケージをインストールします。
# yum -y install rsyslog-gnutls
・rsyslogの設定
WorkDirectoryを指定する行のコメントアウトを外します。
/etc/rsyslog.conf の末尾のログ転送先設定を変更します。
@logs.papertrailapp.com を @@logs.papertrailapp.com に変更することで、UDPからTCPに変更します。
また、ログ転送先設の手前に、TLS設定とキュー制御設定を追記します。
キュー制御設定はログ転送エラーを考慮したもので、詳細については以下を参照してください。https://help.papertrailapp.com/kb/configuration/advanced-unix-logging-tips#rsyslog_queue
# vi /etc/rsyslog.conf -- 変更前 #$WorkDirectory /var/lib/rsyslog # where to place spool files ... *.* @logs.papertrailapp.com:<ポート番号> -- -- 変更後 $WorkDirectory /var/lib/rsyslog # where to place spool files ... $DefaultNetstreamDriverCAFile /etc/syslog.papertrail.crt $ActionSendStreamDriver gtls $ActionSendStreamDriverMode 1 $ActionSendStreamDriverAuthMode x509/name ... $ActionResumeInterval 10 $ActionQueueSize 100000 $ActionQueueDiscardMark 97500 $ActionQueueHighWaterMark 80000 $ActionQueueType LinkedList $ActionQueueFileName papertrailqueue $ActionQueueCheckpointInterval 100 $ActionQueueMaxDiskSpace 2g $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on $ActionQueueTimeoutEnqueue 10 $ActionQueueDiscardSeverity 0 ... *.* @@logs.papertrailapp.com:<ポート番号> --
rsyslogを再起動します。
# /etc/init.d/rsyslog restart
/var/log/messages を参照してエラーが発生していないことを確認します。
# less /var/log/messages
下記のようなメッセージが表示されたときは、rsyslog-gnutls パッケージがないことを意味します。
Sep 13 12:00:00 hostname rsyslogd-2066: could not load module '/lib64/rsyslog/lmnsd_gtls.so', dlopen: /lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: No such file or directory [try http://www.rsyslog.com/e/2066 ]
また、下記のようなメッセージが表示されたときは、WorkDirectory が正しく指定されていないことを意味します。
Sep 13 12:00:00 hostname rsyslogd-2036: error starting up disk queue, using pure in-memory mode [try http://www.rsyslog.com/e/2036 ]
Papertrail導入時の注意点
- ログの内容が平文でインターネットを経由してPapertrailのサーバーに送信されるので、個人情報、機密情報を書き込んでいるログの転送には注意しましょう。
- UDPプロトコルを使用ログを再送しないため、ログデータの取りこぼしが発生する可能性があります。
- ログ転送時の機密性、信頼性が必要な場合は、TLS over TCPでログを転送するとよいでしょう。
- 任意のログの転送設定を行った場合、すべてのログが/var/log/messagesに記録されます。ログローテートの設定でサーバー上でのログ保存期間を短くするとよいでしょう。
- Papertrailでログ保存容量が料金プランにより限られているため、ヘルスチェックのアクセスなど保存しなくてもよいログは、Papertrailに転送しないようログファイルを分けてしまうか、Papertrail側でブロックする文字列として設定するとよいです。
- AWSなどネットワーク課金があるサービスの場合、ログ転送により若干費用がかかります。
ログ集約とPapertrailの長所
複数台のサーバーのログを一箇所に集約するために、ログサーバーを用意してrsyslogでログを収集するケースも多いと思います。
その場合、ログサーバーの設置、ログサーバーの冗長化、大容量のログを保存するためのログサーバーのディスクサイズ、収集したログデータのバックアップなどを考慮する必要があります。
Papertrailを使えば、簡単な設定でこれらの問題をクリアできます。
また、Amazon S3へのログアーカイブ機能を使用すれば、容量の上限を気にせずに半永久的にログを保存できますし、ログ保存に要する費用を抑えることができます。
各サーバーのログ保存も1週間分など必要最小限にすれば、サーバーのディスク容量も小さくて済み、これもコスト削減につながります。
※Amazon S3の料金は、東京リージョンで $0.100 /GB/月なので、100GBでも月1,000円ぐらいです。
Pingdom, New Relicと同様、Papertrailも無料で使用開始できるので、ログ集約にお悩みの方は試してみるとよいと思います。
ログ管理サービスLogglyについて
Papertrailと同じようなログ管理サービスとしては、Logglyがありますので少し触れておきます。
https://www.loggly.com/
Logglyの、Papertrailとの相違点をまとめます。
- 日本語の表示、検索ができない。
- アラート通知を行うには、AlertBirdsという別サービスを使用する必要がある。
- tail -f形式の表示ができない(もしかすると方法があるかもしれない。)。
- Syslogでログを転送する場合、初回接続時にデバイス認証のHTTP POSTメソッドを送信する必要がある(これがけっこう面倒)。
- サーバーで出力されたログがLogglyで表示されるまで、Papertrailよりも遅い(1分程度など)。
- 無料プランでログを検索できる期間はPapertrailよりも長い(1週間)。
- Syslog UDPのほか、Syslog TCP, HTTP(S)でのログ転送が可能。
日本人が使う場合、日本語が使えないのは痛いと思います。
ただし、Logglyはこの9月に大幅なアップデートを行ったGen2をリリースしました。
上記のような短所のいくつかは改善されたかもしれません。
Loggly Gen2に触れるようになり、大きな機能改善があればまたここで紹介したいと思います。
※Logglyの既存ユーザーがGen2にアップグレードするには、指定された時間帯に指定されたURLをクリックする必要があるのですが、その時間帯が日本時間では夜中や早朝なので、なかなかアップグレードできません。そういう点でも、アジア圏のユーザーはあまり重要視していないのかもしれません。