はじめまして、デジタル創作サークル UniProject でインフラをいじいじしているあかつきゆいとです。
はじめに
Grafana Lokiなるものを運用し始め、Cloudflare の監査ログも取りたいなと思い、作ってみました。
Loki とは
Loki とは、Grafana が提供している、すべてのアプリケーションやインフラのログを保存したり解析したりできるツールです。
データを送るには
データを送るにはいろいろな方法がありますが、今回は普通に HTTP POST で Loki の API に送信しました。1
POST /loki/api/v1/push
{
"streams": [
{
"stream": {
"label": "value"
},
"values": [
["<unix epoch in nanoseconds>", "<log line>"],
["<unix epoch in nanoseconds>", "<log line>"]
]
}
]
}
Workers をデプロイする
リポジトリについて
こちらの GitHub リポにすべてのコードを集約しています。
ご参照ください。
Loki の情報を環境変数に入れる
さて、クローンしていただいたであろうところで、Loki の情報を環境変数に設定します。
ホスト名は、ドメイン部分のみで OK です。
また、https で通してあります。
BASIC 認証がある場合は、その USER:PASS も入力が必要です。
wrangler secret put LOKI_HOST # Loki API Hostname
# If your loki is required auth
wrangler secret set LOKI_USER # Loki Username
wrangler secret set LOKI_PASS # Loki Password
Cloudflare の情報を環境設定に入れる
API トークンはダッシュボードから、[アカウントの管理] > [アカウント API トークン]から取得できます。
この API トークンには、アカウント設定の読み取り権限が必要です。
wrangler secret put CF_TOKEN
あとは、ダッシュボードの URL にある、アカウント ID を取得します。
このxxxxxxxxxの部分
https://dash.cloudflare.com/xxxxxxxxxxxxxxxxxxxxxxx
wrangler secret put CF_ACCOUNT
これで準備は整いました。
デプロイする
下記コマンドを実行してデプロイしましょう。
wrangler publish src/index.js
確認してみる
こんな感じで監査ログが流れてきているかと思います。
これで終わりです。
お疲れ様でした!
(参考) なぜ LogPush じゃないのか
LogPush は何やら Free プランじゃ使えなようなので、仕方なく LogPush はやめました。
普通に API から落としてくるだけでも十分ですね。
完全なリアルタイムではないものの、5 分おきに fetch しておけば、そこそこいいかなという印象です。
(他にも Workers を使っている方は制限に引っかかるかもしれませんが...)