Slide 1

Slide 1 text

PHPで構築したWordPressを Observabilityツールで見てみる By Takaaki Tsunoda(Taka2) / @taka2noda PHPerKaigi 2023 Track A LT

Slide 2

Slide 2 text

1. 自己紹介 2. Observabilityとは 3. 設定 4. 見え方 5. まとめ 6. おまけ 目次

Slide 3

Slide 3 text

> んなわけないw 名前 = Takaaki Tsunoda 所属 = Datadog Japan 合同会社 Sales Engineer PHPerKaigi初参戦です! 自己紹介

Slide 4

Slide 4 text

Observabilityとは

Slide 5

Slide 5 text

本LTでは、CNCF(Cloud Native Computing Fundation)のTAG(Technical Advisory Group)の Observability WhitepaperをベースにObservabilityについて紹介していきます https://github.com/cncf/tag-observability/blob/main/whitepaper.md *CNCFは、Linux Foundationの一部として、kubernetesやOpenTelemetryなどの クラウドネイティブなプロジェクトのサポート、監査、方向性の示唆を行っている団体です https://www.cncf.io/ Observabilityとは⓪はじめに

Slide 6

Slide 6 text

読み方 = オブザーバビリティ 日本語訳 = 可観測性 制御工学における定義 = システムの外部出力の知識から、システムの内部状態をどれだ け推測できるかを示す尺度 訳され方(非公式) = o11y システム 出力 (シグナル) 入力 Observabilityとは①言葉の定義

Slide 7

Slide 7 text

業界標準のプライマリーシグナル = メトリックス, ログ, トレース *トレース= 分散されたトランザクション(アプリケーションの処理)で何が起こったかを理解するための技術 新たに考えられる2つのシグナル = プロファイル, ダンプ *プロファイル = トレースをさらに深く掘り下げ、コードレベルで問題の原因やリソースの使用率を理解するための技術 Observabilityとは②取るべきシグナル

Slide 8

Slide 8 text

ゴール = システムの内部構造を知らなくても、外部出力から理解できる ステップ1 = シグナルが取得できている ステップ2 = シグナルが相関付いている Observabilityとは③ゴールとステップ

Slide 9

Slide 9 text

設定

Slide 10

Slide 10 text

WordPress packeged by Bitnamiから、構成とインフラ環境を選択 URL:https://bitnami.com/stack/wordpress/cloud 今回は、Single-Tier、AWSを選択 設定①検証環境準備

Slide 11

Slide 11 text

ぽちぽち押していく Launch through EC2を選ぶと、EC2のConfigページに遷移するので、 Launchで準備完了 設定①検証環境準備

Slide 12

Slide 12 text

アプリケーションのログを出力させるためのカスタムのロガーを作成 定義箇所と定義内容は下記の通り  with chatGPT 設定②アプリのカスタムロガー /bitnami/wordpress/wp-content/custom_logger.php <<新規作成

Slide 13

Slide 13 text

ObservabilityツールとしてDatadogを選定 選定理由は自己紹介参照 シグナル(メトリックス, ログ, トレース, プロファイル)を可視化するため、下記を設定 1. Datadog AgentとTracerのInstall > メトリックス, トレース, プロファイルを相関づけて確認可能 2. Datadog Agent内のyamlファイルを修正 > ログを確認可能 3. PHPのLoggerの定義を修正 > ログとトレースを相関づけて確認可能 *Datadogのアカウント作成方法はおまけ①を参照ください 設定③Observabilityツール設定

Slide 14

Slide 14 text

1. Datadog AgentとTracerのInstall 1-1.Datadog AgentをInstall (API Keyの%部分は自身の環境のものに変更) ガイド:https://docs.datadoghq.com/getting_started/agent/#installation コマンド例: 1-2.Datadog TracerをInstall (引数でprofillerの機能も有効化) ガイド:https://docs.datadoghq.com/tracing/trace_collection/dd_libraries/php?tab=otherenvironments#install-the-extension コマンド: > メトリックス, トレース, プロファイルを相関づけて確認が可能 設定④Datadog-詳細1 メトリックス,トレース $ DD_API_KEY=”%” DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)" $ curl -LO https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php $ php datadog-setup.php -- php-bin=all -enable-profiling

Slide 15

Slide 15 text

2. Datadog Agentのyamlファイルを修正 ガイド:https://docs.datadoghq.com/getting_started/logs/#server 設定例: pathはログ連携したいファイルのパスに変更  P12のカスタムロガーの定義の場合、 /opt/bitnami/wordpress/error.log > ログの確認が可能 *Monolog, Zend-Log, Symfonyのlogging libraryを使用している場合の手順は下記 https://docs.datadoghq.com/logs/log_collection/php/?tab=phpmonolog 設定④Datadog-詳細2 ログ /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml ## Log section logs: - type: file path: "/path/to/your/php/application-json.log" service: "" source: php sourcecategory: "" $ sudo vi /etc/datadog-agent/datadog.yaml Logs_enabled: true

