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
データ分析を楽しみながら学ぼう! Microsoft Fabricコミュニティとは -
TECH
Logic Appsでリソースのサブスクリプションを移動させる方法+注意点 -
TECH
Azureの管理コスト削減! リソースのタグ付けを自動化しよう -
TECH
Windows Admin Centerとは? ― 2020年代の新しい運用管理のカタチ -
TECH
PlaywrightをAzure Functionsにデプロイして動かす方法 -
TECH
Azure FunctionsとAzureのサービスを連携させる方法 -
TECH
環境ごとに異なるTerraformのバックエンド設定を効率化、override.tfの使い方 -
TECH
法人向け「Microsoft Entra ID P2ライセンス」を個人で購入する方法 -
TECH
通常2万円が無料! 「Microsoft Fabric」のMCP資格(DP-600)を受験しよう【2024年末まで!】 -
TECH
生成AIで大注目のOpen InterpreterとAzure CLIを使ってリソースを自動作成してみた -
TECH
私の推しは「Azure Bicep」、Microsoft公式のIaCツールを使っていこう! - この連載の一覧へ


