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

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

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. PHPで構築したWordPressを
    Observabilityツールで見てみる
    By Takaaki Tsunoda(Taka2) / @taka2noda
    PHPerKaigi 2023 Track A LT

    View Slide

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

    View Slide

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

    View Slide

  4. Observabilityとは

    View Slide

  5. 本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とは⓪はじめに

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. 設定

    View Slide

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

    View Slide

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

    View Slide

  12. アプリケーションのログを出力させるためのカスタムのロガーを作成
    定義箇所と定義内容は下記の通り  with chatGPT
    設定②アプリのカスタムロガー
    /bitnami/wordpress/wp-content/custom_logger.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');

    View Slide

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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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' );

    View Slide

  17. 見え方

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 見え方③トレースとログ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. おまけ

    View Slide

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

    View Slide

  29. おまけ②トレースのサービス名変更
    トレーサーで自動検知されるサービス名は下記のように環境変数で変更可能です
    上記は、自動検出される
    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

    View Slide

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

    View Slide

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

    View Slide

  32. おまけ⑤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

    View Slide

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

    View Slide

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

    View Slide