Supported OS
![Mac OS]()
To find out if this integration is available in your organization, see your Datadog Integrations page or ask your organization administrator.
To initiate an exception request to enable this integration for your organization, email support@ddog-gov.com.
概要
このチェックは、一般に Wi-Fi と呼ばれる IEEE 802.11 規格に準拠した無線 LAN (WLAN) ネットワークを監視します。
主要な Wi-Fi メトリクスとして、タグとして付与される SSID#SSID) や BSSID) などのアクセス ポイント (AP) 情報、RSSI や Noise_and_Wireless_Signal_Strength) などの信号品質のテレメトリ、伝送レート、遷移回数 (例えば AP 間での Roaming や Swapping) などを収集します。これらのメトリクスは、過負荷状態のアクセス ポイントなどの無線ネットワーク全体の問題を早期に把握するのに役立つだけでなく、個々のホストでのネットワーク性能低下を事後に切り分ける際のトラブル シューティングにも有効です。
セットアップ
前提条件
Windows
Windows 11 24H2 (2024 年秋) 以降は、Wi-Fi アクセスと位置情報に関する API 動作の変更 に記載のとおり、Windows Wlan API を使用する WLAN チェックではユーザーまたは管理者の同意が必要です。ホストの Settings > Privacy & security > Location が有効になっていない場合、この WLAN チェックは WLAN/Wi-Fi テレメトリを報告できません。
以下の設定を有効にしてください。
- Settings > Privacy & security > Location > Location services
- Settings > Privacy & security > Location > Let desktop apps access your location
Location API が無効化されていないかは、netsh wlan show interface コマンドで確認できます。Location API が無効の場合、接続していても Wi-Fi インターフェイスの接続情報が表示されません。
管理者は、次の方法を使ってこれらの設定を有効化することもできます。
macOS
Windows と同様に macOS でも、Wi-Fi テレメトリを収集するには Location Services を通じたユーザーの同意が必要です。しかし Windows と異なり、macOS では Datadog Agent のような特定プロセスに対して位置情報へのアクセスを管理者が大規模に許可するための明確な仕組みが用意されていません。
回避策として、利用者は Appendix にある add_datadog_agent_to_plist.sh スクリプトを環境に合わせて調整し、Agent プロセスに位置情報アクセスを付与できます。このスクリプトは root 権限が必要で、Jamf などの MDM ソリューションを使えば、企業の Mac フリート全体に展開できます。
インストール
WLAN チェックは Datadog Agent に含まれていますが、初期状態では設定されていません。チェックを設定するには、次のセクションを参照してください。
設定
設定ファイルは Agent の構成ディレクトリ のルートにある conf.d/ フォルダ内の wlan.d/conf.yaml にあります。利用可能な設定オプションについては サンプル wlan.d/conf.yaml を参照してください。設定ファイルの編集が終わったら Agent の再起動 を行い、新しい設定を読み込みます。
タグ
このチェックは、送信するメトリクスに SSID、BSSID、MAC アドレス、Wi-Fi タイプ (A, B, G, N, AC)、Wi-Fi 認証方式 (Open, WEP, WPA, WPA2, WPA3) を自動でタグとして付与します。詳しくは タグの利用開始 を参照してください。タグ値に含まれる大文字は小文字に置換され、特殊文字はアンダースコアに置換されます。
検証
Agent の status サブコマンドを実行 し、Checks セクションに wlan が表示されていることを確認します。
収集データ
メトリクス
| |
|---|
system.wlan.channel_swap_events (count) | The number of times the Wi-Fi channel used by the device changes |
system.wlan.noise (gauge) | The noise measurement (dBm) for the interface |
system.wlan.roaming_events (count) | The number of times a device switched between different access points within the same network |
system.wlan.rssi (gauge) | The received signal strength indication (RSSI) measurement (dBm) for the interface |
system.wlan.rxrate (gauge) | The receive rate/max bandwith (Mbps) for the interface Shown as mebibyte |
system.wlan.txrate (gauge) | The transmit rate/max bandwith (Mbps) for the interface Shown as mebibyte |
イベント
WLAN にはイベントは含まれません。
用語
ローミング
Roaming は、端末が移動しても接続を切らさずに、ある Wi-Fi アクセス ポイントから別のアクセス ポイントへスムーズに切り替える機能を指します。端末が別のアクセス ポイントでより強い、またはより信頼性の高い信号を検出し、インターネット アクセスを継続する際に発生します。接続中のルーターまたは AP の BSSID が変わっても SSID が同じままの場合に Roaming イベントとして検出されます。ルーターまたは AP の SSID がブロードキャストされていない場合はローミングの検出はできません。Roaming イベントを検出すると、system.wlan.roaming_events メトリクスがインクリメントされます。SSID が異なるルーターへ切り替わった場合は Roaming には該当しません。
チャネル スワップ
Channel Swap は、ルーターまたはアクセス ポイントが電波を送信する際に使用している Wi-Fi チャネルを変更する処理を指します。信号強度の改善、干渉の低減、パフォーマンスの最適化を目的として、特に競合する Wi-Fi ネットワークが多い環境で行われます。接続中のルーターまたはアクセス ポイントの BSSID が同じまま、チャネルだけが変更された場合に Channel Swap イベントとして検出されます。接続先の BSSID が変わった場合 (アクセス ポイントの SSID が同じなら Roaming イベントになります) は、チャネルも変わっていても Channel Swap イベントには該当しません。
トラブル シューティング
ご不明な点は、Datadog のサポートチームまでお問合せください。
付録
add_datadog_agent_to_plist.sh
#!/usr/bin/env bash
# Datadog Agent 用に `locationd/clients.plist` の Authorized キーを追加 / 更新するスクリプト (root 権限が必要)
# 使用方法: bash add_datadaog_agent_to_plist.sh [AGENT_BIN_PATH]
# AGENT_BIN_PATH: 任意 - Agent バイナリ パス (デフォルト: /opt/datadog-agent/bin/agent/agent)
# 設定
PLIST_PATH="/var/db/locationd/clients.plist"
DEFAULT_PATTERN="/opt/datadog-agent/bin/agent/agent"
BACKUP_PATH="${PLIST_PATH}.bak"
# 何か問題が起きた場合にバックアップを復元する関数
restore_backup() {
echo "[ERROR] バックアップを復元しています..."
sudo cp "$BACKUP_PATH" "$PLIST_PATH"
sudo plutil -convert binary1 "$PLIST_PATH"
echo "[INFO] バックアップを復元しました。終了します。"
exit 1
}
# エラー ハンドリングを設定
trap restore_backup ERR
# 引数が指定されているか確認
if [ -n "$1" ]; then
PATTERN="$1"
echo "[INFO] CLI 引数で指定されたパターンを使用します: $PATTERN"
else
# 検索するパターンを入力
read -p "検索するパターンを入力してください [${DEFAULT_PATTERN}]: " PATTERN
PATTERN=${PATTERN:-$DEFAULT_PATTERN}
fi
# 元のファイルをバックアップ
echo "[INFO] $PLIST_PATH を $BACKUP_PATH にバックアップします"
sudo cp "$PLIST_PATH" "$BACKUP_PATH"
# 解析しやすいように plist を XML に変換
sudo plutil -convert xml1 "$PLIST_PATH"
echo "[INFO] 次を含むエントリを検索します: $PATTERN"
# パターンを含むブロックの最初のキーを見つける (xargs で前後の空白を削除)
KEY_LINE=$(grep "$PATTERN" "$PLIST_PATH" | grep "<key>" | head -n1 | xargs)
if [ -z "$KEY_LINE" ]; then
echo "[ERROR] 次のパターンを含むエントリが見つかりません: $PATTERN"
restore_backup
fi
# 行からキーを抽出
KEY=${KEY_LINE#<key>}
KEY=${KEY%</key>}
if [ -z "$KEY" ]; then
echo "[ERROR] 一致するエントリのキーを特定できませんでした。"
restore_backup
fi
echo "[INFO] キーを処理します: $KEY"
# <key>$KEY</key> を含む行番号を取得
key_line=$(grep -n "<key>$KEY</key>" "$PLIST_PATH" | cut -d: -f1 | head -n1)
if [ -z "$key_line" ]; then
echo "[ERROR] キーが見つかりません。"
restore_backup
fi
# キーの次にある <dict> の行番号を取得
dict_start=$(tail -n +$((key_line + 1)) "$PLIST_PATH" | grep -n "<dict>" | head -n1 | cut -d: -f1)
dict_start=$((key_line + dict_start))
# 対応する </dict> の行番号を取得
dict_end=$(tail -n +$((dict_start + 1)) "$PLIST_PATH" | grep -n "</dict>" | head -n1 | cut -d: -f1)
dict_end=$((dict_start + dict_end))
echo "[INFO] ブロックを検出しました (行 $dict_start 〜 $dict_end)"
# ブロック内に <key>Authorized</key> があるか確認
auth_line=$(sed -n "${dict_start},${dict_end}p" "$PLIST_PATH" | grep -n "<key>Authorized</key>" | cut -d: -f1)
if [ -z "$auth_line" ]; then
# <key>Authorized</key> が見つからない場合は </dict> の直前に追加
echo "[INFO] ブロックに <key>Authorized</key><true/> を追加します"
sed -i "" "${dict_end}i\\
<key>Authorized</key>\\
<true/>\\
" "$PLIST_PATH"
else
# <key>Authorized</key> が見つかった場合は、次の行で値を確認
auth_line=$((dict_start + auth_line - 1))
value_line=$((auth_line + 1))
# 次の行に <false/> が含まれているか確認
if grep -q "<false/>" <(sed -n "${value_line}p" "$PLIST_PATH"); then
echo "[INFO] <false/> を <true/> に変更します"
sed -i "" "${value_line}s/<false\/>/<true\/>/" "$PLIST_PATH"
else
echo "[INFO] <key>Authorized</key> は既に正しい値で存在します"
fi
fi
# システム用に plist をバイナリに戻す
sudo plutil -convert binary1 "$PLIST_PATH"
echo "[INFO] 変更を適用しました。"
echo "[INFO] 変更を反映するには、再起動するか、次を実行してください: sudo killall locationd"
trap - ERR