PHPで実装されたログ収集システム

不言
リリース: 2023-03-24 10:24:02
オリジナル
2266 人が閲覧しました

この記事では、主に PHP で実装されたログ収集システムを紹介します。これは、必要な友人に参考にしていただけるよう、共有します。制限 テクノロジースタックを拡張するというアイデアは、PHP を使用して実装されました。

実装プロセス中に注意が必要ないくつかの点が次のように記録されます。

1. アクティブな取得。 Flume などのアーキテクチャを使用する場合、各サーバーにソフトウェアをインストールする必要があります。そのため、コレクターがアクティブに取得する方法を使用します。

2. SSH 接続。各サーバーには SSH 接続権限が設定されており、PHP の ssh2 拡張機能を使用してサーバーのコンテンツにリモート接続します。


3. 各サーバーのログ ファイルは同じディレクトリ ルールに従って配置されます。

4 .CLI 操作は継続的に実行されるプログラムです。このとき使用される INI ファイルに問題があることに注意してください。

5. 、ネットワークの問題により、SSH 接続または検証が失敗し、遅延しています。もう一度お試しください。

6. 通常、当社の運用およびメンテナンスでは、毎日一定の時間にログの切り捨てと圧縮が行われます。読み取る必要があるファイルの種類: 圧縮と圧縮されていないログは個別に処理する必要があります。

7. ログ内のタイムスタンプは秒単位では不十分なので、ミリ秒単位で測定するために $msec を増やします。同じミリ秒以内、同じ IP ソース、同じ UA がリクエストと見なされます。

8. ディレクトリを読み取ります。readdir を使用して SSH 形式でリモート ディレクトリを読み取ります (readdir("ssh2.sft://.. ."); 不要なファイルをフィルタリングする ファイルが作成されたら、ファイルの作成時刻でソートし、1 つずつ処理します。

9. 圧縮ファイルを読み込みます。 file_get_contents を使用すると、インターフェイスが長時間応答しなくなります。 fopen と fread を使用して、一度に 8K を読み取りました (どれだけ大きくても役に立ちません)。

10圧縮ファイルのキャッシュ。読み込みが成功したら、バックアップおよび次回使用するためにキャッシュ ディレクトリに保存します。キャッシュ ファイルがある場合は、最初にキャッシュ ディレクトリを確認する必要はありません。

11. gzdecode を使用すると、PHP のメモリが大幅に増加します。処理後のログ処理が完了します。圧縮ファイルであるため、今後 PHP プログラムを実行した後、処理を繰り返す必要はありません。 非圧縮 ログは、このログがまだ増加していることを示します。キャッシュは必要ありません。 データベース レコード、現在のファイル ポインターを使用します。


ファイルの作成日が同じである場合。 同時ではありません。 、またはファイルがレコード内のファイル サイズより小さい場合は、ファイルが更新され、ファイル ポインターをリセットする必要があることを意味します

それ以外の場合は、最後に処理された位置から続行するために直接位置決め (fseek) することができます。

15 . 通常のルールを使用して、スペースと区切り文字に従って区別します。また、メモリのオーバーヘッドを節約するために、Iterator コルーチン モードを使用することもできます。

16 .ログの重み判定。IP と UA を事前に読み取ります。ログの保存には MYSQL を使用します。 MYSQL のログは 1 行ごとに非常に膨大になります。実行時間を無駄にするために、SSH 接続の失敗に加えて、それらをすべて一度に挿入することもできます。読み取り、分解が失敗し、この時点でメイン プログラムによって例外がスローされ、再度実行されます。

関連する推奨事項:

php ログ書き込み関数


phpはログ機能を実装します

以上がPHPで実装されたログ収集システムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート