LoginSignup
2
5

More than 5 years have passed since last update.

サーバ上の標準出力をSlackに通知したい時のシェルスクリプト(メモ)

Last updated at Posted at 2018-02-23

注意事項

  • 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等メール設定をせずともログ送信ができるのは便利である

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5