wrapによるバッチ処理のロギングと監視このエントリーは、7/27に開催される技術書博覧会で販売する「Mackrelではじめるお手軽Webサービス監視」の「バッチ処理のロギングと監視」の章のアップデート内容です。wrapによるバッチ処理のロギングと監視このエントリーでは、シェルスクリプトによるバッチ処理において、OSが提供する枠組みの中で運用に必要な仕組みを作り込み、Mackerelでの監視に組み込む方法について述べます。動作環境とし、bashのインタープリターが/bin/bashであるものとして記述を行っています。コマンドは、コマンドが失敗(非ゼロで終了)した場合にMackerel上にアラートを発生させます。mkrは、mackerel向けのコマンドラインツールです。mackerel-agentの提供されているpackageレポジトリーから、yumやaptコマンド等でインストールすることができます。オプションを付与していないシェルスクリプトには、個々のコマンド実行ごとにエラーハンドリングが必要です。実行時エラーを補足できるようにします。wrapコマンドを使用することにより、-eオプションを使用して、エラー発生時にコマンドの実行を打ち切った場合にも、エラーの発生をハンドリングすることができます。ロギングとスタックトレースログについては、loggerコマンドを使用してsyslogに集約します。シェルスクリプトにはスタックトレースという機能が存在しませんが、-xオプションの出力を標準エラー出力で補足してエラー発生時にログ出力することで、処理をトレース可能にします。pg_basebackupコマンドによりバックアップを行うバッチ処理の例です。次のスクリプトがメイン処理の実装です。complete"処理内の出力は全て標準出力ないし標準エラー出力に出力します。スクリプト内で-eと-uオプションをエラー処理のために設定しています。-xオプションでスクリプトのトレースができるようにしています。echoコマンドによる標準出力への出力は、ログメッセージとして使用しています。wrapコマンドの引数に実行するコマンドを記述します。${PIPESTATUS[0]}スクリプトの標準出力及び標準エラー出力は全てloggerにパイプします。コマンドの実行をパイプしているため、コマンド実行時のステータスはloggerコマンドの終了ステータス(通常0)です。wrapコマンドに反映するため、bashのPIPESTATUSを使用して、最初に実行したコマンドのステータスを返せるようにします。インストールされます。環境変数PATHを設定します。dash環境でのパイプ処理の記述DebianやUbuntuなど、デフォルトのインタープリターがdashでありbashでない環境では、PIPESTATUSが使用できません。wrapコマンドに反映できるようにします。デフォルト設定では出力の取りこぼしが発生します。0上記の設定を行うと、次のようにログが出力されます。下の画面イメージは、スクリプトの実行に失敗している場合のMackerel上におけるのアラートの様子です。*1:当日購入された方にもこの内容のペーパーをお渡しします。月別アーカイブはてなブログをはじめよう!setoazusaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。