Slide 16

Slide 16 text

3. PHPのLoggerの定義を修正 下記のような関数で、trace idとspan idをログに付与 *赤枠部分が相関付のために必要なコード ガイド:https://docs.datadoghq.com/tracing/other_telemetry/connect_logs_and_traces/php/#manual-injection *WordPressのテーマをtwentytwentytwo に変更した例 WordPressの設定はおまけ④を参照 > ログとトレースを相関づけて確認可能 設定④Datadog-詳細3 ログとトレース連携 /bitnami/wordpress/wp-content/themes/twentytwentytwo/functions.php <<今回はfunctions.phpに追加 function log_error_message() { $current_action = current_action() ; // 現在実行中のアクションフック名を取得 $context = \DDTrace\current_context() ; $append = sprintf( ' [dd.trace_id=%s dd.span_id=%s]' , $context[ 'trace_id'], $context[ 'span_id'] ); my_error_logger( 'アプリのカスタムログ by Taka2. Action: ' . $current_action . $append) ; } // 'wp_loaded' アクションフックにカスタム関数を追加 add_action( 'wp_loaded' , 'log_error_message' );

Slide 17

Slide 17 text

見え方

Slide 18

Slide 18 text

Let’s Demo! - Wifi増設ありがとうございます!

Slide 19

Slide 19 text

見え方①トレースとメトリックス

Slide 20

Slide 20 text

見え方②トレースとプロファイル

Slide 21

Slide 21 text

見え方③トレースとログ

Slide 22

Slide 22 text

見え方④アプリ処理経路とDBへの処理

Slide 23

Slide 23 text

見え方⑥プロファイルの関数単位での比較1

Slide 24

Slide 24 text

見え方④プロファイルの関数単位での比較2

Slide 25

Slide 25 text

まとめ “システムを外部出力から理解できる”状態を目指しましょう! “メトリックス”, “ログ”, “トレース”,”プロファイル” 取りましょう、相関づけしましょ〜う!

Slide 26

Slide 26 text

さいごに ・DatadogのDemoもっとみたい ・設定みたい ・Observabilityについて語りたい ・Bitsくんのシールほしい(数に限りあり) ・ビール飲もうぜ などなど、ございましたらぜひお気軽にお声がけください!

Slide 27

Slide 27 text

おまけ

Slide 28

Slide 28 text

おまけ①Datadogのアカウント作成 Datadogの無料トライアルアカウント作成は下記から可能です https://www.datadoghq.com/ja/ 本資料では、リージョンは US1として作成しています

Slide 29

Slide 29 text

おまけ②トレースのサービス名変更 トレーサーで自動検知されるサービス名は下記のように環境変数で変更可能です 上記は、自動検出される mysqliをtaka2-wp-mysqlに、curlをtaka2-wp-curlに変更する例 変更後の出力結果 /opt/bitnami/php/etc/environment.conf env[PATH] = $PATH env[DD_SERVICE] = 'taka2-wordpress-phperkaigi' env[DD_ENV] = 'dev' env[DD_VERSION] = '1.0' env[DD_PROFILING_ENABLED] = 'true' env[DD_SERVICE_MAPPING] = mysqli:taka2-wp-mysql, curl:taka2-wp-curl

Slide 30

Slide 30 text

おまけ③ログのパース(JSON化) Datadogにログ連携する際、事前のログフォーマットの修正は不要です Datadogにログ連携すると、デフォルトルールがあるものは自動でログはパース (JSON化)されます アプリケーションのカスタムログのような場合も、連携されたログから Datadog側でパースルールを作成して 提示してくれます 1.ボタンを押す 2.条件に一致したログが表示される 3.自動でパースルールが作成される

Slide 31

Slide 31 text

おまけ④AWSのセキュリティ許可 AWSでは接続元のIP許可としてMy IPが選択できます EC2作成時はSSHの接続元を設定可能です EC2起動後はhttpやhttpsなど、他のプロトコルの接続元も同様に My IPを使用して設定可能です セキュリティリスクを軽減しつつ、自宅やオフィスなど、検証するロケーションが変わる際に簡単に許可設定 の制御ができるのでおすすめです

Slide 32

Slide 32 text

おまけ⑤WordPressの操作 • Bitnami WordPressの操作ガイド:https://docs.bitnami.com/aws/apps/wordpress/ • WordPress管理者画面へのログイン URL:http:[パブリックIP]/wp-admin • WordPressのテーマ編集方法: a. WordPress管理者画面の左のメニューバーからThemeを選択 i. b. 2. 適用したいThemeを選んでActivate

Slide 33

Slide 33 text

おまけ⑥当日の様子 ペンライトとニコ生コメントによるあお r…応援、最高の思い出です!ありがとうございました!

Slide 34

Slide 34 text

以上です。 なにかのお役に立てば幸いです。