ホームページ >バックエンド開発 >PHPチュートリアル >PHP はオープンソース ELK ログ分析プラットフォームを実装します

PHP はオープンソース ELK ログ分析プラットフォームを実装します

WBOY
WBOYオリジナル
2023-06-18 21:22:222176ブラウズ

インターネットと情報技術の継続的な発展に伴い、ログ分析は企業ビジネス、ネットワーク セキュリティ、およびシステム最適化プロセスに不可欠な部分になりました。これまでのログ分析手法は主に手動での読み取り、フィルタリング、分析に依存していましたが、大量のデータの場合は困難でした。ログ分析プラットフォームの登場により、ログデータを効率的かつ正確に処理できるようになり、データの価値がさらに高まります。この記事では、PHP を使用して実装されたオープンソースの ELK ログ分析プラットフォームを紹介します。

1. ELK の概要

ELK は、Elasticsearch、Logstash、Kibana の 3 つのオープン ソース ソフトウェアの略称です。 Elasticsearch は、大量のデータを処理して迅速にクエリを実行できる Lucene ベースの検索エンジンです。Logstash は、さまざまなログを収集、解析、フィルタリング、変換できるオープンソースのログ収集および処理ツールです。Kibana は、データ処理ツールです。さまざまなチャートやダッシュボードを迅速に生成できる対話型ツールも含まれます。

ELK は、簡単な使用、効率的なパフォーマンス、強力な拡張性などの特徴を持ち、複数のデータ ソースをサポートします。これは、企業がシステムやアプリケーションの実行ステータスを監視するための強力なログ分析プラットフォームを迅速に構築するのに役立ちます。

2. PHP は ELK を実装します

ELK を使用するプロセスでは、通常、Logstash を使用してログを収集、解析、変換し、データを Elasticsearch に保存します。画面。一般的なサーバーサイド スクリプト言語である PHP は、Logstash および Elasticsearch ライブラリを使用してログを収集および保存することもできます。

1. Logstash のインストール

Logstash のインストールは非常に簡単で、公式 Web サイトのダウンロード ページから該当するバージョンを選択し、指定したディレクトリに解凍します。たとえば、次のコマンドを使用して Linux システムにインストールできます:

curl -L -O https://download.elastic.co/logstash/logstash/logstash-5.5.2.tar.gz
tar -zxvf logstash-5.5.2.tar.gz
cd logstash-5.5.2/bin/
./logstash -e 'input { stdin { } } output { stdout {} }'

上記のコマンドを実行した後、標準入力を介して Logstash が正常にインストールされたかどうかをテストできます。もちろん、ログを収集するための PHP の使用をより適切に導入するには、関連ライブラリもインストールする必要があります。

2. Elasticsearch ライブラリをインストールする

PHP ライブラリの依存関係を管理するために Composer を使用します。 Logstash をインストールした後、次のコマンドを使用して Elasticsearch 依存ライブラリをインストールできます:

composer require elasticsearch/elasticsearch

3. Logstash の設定

Logstash をログ収集に使用する前に、関連するパラメータを設定する必要もあります。ログスタッシュ。まず、Logstash への入力を定義する必要があります。入力設定では、次のような非常に便利なプラグインを使用できます。

  • file: ファイル内のログを読み取るために使用されます。
  • udp、tcp: UDP を読み取るために使用され、 TCP プロトコル ログ
  • syslog: システム Syslog ログの読み取りに使用されます
  • beats: Beats プロトコル ログを直接受信できます

ここでは、ファイル プラグインを使用して読み取りますサーバー上のログ ファイルを解析し、処理します。例:

input {
  file {
    path => "/var/log/apache2/access.log"
    type => "apache_access"
  }
}

次に、Logstash フィルタリングを構成する必要があります。フィルタリングでは、特定のフィールドの抽出、IP アドレスや URL アドレスの解析など、ログを分析および処理できます。以下は単純なフィルターです:

filter {
  if [type] == "apache_access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }

    date {
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
  }
}

次に、Logstash 出力を定義できます。出力では、処理されたデータを Elasticsearch またはデータベース、ファイルなどの他のデータ ストレージ メディアに出力できます。出力構成は次のとおりです:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "changeme"
  }
}

4. PHP を使用してログを収集する

上記の構成を完了すると、PHP を使用してログを収集できます。以下は、Linux またはその他の UNIX に似た環境で実行できる単純な PHP スクリプトです:

<?php

require 'vendor/autoload.php';

use ElasticsearchClientBuilder;

$client = ClientBuilder::create()->build();

$log_path = '/var/log/apache2/access.log';
$log_index = 'apache_access';

if(!file_exists($log_path)) {
  echo "Log file '{$log_path}' not exists.";
  exit;
}

$file_size = filesize($log_path);
if($file_size == 0) {
  exit;
}

$lines = file($log_path);
if(empty($lines)) {
  exit;
}

foreach($lines as $line) {
  $log = [];
  $log['@timestamp'] = date('c');
  $log['message'] = $line;
  $log['type'] = $log_index;

  $params = [
    'body' => $log,
    'index' => 'logs',
    'type' => $log_index
  ];

  $response = $client->index($params);
}

上記のコードでは、最初に Elasticsearch クライアント ライブラリを使用してクライアント インスタンスを作成します。次に、$log_path 変数を定義して、読み取るログ ファイルのパスを指定します。次に、file_exists() 関数を使用してファイルが存在するかどうかを確認し、filesize() 関数を使用してファイル サイズを取得し、file() 関数を使用してファイルの内容を読み取ります。

foreach ループでは、ファイル内の各行を走査し、ログの各行の形式を $log 配列に保存します。ここでは、ログの種類と現在のタイムスタンプも $log 配列に保存します。最後に、Elasticsearch の Index() メソッドを使用して、$log 配列を Elasticsearch に送信します。

3. 概要

上記の紹介を通じて、ELK ログ分析プラットフォームのワークフローを理解することができます。 Logstash を使用してログを収集、解析、変換し、そのデータを Elasticsearch に保存し、Kibana を使用してデータを視覚化し、インタラクティブに表示することで、ログ データを迅速かつ効率的に分析できます。同時に、PHP は一般的なサーバーサイド スクリプト言語として、ログの収集と保存に Logstash ライブラリと Elasticsearch ライブラリを使用することもできます。

以上がPHP はオープンソース ELK ログ分析プラットフォームを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。