Slackのattachmentsとは
下記の記事でもご説明されていますが、要はSlack上のメッセージを見やすくしてくれるものということです。
見にくいってどんな感じ?
担当してるシステムでエラーが発生してログが吐かれるとき、毎度ログファイルを見るのがめんど(y・・・だったので、もうエラーが起きてるんだったらすぐ確認できるところに飛ばしてくれ
ってことで、Slackへ飛ばすようにしたのですが、 のように、 メッセージ内容が長いと「Show more」が出て一目で全体を確認できない感じになるんです・・・
あ、ちなみにSlackへのログの送信については下記を利用しました。
これだと、エラーログ飛んできても中身見るために、全てのShow moreをクリックして確認しなければならず、
はっきり言って見づらい!!!
本番でエラー起きた時に、これで復旧にその分時間かかっちゃう
これじゃダメだ・・・ってことで、Slackのattachmentsの使い方をもう少しちゃんと調べました。
Slack attachmentでは、パラメータの中に fields
という項目があり、1つのattachment内で表示するメッセージを項目毎に整形することができることがわかりました。
上記エラーログを見てもわかるとおり、エラーログに出力している内容は、この fields
パラメータを利用して、項目毎にわけることができそうだということで、
ログへのメッセージの送信を下記のように変更しました。
$msg_content = "送信メッセージ内容";
+ $fields = [
+ ['title' => 'HOST', 'value' => $host, 'short' => true]
+ ,['title' => 'URI', 'value' => $_uri_seg, 'short' => true]
+ ,['title' => 'TIME', 'value' => $dateTime, 'short' => true]
+ ,['title' => 'USER_INFO', 'value' => $_user_id.' '.$_user_name, 'short' => true]
+ ,['title' => 'APP_INFO', 'value' => $_app_id.' '.$_app_name, 'short' => true]
+ ,['title' => 'MESSAGE', 'value' => $msg, 'short' => false]
+ ];
// Required. The message body. 10,000 characters max.
$msg_slack = ($notify === true ? '@here: ' : '') . PHP_EOL;
try {
// Instantiate without defaults
$client = new \Maknz\Slack\Client($hook_url);
$client->setLinkNames($notify);
$client->setUnfurlLinks(true);
$client->setUnfurlMedia(true);
$client->to($channel)->attach([
'fallback' => $msg_slack,
'text' => $msg_slack,
'color' => $color,
+ 'fields' => $fields
])->send('');
} catch (Exception $e) {
}
こう変更することで、HOST,URI,TIME,MESSAGEなど全てが fields
として送信されることとなります。
結果、Slackへのログの送信結果は、こう変わりました
メッセージ内容はぼかしていますが、かなり長いメッセージでも「Show more」は出なくなり、エラーの内容の確認がめちゃくちゃ楽になりました
これで 開発もしやすい、本番障害時のエラーログの確認 も捗りますね
意外と困っている方いらっしゃるんじゃないでしょうか みなさんの開発の助けにでもなれば幸いです
もっとこうすると良くなるよー!といったコメントもお待ちしています。