FIXER cloud.config Tech Blog
Type ScriptでAzureのLog Analyticsにカスタムログデータを送信する
2023年03月31日 10時00分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Type ScriptでLog Analyticsにカスタムログデータを送信する」を再編集したものです。
2022年新卒入社の西村です。
入社してもうすぐ1年経つのか……
お客様のインフラ基盤の構築やメタバースクラウドの自動化を中心にお仕事を遂行し、エンジニアとして力をつけ始めたと強く思う今日この頃、皆さまお元気でしょうか?
今回はType ScriptでAzure MonitorのLog Analyticsにカスタムログを送信する方法をご紹介したいと思います。
ドキュメントにJava Scriptのサンプルが存在しない…
「HTTP データ コレクター API を使用して Azure Monitor にログ データを送信する(プレビュー)」 ドキュメントを確認すると、
・Power Shell
・C#
・Python
・Java
のサンプルコードしか存在せず、Type Script(Java Script)のサンプルコードが掲載されていない…
Type Scriptでログ送りたいのに、送り方わからないじゃん!!!! っと叫びたくなったので、同士の皆様に知見を共有していきます。
Type ScriptでLog Analyticsにカスタムログデータを送信する
signatureの作成
import { Buffer } from "buffer"; import crypto from "crypto"; function buildSignature( customerId: string, sharedKey: string, rfc1123date: string, body: string ): string { const length = Buffer.byteLength(body); const binaryKey = Buffer.from(sharedKey, "base64"); const stringToSign = `POST\n${length}\napplication/json\nx-ms-date:${rfc1123date}\n/api/logs`; const hash = crypto .createHmac("sha256", binaryKey) .update(stringToSign, "utf8") .digest("base64"); const authorization = `SharedKey ${customerId}:${hash}`; return authorization; }
crypto.createHmacを使い、Log Analyticsの主キーをSHA-256にエンコードします。
HTTP データ コレクター APIにリクエスト
import axios from "axios"; import axiosRetry from 'axios-retry'; async function postData(customerId: string, sharedKey: string, body: string) { const rfc1123date = new Date().toUTCString(); const authorization = buildSignature( customerId, sharedKey, rfc1123date, body ); const logType = "<カスタムログのレコード名>"; const contentType = "application/json"; const uri = `https://${customerId}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01`; const headers = { headers: { "content-type": contentType, "Authorization": authorization, "Log-Type": logType, "x-ms-date": rfc1123date, }, }; axiosRetry(axios, { retries: 3, retryCondition: () => true, retryDelay: function (retryCount, error) { return retryCount * 1000; } }) await axios .post(uri, JSON.parse(body), headers) .then(function (response) { if (response.status >= 200 && response.status <= 299) { console.log("Accepted"); } else { console.log("Response code: ${response.status}"); } }) .catch(function (error) { console.log(error); }); }
axiosでhttpリクエストを行なっています。
(axios-retryはリトライ処理用のため、なくても大丈夫です)
まとめ
今回はType ScriptでLog Analyticsにカスタムのログを送る方法をお伝えしました。
プログラミング言語が違えど、やらなければいけないことは変わらないため、処理の工程を理解していれば簡単に書き換えることができました(普段ウェブフロント開発しないため、Type Scriptのお作法を理解するのに苦労はしましたw)。
本記事が少しでも誰かのためになれば幸いです。
以上、THE BACK HORNのラフレシアが最近のお気に入りの西村でした。
西村凌/FIXER
インフラエンジニア1年生
この連載の記事
-
TECH
メタバースのメリットは? 実際の活用事例から考えてみる -
TECH
法人向け「Microsoft Entra ID P2ライセンス」を個人で購入する方法 -
TECH
環境ごとに異なるTerraformのバックエンド設定を効率化、override.tfの使い方 -
TECH
Azure FunctionsとAzureのサービスを連携させる方法 -
TECH
PlaywrightをAzure Functionsにデプロイして動かす方法 -
TECH
Windows Admin Centerとは? ― 2020年代の新しい運用管理のカタチ -
TECH
Azureの管理コスト削減! リソースのタグ付けを自動化しよう -
TECH
Logic Appsでリソースのサブスクリプションを移動させる方法+注意点 -
TECH
生成AIで大注目のOpen InterpreterとAzure CLIを使ってリソースを自動作成してみた -
TECH
AzureのvCpuクォータ制限解除、爆速に改善されていて草 -
TECH
AzureのApplication Insightsでお手軽にお安く? HTTP監視しよう - この連載の一覧へ