ピンバ-リアルタイムPHPモニタリング

公式ウェブサイトに記載されているように-
 Pinbaは、MySQLを読み取り専用インターフェイスとして使用するPHP用のリアルタイム監視/統計サーバーです。

そして、本当にそうです。 アプリケーション自体の速度を落とすことなく、実行中のアプリケーションのリアルタイム統計を取得できます。
統計の処理方法はユーザー次第です。たとえば、それをzabbixに出力し、安定性の監視(エラーなし、長いリクエストがほとんどない)と分析の両方に使用します。
この驚くべき発明について、Habrに関する記事が1つもなかったことは驚くべきことです。



私はこのオープンソースプロジェクトのために何か良いことをしたかったのですが、Habréに関する言及よりも良いことをしたいです;)

設置


ピンバ自体は2つの部分で構成されます-これはphp拡張とエンジン(mysqlのエンジン)です。
両方ともソースコードで提供されます。 インストール自体は非常に簡単で、 リファレンスガイドに詳しく説明されています

作業の原則と構成


クライアント(モジュール)
phpが実行されている各サーバーで、モジュールをインストールし、php.iniに次の行を追加する必要があります。
; configuration for php pinba module
extension=pinba.so
pinba.enabled=1
pinba.server=192.168.1.42:3300 ;


その後、cliを含む各phpスクリプトは、シャットダウンする前に、指定されたアドレスとポートにudpに関するレポートを送信します。
これでインストールが完了し、クライアントが構成されました。

サーバー(mysqlエンジン)。
最初にドキュメントを読んだとき、なぜpinbaがmysqlを必要としていたのか理解できませんでした。 すべてがシンプルであることが判明しました-mysqlは分析システムへのインターフェース/エントリポイントです。
これは非常に便利です。なぜなら、このDBMSにはすでに多くのソリューションがあり、誰もがその操作方法を知っているからです。

pinbaサーバーはmysqlエンジンとして構成されます。 多くの設定はなく、その名前は明らかです。
 [mysqld]
 pinba_port = 3300#ポート
 pinba_address = 192.168.1.205
 pinba_stats_gathering_period = 10000#(マイクロ秒)
 pinba_stats_history = 900#(秒)
 pinba_temp_pool_size = 10000
 pinba_request_pool_size = 1000000#<1秒あたりの最大予想リクエスト数> * <stats_history> = <リクエストプールサイズ>
 pinba_tag_report_timeout = -1#デフォルト値は-1です。つまり、データを永久に更新し続けます。 


詳細については、 ドキュメントを参照してください。

サーバーをインストールし、クライアントでモジュールをオンにすると、pinbu(mysql)はこのモジュールで実行されたすべてのスクリプトに関するデータを受け取ります。
すべての一意のリクエストに関するデータは、リクエストラベルに表示されます。 グループ化も利用できます。
report_by_hostname、report_by_hostname_and_script、report_by_hostname_and_server、report_by_hostname_server_and_script、report_by_script_name、report_by_server_and_script、report_by_server_name。

一般的に、これはmysqlなので、次のようになります。
show tables;


要約すると、実質的に何も設定せずに、本番環境のすべてのphp用の分析システムを取得しました。
たとえば、ヒット(rps)の総数がわかります。
 mysql> select_req_per_sec from report_by_server_name where server_name = 'ro.plus1.wapstart.ru';
 + ------------- +
 |  req_per_sec |
 + ------------- +
 |  547.161 |
 + ------------- +
セット内の1行(0.00秒)



同じですが、各ホスト(サーバー販売)に対して:
 mysql>ホスト名、req_per_secをreport_by_hostname_and_serverから選択します。server_name= 'ro.plus1.wapstart.ru';
 + ---------- + ------------- +
 | ホスト名|  req_per_sec |
 + ---------- + ------------- +
 |  .... |  81.7561 |
 |  b .. |  59.0298 |
 |  c ... |  90.8049 |
 |  f .... |  54.5014 |
 |  f .... |  54.5122 |
 |  h ...... |  63.5664 |
 |  k ... |  54.5068 |
 |  s .... |  90.8211 |
 + ---------- + ------------- +
セット内の8行(0.00秒)


そして、さまざまなレポートの大規模なセット。 すべてのレポートは迅速に更新され、最新のデータが含まれます。
これはApacheログの分析ではなく、本番環境で直接プロファイリングと監視を行います!

タイマーとタグ


今最も美味しいです。
スクリプトでイベント期間を測定し、タグを付けることができます。 このデータはレポートにも使用できます。

たとえば、データベースからのユーザーの選択が長い場合、これを行うことができます。
$t = pinba_timer_start(array("group"=>"mysql", "server"=>"dbs2", "operation"=>"select"));
//
pinba_timer_stop($t);


私たちが使用するフレームワークにタイマーを直接追加しましたが、今では、ある程度、データベース、memcachedなどへのすべてのリクエストを測定しています。

それとは別に、このデータはサーバーインターフェイスで簡単にアクセスできることに注意してください。
それらは、生データから選択できます-テーブルレポート、タイマー、タイマータグを参照するか、データが既に集約状態にあるテーブルを作成します。

例( wikiから):
CREATE TABLE `tag_info_group_server` (
`group_value` varchar(32) DEFAULT NULL,
`server_value` varchar(32) DEFAULT NULL,
`req_count` int(11) DEFAULT NULL,
`req_per_sec` float DEFAULT NULL,
`hit_count` int(11) DEFAULT NULL,
`hit_per_sec` float DEFAULT NULL,
`timer_value` float DEFAULT NULL
) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag2_info:group,server'

:表の解説は重要です。
作成後、グループタグとサーバー(サーバー)のデータは、このテーブル(!)に自動的に集約されます。

安定性


本番環境で使用します。 動作します;)



特にマニュアルをコピーしたくないので、私はピンバについて何らかの完全な説明をするつもりはありません。
本番環境でphpを使用する場合は、pinbaを試してください。 彼女は本当に良いです!

参照:
* ウィキ
* Googleグループ

upd:現在の実装の作成者に会う-tony2001

Source: https://habr.com/ru/post/J129042/


All Articles