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

PHPで構築したWordPressをObservabilityツールで見てみる PHPerKa...

PHPで構築したWordPressをObservabilityツールで見てみる PHPerKaigi 2023

PHPerKaigi 2023 Day1のLTで使用した資料です

当日の録画は下記にuploadされるそうです
https://fortee.jp/phperkaigi-2023/proposal/f4d1dc93-718b-44c7-8be2-edd66a253e63

内容
PHPで構築したシステムの監視運用について、お悩みはないでしょうか。
あるいは、「最近Obserbavilityという単語を耳にするけど、実際なに?」という方も多くいらっしゃるのではないでしょうか。

本LTでは、PHP-fpmでWordPressをAWS EC2上に構築し、
Obserbavilityの3本柱と言われるAPM, Log, MetricsがObservabilityツールの一つであるDatadogでどのように見えるかみてみたいと思います。

Obserbavilityの基礎から実際の見え方までお伝えできるよう、基本概念からお話し予定です。

taka2noda

March 24, 2023
Tweet

More Decks by taka2noda

Other Decks in Technology

Transcript

  1. > んなわけないw 名前 = Takaaki Tsunoda 所属 = Datadog Japan

    合同会社 Sales Engineer PHPerKaigi初参戦です! 自己紹介
  2. 本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とは⓪はじめに
  3. 業界標準のプライマリーシグナル = メトリックス, ログ, トレース *トレース= 分散されたトランザクション(アプリケーションの処理)で何が起こったかを理解するための技術 新たに考えられる2つのシグナル = プロファイル,

    ダンプ *プロファイル = トレースをさらに深く掘り下げ、コードレベルで問題の原因やリソースの使用率を理解するための技術 Observabilityとは②取るべきシグナル
  4. アプリケーションのログを出力させるためのカスタムのロガーを作成 定義箇所と定義内容は下記の通り  with chatGPT 設定②アプリのカスタムロガー /bitnami/wordpress/wp-content/custom_logger.php <<新規作成 <?php function my_error_logger($message)

    { $logFile = 'error.log'; $currentDate = date('Y-m-d H:i:s'); $formattedMessage = sprintf("[%s] %s\n", $currentDate, $message); file_put_contents($logFile, $formattedMessage, FILE_APPEND); } /bitnami/wordpress/wp-config.php <<既存定義の先頭に追加 // custom logger setting by Taka2 require_once(ABSPATH . 'wp-content/custom_logger.php');
  5. ObservabilityツールとしてDatadogを選定 選定理由は自己紹介参照 シグナル(メトリックス, ログ, トレース, プロファイル)を可視化するため、下記を設定 1. Datadog AgentとTracerのInstall > メトリックス,

    トレース, プロファイルを相関づけて確認可能 2. Datadog Agent内のyamlファイルを修正 > ログを確認可能 3. PHPのLoggerの定義を修正 > ログとトレースを相関づけて確認可能 *Datadogのアカウント作成方法はおまけ①を参照ください 設定③Observabilityツール設定
  6. 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
  7. 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: "<SERVICE_NAME>" source: php sourcecategory: "<SERVICECATEGPRY_NAME>" $ sudo vi /etc/datadog-agent/datadog.yaml Logs_enabled: true
  8. 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' );