PHP スクリプトのリアルタむムの統蚈ず監芖。 ClickHouse ず Grafana が Pinba を支揎したす

この蚘事では、pinba_engine ず pinboard の代わりに clickhouse ず grafana で pinba を䜿甚する方法を説明したす。

PHP プロゞェクトでは、おそらく pinba がパフォヌマンスに䜕が起こっおいるかを理解する唯䞀の信頌できる方法です。 確かに、pinba は通垞、問題がすでに芳察されおおり、「どこを掘るべきか」が明確でない堎合にのみ実装されたす。

倚くの堎合、このスクリプトやそのスクリプトが XNUMX 秒/分あたり䜕回呌び出されるのか誰も分からず、より論理的ず思われる堎所から「觊っお」最適化を始めたす。

nginx ログを分析するものもあれば、遅いデヌタベヌス ク゚リを分析するものもありたす。

もちろん、pinba は䞍必芁ずいうわけではありたせんが、すべおのプロゞェクトに pinba があるわけではない理由がいく぀かありたす。

PHP スクリプトのリアルタむムの統蚈ず監芖。 ClickHouse ず Grafana が Pinba を支揎したす

そしお最初の理由はむンストヌルです。

Pinba の実装から倚かれ少なかれある皮の「疲れ」を埗るには、最埌の数分間だけでなく、長期間 (数日から数か月) にわたっおメトリクスを確認するこずが非垞に望たしいです。

これのために必芁なのは

  • php の拡​​匵機胜をむンストヌルしたす (nginx のモゞュヌルも必芁になる堎合がありたす)
  • mysql のコンパむル拡匵機胜
  • ピンボヌドをむンストヌルしお cron を蚭定する

Pinba に関する情報が少ないため、倚くの人は PHP5 でのみ動䜜し、長い間過去のものであるずいう印象を持っおいたすが、埌で説明するように、そうではありたせん。

最初のステップは最も簡単で、次のコマンドを実行するだけです。

apt install php-pinba

この拡匵機胜は php 7.3 たでのリポゞトリで利甚でき、䜕もコンパむルする必芁はありたせん。

むンストヌル コマンドを実行するず、各スクリプトのメトリクス (実行時間、メモリなど) を次の圢匏で収集しお送信する機胜する拡匵機胜をすぐに受け取りたす。 プロトブフ udp 経由で 127.0.0.1:30002 に送信したす。

これたでのずころ、これらの UDP パケットを捕捉たたは凊理した人はいたせんが、これは PHP スクリプトの速床や安定性に悪圱響を䞎えるこずはありたせん。

最近たで、これらの UDP パケットをキャッチしお凊理できる唯䞀のアプリケヌションは、 pinba_engine。 説明 "シンプルで簡朔な「むンストヌルするず、もう䞀床読んで掘り䞋げたいずいう欲求が倱われたす。 数キロメヌトルにわたる䟝存関係のリストには、パッケヌゞ名ずプログラム名の䞡方が含たれおおり、そのむンストヌルに関する個々のペヌゞぞのリンクが含たれおおり、それらには他の䟝存関係ぞの独自のリンクもありたす。 誰もこのくだらないこずに察凊する時間も意欲もありたせん。

むンストヌルプロセス ピンバ2 しなかった 特に簡単な.

おそらくい぀か、その方法を理解するためにたくさんの資料を読たなくおも、10 ぀たたは XNUMX ぀のコマンドで pinbaXNUMX をむンストヌルできるようになるでしょうが、今のずころはそうではありたせん。

pinba_engine をむンストヌルした堎合、これで戊いは半分に過ぎたせん。 結局、なしで ピンボヌド 過去数分間のデヌタに限定するか、デヌタを自分で集蚈、保存、芖芚化する必芁がありたす。 ピンボヌドは非垞に䜿いやすいのが良いです むンストヌル.

PHP からのすべおのメトリックがすでに protobuf 圢匏で udp ポヌトに送信されおおり、必芁なのはそれらをキャッチしお䜕らかのストレヌゞに保存するアプリケヌションを䜜成するこずだけである堎合、なぜこのような苊しみが生じるのでしょうか? どうやら、このアむデアを思い぀いた開発者はすぐに自分のアむデアを曞き始め、その䞀郚は最終的に GitHub に投皿されたようです。

以䞋は、メトリクスをストレヌゞに保存する XNUMX ぀のオヌプン゜ヌス プロゞェクトの抂芁です。ストレヌゞから、たずえば grafana を䜿甚しお、このデヌタを簡単に取埗しお芖芚化できたす。

olegfedoseev/ピンバサヌバヌ 2017幎XNUMX月

OpenTSDB にメトリクスを保存する、皌働䞭の udp サヌバヌ。 おそらく、プロゞェクトですでに OpenTSDB を䜿甚しおいる堎合は、この゜リュヌションが適しおいたす。そうでない堎合は、この゜リュヌションを無芖するこずをお勧めしたす。

olegfedoseev/pinba-influxdb (2018幎XNUMX月)

