influxdb
時系列データを効率的に保存・分析するために、InfluxDBのバケット設定、データ保持ポリシー構築、Fluxクエリ作成、データダウンサンプリングタスク設定、ダッシュボード構築などを支援するSkill。
📜 元の英語説明(参考)
Set up and manage InfluxDB for time-series data storage, querying, and analysis. Use when a user needs to configure InfluxDB buckets, write Flux queries, set up retention policies, create tasks for data downsampling, or build dashboards for time-series metrics.
🇯🇵 日本人クリエイター向け解説
時系列データを効率的に保存・分析するために、InfluxDBのバケット設定、データ保持ポリシー構築、Fluxクエリ作成、データダウンサンプリングタスク設定、ダッシュボード構築などを支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o influxdb.zip https://jpskill.com/download/15008.zip && unzip -o influxdb.zip && rm influxdb.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15008.zip -OutFile "$d\influxdb.zip"; Expand-Archive "$d\influxdb.zip" -DestinationPath $d -Force; ri "$d\influxdb.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
influxdb.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
influxdbフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
InfluxDB
概要
時系列データストレージと分析のために InfluxDB を構成します。バケット管理、Flux クエリ、保持ポリシー、ダウンサンプリングタスク、およびメトリクスの取り込みと取得のための API の使用法について説明します。
手順
タスク A: 初期設定と構成
# Docker を使用して InfluxDB をデプロイする
docker run -d --name influxdb \
-p 8086:8086 \
-v influxdb_data:/var/lib/influxdb2 \
-v influxdb_config:/etc/influxdb2 \
-e DOCKER_INFLUXDB_INIT_MODE=setup \
-e DOCKER_INFLUXDB_INIT_USERNAME=admin \
-e DOCKER_INFLUXDB_INIT_PASSWORD=changeme123 \
-e DOCKER_INFLUXDB_INIT_ORG=myorg \
-e DOCKER_INFLUXDB_INIT_BUCKET=metrics \
-e DOCKER_INFLUXDB_INIT_RETENTION=30d \
influxdb:2.7
# /etc/influxdb2/config.toml — InfluxDB の構成
bolt-path = "/var/lib/influxdb2/influxd.bolt"
engine-path = "/var/lib/influxdb2/engine"
[http]
bind-address = ":8086"
flux-enabled = true
[storage-cache]
snapshot-memory-size = 26214400
max-concurrent-compactions = 2
[logging]
level = "info"
format = "auto"
タスク B: バケットとトークンの管理
# CLI 経由でバケットを作成する
influx bucket create \
--name infrastructure \
--retention 30d \
--org myorg
influx bucket create \
--name app-metrics \
--retention 90d \
--org myorg
influx bucket create \
--name downsampled \
--retention 365d \
--org myorg
# Telegraf 用のスコープ付き API トークンを作成する
influx auth create \
--org myorg \
--description "Telegraf write token" \
--write-bucket infrastructure \
--write-bucket app-metrics
# Grafana 用の読み取り専用トークンを作成する
influx auth create \
--org myorg \
--description "Grafana read token" \
--read-bucket infrastructure \
--read-bucket app-metrics \
--read-bucket downsampled
タスク C: API 経由でのデータの書き込み
# ラインプロトコルを使用してメトリクスを書き込む
curl -X POST "http://localhost:8086/api/v2/write?org=myorg&bucket=app-metrics&precision=s" \
-H "Authorization: Token ${INFLUX_TOKEN}" \
-H "Content-Type: text/plain" \
--data-binary '
http_requests,service=api-gateway,method=GET,status=200 count=1523,latency_ms=45.2 1708300800
http_requests,service=api-gateway,method=POST,status=201 count=234,latency_ms=120.5 1708300800
http_requests,service=payment,method=POST,status=500 count=3,latency_ms=5020.0 1708300800
queue_depth,service=order-processor queue_size=142,consumers=5 1708300800
'
タスク D: Flux クエリ
// クエリ: 過去 1 時間の CPU 使用率、ホストごとにグループ化
from(bucket: "infrastructure")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_percent" and r.cpu == "cpu-total")
|> aggregateWindow(every: 5m, fn: mean)
|> yield(name: "cpu_usage")
// クエリ: 過去 24 時間のエラー数による上位 5 つのサービス
from(bucket: "app-metrics")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "http_requests" and r.status =~ /^5/)
|> group(columns: ["service"])
|> sum(column: "_value")
|> sort(columns: ["_value"], desc: true)
|> limit(n: 5)
// クエリ: サービスごとのエラー率のパーセンテージを計算する
errors = from(bucket: "app-metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "count" and r.status =~ /^5/)
|> group(columns: ["service"])
|> sum()
total = from(bucket: "app-metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "count")
|> group(columns: ["service"])
|> sum()
join(tables: {errors: errors, total: total}, on: ["service"])
|> map(fn: (r) => ({ r with error_rate: (r._value_errors / r._value_total) * 100.0 }))
// クエリ: 移動平均を使用した P95 レイテンシ
from(bucket: "app-metrics")
|> range(start: -6h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "latency_ms")
|> aggregateWindow(every: 5m, fn: (tables=<-, column) =>
tables |> quantile(q: 0.95, column: column))
|> movingAverage(n: 6)
タスク E: ダウンサンプリングタスク
// タスク: インフラストラクチャメトリクスを 1 時間ごとにダウンサンプリングする
option task = {name: "downsample-infra", every: 1h, offset: 5m}
from(bucket: "infrastructure")
|> range(start: -task.every)
|> filter(fn: (r) => r._measurement == "cpu" or r._measurement == "mem" or r._measurement == "disk")
|> aggregateWindow(every: 1h, fn: mean)
|> to(bucket: "downsampled", org: "myorg")
# CLI 経由でタスクを作成する
influx task create --org myorg -f downsample-infra.flux
# タスクをリストおよび管理する
influx task list --org myorg
influx task run list --task-id <TASK_ID> --limit 10
タスク F: アラートとチェック
// チェック: CPU が 85% を超えた場合にアラートを発する
import "influxdata/influxdb/monitor"
option task = {name: "cpu-alert", every: 1m}
data = from(bucket: "infrastructure")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_percent" and r.cpu == "cpu-total")
|> mean()
data
|> monitor.check(
crit: (r) => r._value > 85.0,
warn: (r) => r._value > 70.0,
messageFn: (r) => "CPU at ${string(v: r._value)}% on ${r.host}",
data: { "_check_name": "High CPU", "_type": "threshold" }
)
ベストプラクティス
- 異なる保持期間を持つ、生のデータとダウンサンプリングされたデータ用に個別のバケットを使用します
- 最小限の権限を持つスコープ付きトークンを作成します (コレクターには書き込み専用、ダッシュボードには読み取り専用)
- よりクリーンなダウンサンプリングされた出力のために、
window()+mean()の代わりにaggregateWindow()を使用します - データの粒度に合わせて書き込みリクエストで
precisionを設定します (通常は秒で十分です) - HTTP オーバーヘッドを削減するために、ラインプロトコルバッチ書き込み (リクエストごとに複数行) を使用します
- ストレージとクエリのパフォーマンスについて、
/metricsエンドポイントで InfluxDB 自身のメトリクスを監視します
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
InfluxDB
Overview
Configure InfluxDB for time-series data storage and analysis. Covers bucket management, Flux querying, retention policies, downsampling tasks, and API usage for metrics ingestion and retrieval.
Instructions
Task A: Initial Setup and Configuration
# Deploy InfluxDB with Docker
docker run -d --name influxdb \
-p 8086:8086 \
-v influxdb_data:/var/lib/influxdb2 \
-v influxdb_config:/etc/influxdb2 \
-e DOCKER_INFLUXDB_INIT_MODE=setup \
-e DOCKER_INFLUXDB_INIT_USERNAME=admin \
-e DOCKER_INFLUXDB_INIT_PASSWORD=changeme123 \
-e DOCKER_INFLUXDB_INIT_ORG=myorg \
-e DOCKER_INFLUXDB_INIT_BUCKET=metrics \
-e DOCKER_INFLUXDB_INIT_RETENTION=30d \
influxdb:2.7
# /etc/influxdb2/config.toml — InfluxDB configuration
bolt-path = "/var/lib/influxdb2/influxd.bolt"
engine-path = "/var/lib/influxdb2/engine"
[http]
bind-address = ":8086"
flux-enabled = true
[storage-cache]
snapshot-memory-size = 26214400
max-concurrent-compactions = 2
[logging]
level = "info"
format = "auto"
Task B: Bucket and Token Management
# Create buckets via CLI
influx bucket create \
--name infrastructure \
--retention 30d \
--org myorg
influx bucket create \
--name app-metrics \
--retention 90d \
--org myorg
influx bucket create \
--name downsampled \
--retention 365d \
--org myorg
# Create a scoped API token for Telegraf
influx auth create \
--org myorg \
--description "Telegraf write token" \
--write-bucket infrastructure \
--write-bucket app-metrics
# Create a read-only token for Grafana
influx auth create \
--org myorg \
--description "Grafana read token" \
--read-bucket infrastructure \
--read-bucket app-metrics \
--read-bucket downsampled
Task C: Write Data via API
# Write metrics using line protocol
curl -X POST "http://localhost:8086/api/v2/write?org=myorg&bucket=app-metrics&precision=s" \
-H "Authorization: Token ${INFLUX_TOKEN}" \
-H "Content-Type: text/plain" \
--data-binary '
http_requests,service=api-gateway,method=GET,status=200 count=1523,latency_ms=45.2 1708300800
http_requests,service=api-gateway,method=POST,status=201 count=234,latency_ms=120.5 1708300800
http_requests,service=payment,method=POST,status=500 count=3,latency_ms=5020.0 1708300800
queue_depth,service=order-processor queue_size=142,consumers=5 1708300800
'
Task D: Flux Queries
// Query: CPU usage over last hour, grouped by host
from(bucket: "infrastructure")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_percent" and r.cpu == "cpu-total")
|> aggregateWindow(every: 5m, fn: mean)
|> yield(name: "cpu_usage")
// Query: Top 5 services by error count in last 24h
from(bucket: "app-metrics")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "http_requests" and r.status =~ /^5/)
|> group(columns: ["service"])
|> sum(column: "_value")
|> sort(columns: ["_value"], desc: true)
|> limit(n: 5)
// Query: Calculate error rate percentage per service
errors = from(bucket: "app-metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "count" and r.status =~ /^5/)
|> group(columns: ["service"])
|> sum()
total = from(bucket: "app-metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "count")
|> group(columns: ["service"])
|> sum()
join(tables: {errors: errors, total: total}, on: ["service"])
|> map(fn: (r) => ({ r with error_rate: (r._value_errors / r._value_total) * 100.0 }))
// Query: P95 latency with moving average
from(bucket: "app-metrics")
|> range(start: -6h)
|> filter(fn: (r) => r._measurement == "http_requests" and r._field == "latency_ms")
|> aggregateWindow(every: 5m, fn: (tables=<-, column) =>
tables |> quantile(q: 0.95, column: column))
|> movingAverage(n: 6)
Task E: Downsampling Tasks
// Task: Downsample infrastructure metrics hourly
option task = {name: "downsample-infra", every: 1h, offset: 5m}
from(bucket: "infrastructure")
|> range(start: -task.every)
|> filter(fn: (r) => r._measurement == "cpu" or r._measurement == "mem" or r._measurement == "disk")
|> aggregateWindow(every: 1h, fn: mean)
|> to(bucket: "downsampled", org: "myorg")
# Create the task via CLI
influx task create --org myorg -f downsample-infra.flux
# List and manage tasks
influx task list --org myorg
influx task run list --task-id <TASK_ID> --limit 10
Task F: Alerting and Checks
// Check: Alert when CPU exceeds 85%
import "influxdata/influxdb/monitor"
option task = {name: "cpu-alert", every: 1m}
data = from(bucket: "infrastructure")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_percent" and r.cpu == "cpu-total")
|> mean()
data
|> monitor.check(
crit: (r) => r._value > 85.0,
warn: (r) => r._value > 70.0,
messageFn: (r) => "CPU at ${string(v: r._value)}% on ${r.host}",
data: { "_check_name": "High CPU", "_type": "threshold" }
)
Best Practices
- Use separate buckets for raw and downsampled data with different retention periods
- Create scoped tokens with minimal permissions (write-only for collectors, read-only for dashboards)
- Use
aggregateWindow()instead ofwindow()+mean()for cleaner downsampled output - Set
precisionin write requests to match your data granularity (seconds is usually sufficient) - Use line protocol batch writes (multiple lines per request) to reduce HTTP overhead
- Monitor InfluxDB's own metrics at
/metricsendpoint for storage and query performance