Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【ログ分析勉強会#5】Elasticsearch/Kibana のパイプ型クエリー言語ES|Q...

nobuhikosekiya
September 26, 2024

【ログ分析勉強会#5】Elasticsearch/Kibana のパイプ型クエリー言語ES|QLの紹介 ~ Pandasと一緒にログ分析してみた

2024/9/26に渋谷で行われたログ分析勉強会#5で発表した資料です。
ES|QLの説明は少なめです、実践的なコードはGoogle ColabのJupyterノートブックのコードは資料内にリンクがありますので、ご覧ください。

nobuhikosekiya

September 26, 2024
Tweet

Other Decks in Technology

Transcript

  1. ログ分析 … ~ 私の経験 ~ grep ! awk ! 正規表現

    ! Perl ! 昔の時代 - 手軽! - 達人になれば自由に色々な分析ができる - 色々な面でメンテナンスや組織的な使い方には 難しいところがある - 大量のログを高速に検索したり、ログを一括管 理一括検索はできないが、昔はあまりニーズな かった | (pipe) ! シェル!
  2. ログ分析 … ~ 私の経験 ~ 数年前に Elasticsearchと Kibanaを知ってから Elasticsearch &

    Kibana ! - 無料でも使える - 一箇所にログを集めて、大量のデータでも高速 検索できる - 大半のユースケースに対応できるクエリーとダッ シュボード - ログのマシン・ラーニングもできる - ログをElasticsearchに入れる前に構造化する のが基本 schema_on_write(慣れれば問題は ないのですが) - 何かが足りない??シェルっぽいものがない。 データが保存された後の加工に難。
  3. 33.66.255.94 - - [2018-09-19T20:31:36.277Z] "GET /beats/filebeat/filebeat-6.3.2-linux-x86_64.tar.gz HTTP/1.1" 200 4404 "-"

    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24" { "@timestamp": "20240925T203136.277Z", "response": 200, "agent": "Mozilla/5.0 X11; Linux i686 AppleWebKit/534.24 KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24", "bytes": 4404, "clientip": "33.66.255.94" , "request": "/beats/filebeat/filebeat-6.3.2-linux-x86_64.tar.gz", "method": “GETˮ } 元のログ 構造化 JSON Elasticsearch
  4. ログ分析 … ~ 私の経験 ~ 現在 Elasticsearch & Kibana +

    ES|QL ! - 無料でも使える ES|QLも無料版で使える) - 一箇所にログを集めて、大量のデータでも高速 検索できる - 大半のユースケースに対応できるクエリーとダッ シュボード - ログのマシン・ラーニングもできる - ログをElasticsearchに入れる前に構造化する のが基本(慣れれば問題はないのですが) - 何かが足りない??シェルっぽいものがない。 データが保存された後の加工に難。
  5. ログ分析 … ~ 私の経験 ~ 現在〜将来 Elasticsearch & Kibana +

    ES|QL ! + Jupyter Notebook 今どきのエンジニア向けのデータ分析(ログに限らず の)といえば、 Python + Jupyter Notebook + Pandas - マシンラーニングに強い - ビジュアル含めほぼなんでもできる - コミュニティのナレッジ量は No.1 (だと思っている) - ただ、オンデマンドな分析や処理がメイン。(システ ム運用の主役にはならない)
  6. FROM apache-logs | WHERE url.original == ‘/login’ | EVAL time_buckets

    = auto_bucket (@timestamp, 50,”2023-09-11T21:54:05.000Z”,”2023-09-12T00:40 :35.000Z”) | STATS login_attempts = count(user.name) by time_buckets, user.name | SORT login_attempts desc 強力、コンポーネント化、拡張可能、高速 ES|QL のクエリーの例 上記の検索の内容:Apacheのアクセスログを分析し、アクセス URLがˮ/loginˮのログに関 して、特定の期間の中でのユーザー名別でのログインカウントを集計し、ログインの多い ユーザーとその時間帯を表示する (簡単に言うと、ログインアクセスが集中した時間と ユーザー名を特定したい)
  7. ES|QLが提供する関数の種類 - Aggregate functions … SUM、PERCENTILEなど - Grouping functions …

    時間単位に集計値を出す - Conditional functions and expressions … 同じレコード内でif elseでの評価 - Date and time functions … 日付のフォーマット、日付計算など - IP functions … IPアドレスが与えたCIDRの範囲内かどうかなど - Math functions … 小数点桁数の設定、コサイン関数など - Spatial functions … 地理データを扱う関数 - String functions … LENGTH, CONCAT, REPLACEなどよくある文字列関数 - Type conversion functions … TO_DATETIME, TO_DOUBLE等の型変換 - Multi value functions … リスト型データに対する変換(デリミタでSPLIT等) 一覧: https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-functions