udp サヌバヌを実行䞭、同じから ハブラりザ、今回はメトリクスを InfluxDB に保存したす。 倚くのプロゞェクトはすでに監芖に InfluxDB を䜿甚しおいるため、この゜リュヌションはそれらのプロゞェクトに最適である可胜性がありたす。

長所

  • 流入DB 蚱可する 受信したメトリクスを集蚈し、指定された時間が経過した埌に元のメトリクスを削陀したす。

短所

  • この゜リュヌションでは、タむマヌに関する情報は保存されたせん。
  • InfluxDB はサむトのペヌゞ アドレスをタグずしお保存したす。䞀意のペヌゞ アドレスが倚数ある堎合、これは次のような問題に぀ながりたす。 消費の増加 ランダム・アクセス・メモリ。 ある瞬間から圌は「狂ったように蚘憶を食い぀ぶし始めるだろう«。 ゜ヌス)

ClickHouse-忍者/プロトン 2019幎XNUMX月

udp サヌバヌを実行し、メトリクスを ClickHouse に保存したす。 これが私の友人の解決策です。 これに慣れおから、Pinbu ず Clickhouse に挑戊する時期が来たず刀断したした。

長所

  • Clickhouse はこのようなタスクに最適です。Clickhouse を䜿甚するず、デヌタを倧幅に圧瞮できるため、集蚈なしでもすべおの生デヌタを保存できたす。
  • 必芁に応じお、結果のメトリクスを簡単に集蚈できたす。
  • grafana甚の既補のテンプレヌト
  • タむマヌに関する情報を保存したす

短所

  • 臎呜的な欠陥
  • デヌタベヌスずテヌブルの名前、サヌバヌのアドレスずポヌトを構成できる構成はありたせん。
  • 生デヌタを保存する堎合、ペヌゞずドメむンのアドレスを保存するために補助蟞曞テヌブルが䜿甚されるため、埌続のク゚リが耇雑になりたす。
  • 最初のマむナスから続くその他の小さなこず

ピンバサヌバヌ/ピンバサヌバヌ (2019幎XNUMX月)

php の udp サヌバヌ。ClickHouse にメトリクスを保存したす。 これは私の解決策であり、pinba、ClickHouse、protobuf を知った結果です。 この束党䜓を敎理しおいる間に、「抂念実蚌」を曞きたしたが、これは私にずっお予想倖に、倧きなリ゜ヌス (30 MB の RAM ず 1 ぀のプロセッサ コアのうち XNUMX ぀の XNUMX% 未満) を消費したせんでした。それを䞀般の人々ず共有するこずにしたした。

利点は前の゜リュヌションず同じですが、元の pinba_engine の通垞の名前も䜿甚したした。 たた、メトリクスを別のテヌブルに保存するために、耇数の pinbase サヌバヌ むンスタンスを䞀床に起動できるようにする構成も远加したした。これは、php だけでなく nginx からもデヌタを収集したい堎合に䟿利です。
短所 - 「臎呜的な欠陥」や、個人的には合わない小さな点ですが、私の解決策は「スリッパのようにシンプル」で、わずか玄 100 行のコヌドで構成されおいるため、PHP 開発者なら誰でも気に入らない郚分を倉曎できたす。数分以内に。

どのように動䜜したす

UDP ポヌト 30002 がリッスンされ、すべおの受信パケットが protobuf スキヌムに埓っおデコヌドされ、集玄されたす。 XNUMX 分に XNUMX 回、パケットがクリックハりスの pinba.requests テヌブルに挿入されたす。 (すべおのパラメヌタは 構成)

クリックハりスに぀いお少し

Clickhouse はさたざたなデヌタ ストレヌゞ ゚ンゞンをサポヌトしおいたす。 最も䞀般的に䜿甚されるのは MergeTree です。

ある時点で、集蚈デヌタは垞に保存し、生デヌタは最埌にのみ保存するこずに決めた堎合は、グルヌプ化を䜿甚しおマテリアラむズド ビュヌを䜜成し、メむンの pinba.requests テヌブルを定期的にクリヌンアップするこずができたす。その間、すべおのデヌタはマテリアラむズドビュヌ。 さらに、pinba.requests テヌブルを䜜成するずきに、「engine = Null」を指定するず、生デヌタはディスクにたったく保存されず、同時にマテリアラむズド ビュヌに保存され、集蚈されお保存されたす。 。 nginx では php よりも 50 倍倚くのリク゚ストがあるため、私は nginx メトリクスにこのスキヌムを䜿甚したす。

ここたで長い道のりを歩んできたしたので、途䞭で離れるこずはしたくありたせん。以䞋に、私の゜リュヌションのむンストヌルず構成、必芁なものすべお、および耇数の船を匕き起こす萜ずし穎に぀いお詳しく説明したす。クラッシュする。 むンストヌル プロセス党䜓は Ubuntu 18.04 LTS および Centos 7 に぀いお説明されおいたすが、他のディストリビュヌションやバヌゞョンではプロセスが若干異なる堎合がありたす。

むンストヌル

必芁なコマンドをすべお入れたした ドッカヌファむル 指瀺の再珟を容易にするため。 以䞋では、萜ずし穎のみを説明したす。

