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

🔍 可観測性に入門しよう

🔍 可観測性に入門しよう

社内LTにて、可観測性を布教しようと試みましたʕ◔ϖ◔ʔ

関連テーマ(SREに入門しよう):
https://speakerdeck.com/hiroki_hasegawa/sreniru-men-siyou

長谷川広樹 (俺です)

October 22, 2021
Tweet

More Decks by 長谷川広樹 (俺です)

Other Decks in Programming

Transcript

  1. 目次 ▪ 可観測性 ▪ 監視やテストとの違い ▪ なぜ,我々は可観測性を高める必要があるのか ▪ 可観測性を高める方法 ▪

    テレメトリーとは ▪ メトリクスとは ▪ メトリクス ~ データポイントとは ~ ▪ ログとその種類 ▪ SaaSツールでログを楽しく構造化できちゃう ▪ 分散トレースとは ▪ 分散トレース ~ スパンとは ~ ▪ 分散トレース ~ 図の読み方の例 ~ ▪ テレメトリー間の関連付け ▪ 関連付け ~ 構造化ログとスパン ~ ▪ 関連付け ~ その他 ~
  2. メトリクス ~データポイントとは~ 引用: ・https://whatis.techtarget.com/definition/data-point ・https://aws.amazon.com/jp/about-aws/whats-new/2017/12/amazon-cloudwatch-alarms-now-alerts-you-when-any-m-out-of-n-metric-datapoints-in-an-interval-are-above-your-threshold/ とある分析にて 対象から得られる 最小単位の数値データ 分析Aにおいて 毎分

    得られる数値 = 分析Aにおけるデータポイント 分析Bにおいて 毎時 得られる数値 = 分析Bにおけるデータポイント 分析Cにおいて 毎日 得られる数値 = 分析Cにおけるデータポイント ※ 分析ごとにデータポイントが存在
  3. 特定の瞬間に発生した イベント記録のデータ ログとその種類 { "client_ip": "192.168.0.1", "timestamp": "2021-01-01 12:00:00", "method":

    "GET", "url": "/users", "status_code": 200 } ~ 構造化ログ (JSONなど) ~ イベントの 項目名と値 192.168.0.1 [2021-01-01 12:00:00] GET /users 200 ~ 非構造化ログ (文字列) ~ イベントの 値のみ 引用:https://newrelic.com/jp/blog/how-to-relic/metrics-events-logs-and-traces
  4. SaaSツールでログを楽しく構造化できちゃう 192.168.0.1 [2021-01-01 12:00:00] GET /users 200 楽し過ぎて 一日中やってしまう... (個人の感想です)

    %{ipv4:client.ip}\s+\[%{date("yyyy-MM-dd HH:mm:ss"):date}\]\s+%{word:http.method}\s+%{notSpace:http.path}\s+%{integer:http.status_code} { "client": { "ip": "192.168.0.1" }, "http": { "method": "GET", "path": "/users", "status_code": 200 } } DatadogのGrokパーサーで構造のルールを表現 値に基づいて,ログを 検索 できるようになる
  5. 分散トレース ~スパンとは~ 特定のサービスに関する データのセット (JSONなど) 引用:https://docs.datadoghq.com/tracing/guide/send_traces_to_agent_by_api/ { "duration": 123, #

    処理の所要時間 "error": 0, # エラーの有無 "meta": { "env": "prd" # タグのリスト }, "metrics": { "baz-sum": 123 # サービスのメトリクス }, "name": "laravel.request", # スパン名 "parent_id": 123, # 親スパンID "resource": "/foos", # アクセスされたリソース "service": "foo-service", # サービス名 "span_id": 123456789, # スパンID "start": 0, # 処理開始時間 "trace_id": 123456789, # トレースID "type": "web" # サービスのタイプ } スパンはトレースIDをもち 異なるスパン間で紐づけ可能 異なるサービスを横断する処理を 一繋ぎ に可視化 ※ Datadogのスパンの構造例(SaaSツールごとに異なる)
  6. 関連付け ~ 構造化ログとスパン ~ 構造化ログに トレースID,スパンID を持たせる 引用:https://docs.datadoghq.com/tracing/visualization/trace/?tab=spantags ① ②

    そのログが どのサービス で どのタイミング で 発生したかのかを可視化 ※ Datadogの関連付けの例(SaaSツールごとに異なる)