post Image
GoでSlackへ通知してみた

状況整理

やりたいこと

  • システムのアラートやチケットトラッカーの通知をSlackに集約したい。

現状

  • 社内のSlackに通知できるものが少しずつ増えてきた
  • 社内のSlackのメンバーも増えてきた

現状イメージ

notice.001.png

問題

  • SlackのIncoming WebHooksが増え続けて面倒だ
  • 毎回Incoming WebHooksを登録するのは面倒だ

変えたいイメージ

notice.002.png

こんな時Slackに通知が欲しい

  • Datadogで特定のメトリックが閾値超えた
  • サーバサイドが503吐いた
  • 定期バッチでこけた
  • 本番サーバにrootで入られた。
    などなど、ほぼリアルタイムで検知したい。

やってみた。

API Gatewayを作り、SlackのIncoming WebHooksに流す

notice.003.png

ついでにAPIキーを使ってアクセス制限もかけてみる。

notice.004.png

cURLで投げてみる。

curl -H 'x-api-key:[API_GATEWAY_KEY]' --data-urlencode 'payload={"channel": "#miyasue", "username": "きちゅね", "text": "テスト。", "icon_emoji": ":kityune:"}' https://[API_GATEWAY].execute-api.ap-northeast-1.amazonaws.com/prod

届いた。

notice.005.png
無事届いた。

ついでにGoで飛ばしてみたい

  • Goは書いた事ない。
  • Goを選んだのはクロスコンパイルに強いと聞いたから。(いろんな環境から手軽にSlack通知できるんじゃない?)
  • 環境構築からビルドするまでそれほど時間はかからなかった。
  • 実際にWin用とMac用にコンパイルしてみたが、上手く動いた。
package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "os"
)

func main() {
    if len(os.Args) != 5 {
        fmt.Println("引数: 本文 ユーザ名 チャンネル名 絵文字")
        os.Exit(1)
    }

    apiUrl := "https://[API_GATEWAY].execute-api.ap-northeast-1.amazonaws.com/"
    resource := "/prod"

    u, _ := url.ParseRequestURI(apiUrl)
    u.Path = resource
    urlStr := fmt.Sprintf("%v", u)

    payload := "{'text':'" +os.Args[1]+ "', 'username':'" +os.Args[2]+ "', 'channel':'" +os.Args[3]+ "', 'icon_emoji':'" +os.Args[4]+ "'}"
    data := url.Values{}
    data.Set("payload", payload)

    client := &http.Client{}
    r, _ := http.NewRequest("POST", urlStr, bytes.NewBufferString(data.Encode()))
    r.Header.Add("x-api-key", "[API_GATEWAY_KEY]")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    defer resp.Body.Close()
    contents, _ := ioutil.ReadAll(resp.Body)

    fmt.Printf("result: %s\n", contents)
}

テスト

./notice "Goからテスト" "きちゅねかわいい" "#miyasue" ":kityune:"

notice.006.png

無事届いた。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。