注意事項
- Webhookのタイムアウトなどは一切考慮しておりません
- このため重要なサービスにおけるエラーログの収集はご注意ください
- またこのスクリプトのライセンスはNYSL( http://www.kmonos.net/nysl/ )となります
- よってこのスクリプトを利用することによって生じた損害等について、作者は一切の責任を負いません
使い方
- bash, curlおよびjqパッケージを利用します
- 標準出力にてテキストを渡すことでSlackに通知します
echo "なんかログ" | ./send_slack_channel.sh
スクリプト内にWebhook URLおよび書き込み対象のチャンネル等を各自変更してください。
ユーザ名はデフォルトサーバホスト名(hostname)
また書き込むテキストの先頭にはサーバにおける時刻を埋め込むように設定しております。
Slack通知の遅延やサーバ時刻のズレなどがあった場合を考慮して時間を埋め込んでます
#!/bin/bash
TEXT=$(cat -)
WEBHOOK_URL='***Webhook URL***'
CHANNEL='server-logs'
USERNAME="$(hostname)"
TEXT_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S %Z')] "
if [ "${TEXT}" == "" ]; then
#echo "text is empty."
exit 0
fi
MESSAGE="{\"channel\": \"#${CHANNEL}\", \"username\": \"${HOSTNAME}\", \"text\": \"${TEXT_PREFIX}\"}"
RESULT=$(echo $MESSAGE \
| jq ".text += \"${TEXT}\"" \
| curl -s -X POST \
--data-binary @- \
${WEBHOOK_URL})
if [ "${RESULT}" != "ok" ]; then
echo ${RESULT}
exit 1
fi
exit 0
感想
crontabで普段メール通知が来るところをSlackにすることでログが追いやすくなった
postfix等メール設定をせずともログ送信ができるのは便利である