LoginSignup
2
1

More than 1 year has passed since last update.

Cloud Functionsのエラー通知

Posted at

エラーに会いに行く

Cloud Functionsでエラー検知したいときありますよね。
その仕組みを今回作ります。

トピック作成

まずは、Pub/Sub→トピックから通知用の「トピック作成」をします。
コンボ開始です。

シンク作成

次にロギング→ログルーターでシンクを作成します。
名前と説明を決め、シンクの宛先で「Cloud Pub/Sub トピック」を選択します。
「シンクに含めるログの選択」で下記のように入力します。
タイミングはそこまでシビアではないので、落ち着いて入力してもらえればと思ってます。
内容はfunction_name以外はそのままでいいと思います。

resource.type="cloud_function"
resource.labels.function_name="SampleFunction"
severity>=ERROR

CloudFunctions作成

あとは、起き攻めよろしく、エラー通知用にトリガーのタイプを「Cloud Pub/Sub」にしたCloudFunctionsを作成します。
単純にSlack通知します。

// Package p contains a Pub/Sub Cloud Function.
package p

import (
	"context"
	"crypto/tls"
	"fmt"
	"log"
	"net/http"
	"net/url"
)

const WebHook = "Slack WebHook Url"

// PubSubMessage is the payload of a Pub/Sub event. Please refer to the docs for
// additional information regarding Pub/Sub events.
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// HelloPubSub consumes a Pub/Sub message.
func HelloPubSub(ctx context.Context, m PubSubMessage) error {
	err := slackNotify(WebHook, string(m.Data))
	if err != nil {
		log.Printf("err %v",err)
		return err
	}
	return nil
}

func slackNotify(webhook string, data string) error {
	payload := fmt.Sprintf("{'text': '<!channel> \n```%s```'}", data)
	values := url.Values{}
	values.Add("payload", payload)
	http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
	_, err := http.PostForm(webhook, values)
	if err != nil {
		return err
	}
	return nil
}

現場からは以上です。

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