LoginSignup
3
1

More than 5 years have passed since last update.

ElasticBeanstalkアプリケーションのエラーログをTypetalkに流したかったときの作業ログ

Posted at

Typetalk使いに向けてざっくりとのこしておく

前提

  • ElasticBeanstalkアプリケーションがデプロイ済み
  • Serverless Frameworkもインストール済み
  • Golang及びDepもインストール済み

1. ElasticBeanstalkのCloudWatch ログストリーミングを有効にした

マネジメントコンソールから対象のEnvironmentを開き、 設定 > ソフトウェア設定 を開く

ログのストリーミングを有効にして適用する

スクリーンショット 2018-01-30 15.36.19.png

CloudWatchにログストリームが作成され、Environmentで出力されたログが送信されてくる
スクリーンショット 2018-01-30 15.36.36.png

2. CloudWatchログをTypetalkにPOSTする関数をつくって登録した

せっかくなのでちょっと前にサポートされた go と serverless frameworkで
ありがたいテンプレートを使った 感謝

    sls create -u https://github.com/serverless/serverless-golang/-p goserverless

そしてありがたいライブラリを使う
aws-lambda-go-eventはめんどくさいStructの定義をしてくれてる感謝
go-typetalkも面倒なPOST部分を簡単にかける感謝

    import(
        "github.com/aws/aws-lambda-go/lambda"
        "github.com/nulab/go-typetalk/typetalk"
        "github.com/eawsy/aws-lambda-go-event/service/lambda/runtime/event/cloudwatchlogsevt"
    )

適当にメッセージを組み立ててPOSTする部分を実装 かんたん

    messages := make([]string, len(event.Records))
    for i, record := range event.Records {
       messages[i] = record.LogEvent.Message
    }

    // TypetalkのPOSTサイズ上限があるので長い分は抜く
    r := []rune(strings.Join(messages, "\n"))
    message := fmt.Sprintf("```\n%s\n```", string(r[0:3900]))

    // 追いかけやすいように便利なまとめ機能にもいれる
    options := typetalk.PostMessageOptions{}
    options.TalkIds = []int{talkId}

    client := typetalk.NewClient(nil).SetTypetalkToken(token)

    client.Messages.PostMessage(ctx, topicId, message, &options)

ビルドしてAWSにデプロイ

    sls deploy

3. CloudWatchログをLambda関数へストリーミングさせた

ここからLambdaサービスへのストリーミング開始を選んで設定

スクリーンショット 2018-01-30 15.36.58.png

Lambda 関数 : さっきデプロイした関数
ログ形式 : とりあえずその他

4. TypetalkにログがPOSTされた

ストリーミングが開始されると、Lambda関数が実行され、Typetalkにアプリケーションのログが流れた

実際に動かしているものはもう少し小細工してあるけど、そこらへんを簡潔にしてコードを置いたのでTypetalk使い達の参考になれば。
https://github.com/katsut/typetalk-awslogs

流すだけならわりとかんたんにできた

3
1
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
3
1