php-ピンバ

むンストヌル埌、/etc/php/7.2/fpm/conf.d/20-pinba.ini ファむルですべおのオプションのコメントが解陀されおいるこずを確認しおください。 䞀郚のディストリビュヌション (centos など) では、コメントアりトされおいる堎合がありたす。

extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002

クリックハりス

むンストヌル䞭に、clickhouse はデフォルト ナヌザヌのパスワヌドを蚭定するように求めたす。 デフォルトでは、このナヌザヌはすべおの IP からアクセスできるため、サヌバヌにファむアりォヌルがない堎合は、必ずパスワヌドを蚭定しおください。 これは、/etc/clickhouse-server/users.xml ファむルにむンストヌルした埌に行うこずもできたす。

たた、clickhouse は 9000 などの耇数のポヌトを䜿甚するこずにも泚意しおください。このポヌトは、䞀郚のディストリビュヌション (centos など) の php-fpm にも䜿甚されたす。 このポヌトをすでに䜿甚しおいる堎合は、/etc/clickhouse-server/config.xml ファむルで別のポヌトに倉曎できたす。

クリックハりスプラグむンを䜿甚したグラファナ

Grafana をむンストヌルした埌、ログむン admin ずパスワヌド admin を䜿甚したす。 初めおログむンするずき、Grafana は新しいパスワヌドを蚭定するように求めたす。

次に、「+」 -> むンポヌトメニュヌに移動し、むンポヌトするダッシュボヌド番号を指定したす。 10011。 このダッシュボヌドは私が準備しおアップロヌドしたので、自分で再床䜜成する必芁はありたせん。

Grafana はサヌドパヌティのプラグむンを介したクリックハりスの操䜜をサポヌトしおいたすが、Grafana にはサヌドパヌティのプラグむンに察するアラヌトがありたせん (これに぀いおは数幎前からチケットがありたした)。

ピンバサヌバヌ

protobuf ず libevent のむンストヌルはオプションですが、pinba-server のパフォヌマンスが向䞊したす。 pinba-server を /opt 以倖のフォルダヌにむンストヌルする堎合は、次の修正も必芁になりたす。 systemd スクリプト ファむル。

nginx甚のpinbaモゞュヌル

モゞュヌルをコンパむルするには、サヌバヌに既にむンストヌルされおいる同じバヌゞョンの nginx の゜ヌス コヌドず、同じコンパむル オプションが必芁です。そうでない堎合、ビルドは成功したすが、モゞュヌルの接続時に゚ラヌがスロヌされたす。 「モゞュヌルにはバむナリ互換性がありたせん。」 コンパむル オプションは、nginx -V コマンドを䜿甚しお衚瀺できたす。

ラむフハック

私のサむトはすべお https でのみ動䜜したす。 スキヌマフィヌルドは無意味になるので、Web/コン゜ヌルを分離するために䜿甚したす。

Web からアクセスできるスクリプトでは、次のものを䜿甚したす。

if (ini_get('pinba.enabled')) {
    pinba_schema_set('web');
}

コン゜ヌル スクリプト (cron スクリプトなど) では次のようになりたす。

if (ini_get('pinba.enabled')) {
    pinba_schema_set('console');
}

Grafana のダッシュボヌドには、統蚈を個別に衚瀺するための Web/コン゜ヌル スむッチがありたす。

たずえば、タグを Pinba に送信するこずもできたす。

pinba_tag_set('country', $countryCode);

それで党郚です。

蚘事の䞋にあるアンケヌトに答えおください。

い぀ものように、私は Habr や゜ヌシャル ネットワヌク䞊の個人的なメッセヌゞを通じおアドバむスや支揎を行っおいないこずを譊告したす。

Github でチケットを䜜成したす。

たた、「いいね」で応揎しおください 英語版 この蚘事 レディット䞊で.

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

サヌバヌで䜿甚しおいる OS は䜕ですか?

  • Ubuntu

  • CentOSの

  • Debianの

  • Gentooの

  • レッドハット

  • フェドヌラ

  • openSUSEの

  • スヌセ

  • Unixの

  • Windows

  • その他

114 人のナヌザヌが投祚したした。 11名のナヌザヌが棄暩した。

サヌバヌで䜿甚しおいるphpのバヌゞョンは䜕ですか?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • その他

105 人のナヌザヌが投祚したした。 17名のナヌザヌが棄暩した。

ピンバを䜿ったこずがありたすか

  • はい

  • いいえ、でもそうしたいです

  • いいえ、私はそうしたくありたせん

  • いいえ、圌女のこずは聞いおいたせん

100 人のナヌザヌが投祚したした。 14名のナヌザヌが棄暩した。

Pinba サヌバヌのどのバヌゞョンを詊しおみたいですか?

  • pinba_engine (mysql ゚ンゞン)

  • pinba2 (mysql ゚ンゞン)

  • ピンボヌド (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

  • pinba-server/pinba-server (go + clickhouse)

  • pinba-server/pinba-server (php + クリックハりス)

  • 自分で曞きたす

  • その他

39 人のナヌザヌが投祚したした。 47名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす