ElasticsearchおよびKibanaからログをエクスポートする方法

ElasticsearchおよびKibanaからログをエクスポートする方法

SOC Prime Team
SOC Prime Team linkedin icon フォローする

公式クライアントのhelpers.scanを使った短いPythonスクリプト、または_point in time (PIT)とsearch_afterを使った_search APIを使用できます。10,000行までのクイックな取得には、KibanaのDev Toolsからformat=jsonでES|QLを使用すると便利です。Kibana Discoverはレポートを作成することもできますが、現在のLogTotalが読み取る形式ではありません。統合がそれを保持しているなら、event.originalが生のログ行を保持しています。

Elasticは、Elastic Securityから自作のスタックに至るまで、社内セキュリティ分析の最も一般的な基盤の一つです。Prime Coreには、671のMITRE ATT&CK技術にマッピングされたElastic用の23,722の検出ルールがあります。以下は、データを取得し、クリーンにし、LogTotalで無料で調査する方法です。

無料で始める

開始する前に

認証 APIキーを作成 スタック管理 → APIキー 必要なインデックスでreadとview_index_metadataを持つ。Authorization: ApiKey <key>として送信する。Elastic Cloudでは、Elasticsearchエンドポイントはデプロイメントの概要ページにあります。

データがどこにあるかを知っておく。 Elastic Agentの統合は、logs-<dataset>-<namespace>という名前のデータストリームに書き込みます。例えば、System統合からのLinux認証ログはlogs-system.auth-defaultに着地します。

確認する event.original. 多くの統合はデフォルトで生の行を保持しません。それは「元のイベントを保持する」オプションです。もしそれが欠けているなら、解析されたフィールドがあなたの持っているものであり、JSONアップロードにはそれで構いません。

データ層。 コールドまたはフローズンレイヤーに対する検索は遅くなります。データが古いときはウィンドウを狭める。

例は2026年10月に確認された最新のElasticドキュメントに従っています。

オプション1: 呼応するPython (推奨)

import json, os
from elasticsearch import Elasticsearch, helpers

es = Elasticsearch("https://my-deployment.es.example.com:443", api_key=os.environ["ES_API_KEY"])
query = {"query": {"range": {"@timestamp": {
    "gte": "2026-10-19T00:00:00Z", "lt": "2026-10-20T00:00:00Z"}}}}

with open("elastic_auth_1019.jsonl", "w") as out:
    for hit in helpers.scan(es, index="logs-system.auth-*", query=query, size=1000):
        out.write(json.dumps(hit["_source"]) + "n")

生の行の場合、全ドキュメントの代わりにhit[“_source”].get(“event”, {}).get(“original”, “”)を書き込む。

オプション2: クイックプル用のES|QL

Kibana Dev Toolsで:

POST /_query?format=json
{
  "query": """
    FROM logs-system.auth-*
    | WHERE @timestamp >= "2026-10-19T00:00:00Z" AND @timestamp < "2026-10-20T00:00:00Z"
    | KEEP @timestamp, host.name, user.name, source.ip, message
    | LIMIT 10000
  """
}

二つのカッチ。ES|QLはLIMITを設定しない限り1,000行を返し、最大は10,000です。JSONレスポンスもレコードではなく、カラムプラス値として返されます。それを行毎に1つのオブジェクトにするには、クエリボディをquery.jsonとして保存し、それをjqで実行する:

curl -sS -H "Authorization: ApiKey $ES_API_KEY" -H 'Content-Type: application/json' 
  "https://my-deployment.es.example.com/_query?format=json" -d @query.json
  | jq -c '.columns as $c | .values[] | [$c, .] | transpose | map({(.[0].name): .[1]}) | add' > esql_1019.jsonl

オプション3: Kibana UI(Discover)からログをエクスポート

小規模な調査では、Kibana Discoverを使用して、ブラウザから直接ログを探し、フィルタリングしてエクスポートできます。スクリプトを書く必要はありません。

  1. Discoverを開く。 Kibanaにサインインし、 分析 → Discover、またはメインナビゲーションからDiscoverを選択します。
  2. データを選択。 必要なログを含むデータビューを選択します。 例えば、logs-system.auth-*のように。関連するElasticsearchインデックスやデータストリームを含んでいることを確認してください。
  3. 時間範囲を設定します。 右上の時間ピッカーを使用して調査期間を選択します。不要なイベントをエクスポートしないようにウィンドウを狭めます。
  4. ログをフィルタリングする。 サーチバーと利用可能なフィルターを使用して関連するイベントを分離します。 例えば、event.category: authenticationと入力することで、認証活動に焦点を当てることができます。
  5. フィールドを選択する。 @timestamp、host.name、user.name、source.ip、messageのような有用なカラムを追加します。利用可能な場合は生のログコンテンツを保持するためにevent.originalを含めます。
  6. 結果をエクスポートします。 開く その他 → エクスポート → 結果をCSVとしてタブ化 (一部のバージョンでは、 共有 → CSVレポート)を選択します。レポートを生成し、CSVファイルをダウンロードします。エクスポートがすぐにダウンロードされない場合は、 スタック管理 → レポート.

にあります。 代替: JSONとしてログをコピー。 少数のイベントを選択する場合、Discoverで関連する行を選択し、 メニューを開いて ドキュメントをJSONとしてコピーを選択します。コピーした内容をテキストエディタに貼り付けて.jsonファイルとして保存します。現在のテーブル選択に含まれるフィールドのみがコピーされる可能性があります。

制限事項。 CSVレポートは中程度のサイズのエクスポートを想定しており、Kibanaのバージョンと設定に依存する行数とファイルサイズの制限があります。JSONとしてDiscoverセッション定義をエクスポートしても、ログイベント自体はエクスポートされません。

LogTotalでは、サポートされているログ形式を使用します。JSONLが必要な場合は、以下のPythonまたはElasticsearch APIメソッドを使用してレコードをエクスポートするか、エクスポートされたデータを1行毎に1つのJSONオブジェクトに変換してからアップロードしてください。

ステップ3: LogTotalでアップロード、クリーン化、レビュー

  1. アップロード。 開く logtotal.com にアクセスして.jsonlファイルをドロップします。
  2. サニタイズ。 続行する前に見直します。
  3. レビュー。 

問題が発生した場合

症状考えられる原因Fix
401または403APIキーがインデックスに対する権限を持っていないreadとview_index_metadataを追加
結果ウィンドウが大きすぎる一回の_searchで10,000以上のヒットhelpers.scanまたはsearch_afterを使用
ES|QLは1,000行だけを返すデフォルトの制限LIMITを追加 (最大10,000)
event.original フィールドがない統合がそれを保持しなかった解析済みのドキュメントをエクスポート
タイムアウト古いデータがコールドまたはフローズン層にあるウィンドウを狭める; 部分的に実行

FAQ

Elastic Securityアラートについてはどうですか?

アラートは独自のインデックス(.alerts-security.alerts-*)にあります。アラートをエクスポートするのはそれらの背後にあるログをLogTotalにエクスポートするのとは異なる仕事です;ログをエクスポートしてください。

OpenSearchにも使えますか?

考え方は同じですが、クライアントは異なります。

SOC PrimeのDetection as Codeプラットフォームに参加し ビジネスに最も関連性のある脅威に対する可視性を向上させましょう。開始して即座に価値をもたらすためには、今すぐSOC Primeの専門家とのミーティングを予約してください。