ELKスタックはElasticスタックとも呼ばれ、Elasticsearch、Logstash、およびKibanaで構成されます。すべてのログを1つの場所に保存し、特定の時間のイベントを相互に関連付けることで問題を分析するのに役立ちます。
このガイドは、ELKスタックのインストールに役立ちます CentOS 7 / RHEL 7 。
コンポーネント
ログスタッシュ –ビート(フォワーダー)によって送信された受信ログの処理(収集、エンリッチ、Elasticsearchへの送信)を行います。
Elasticsearch – Logstashからの受信ログを保存し、ログ/データをリアルタイムで検索する機能を提供します
キバナ –ログの視覚化を提供します。
ビート –クライアントマシンにインストールされ、beatsプロトコルを介してLogstashにログを送信します。
環境
フル機能のELKスタックを使用するには、ログの収集をテストするために2台のマシンが必要になります。
ELKスタック
Operating system : CentOS 7 Minimal IP Address : 192.168.1.10 HostName : server.itzgeek.local
ファイルビート
Operating System : CentOS 7 Minimal IP Address : 192.168.1.20 HostName : client.itzgeek.local
前提条件
Javaのインストール
ElasticsearchはJavaに基づいているため、OpenJDKまたはOracleJDKのいずれかがマシンにインストールされていることを確認してください。
読む : CentOS 7 /RHEL7にOracleJava8をインストールする方法
ここでは、OpenJDK1.8を使用しています。
yum -y install java-1.8.0 wget
Javaのバージョンを確認してください。
java -version
出力:
java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
ELKリポジトリの構成
Elastic署名キーをインポートします。
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Elasticsearchリポジトリをセットアップしてインストールします。
vi /etc/yum.repos.d/elk.repo
以下のコンテンツをelk.repoに追加します ファイル。
[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Elasticsearchをインストールする
Elasticsearchはオープンソースの検索エンジンであり、RESTfulWebインターフェースを使用してリアルタイムの分散検索と分析を提供します。 Elasticsearchは、Logstashによって送信されたすべてのデータを保存し、ユーザーの要求に応じてWebインターフェイス(Kibana)を介して表示します。
Elasticsearchをインストールします。
yum install -y elasticsearch
システムの起動中に開始するようにElasticsearchを構成します。
systemctl daemon-reload systemctl enable elasticsearch systemctl start elasticsearch
CURLを使用して、Elasticsearchがクエリに応答しているかどうかを確認します。
curl -X GET http://localhost:9200
出力:
{ "name" : "1DwGO86", "cluster_name" : "elasticsearch", "cluster_uuid" : "xboS_6K5Q2OO1XA-QJ9GIQ", "version" : { "number" : "6.4.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "595516e", "build_date" : "2018-08-17T23:18:47.308994Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Logstashのインストール
Logstashは、イベントとログを管理するためのオープンソースツールであり、ログを収集して解析し、Elasticsearchに保存して検索します。 Logstashでは160以上のプラグインを利用でき、追加の作業なしでさまざまなタイプのイベントを処理する機能を提供します。
Logstashパッケージをインストールします。
yum -y install logstash
SSL証明書の作成(オプション)
Filebeat(Logstash Forwarder)は通常、クライアントサーバーにインストールされ、SSL証明書を使用して、安全な通信のためにLogstashサーバーのIDを検証します。
ホスト名またはIPSANのいずれかを使用してSSL証明書を作成します。
オプション1:(ホスト名FQDN)
ビート(フォワーダー)構成でLogstashサーバーのホスト名を使用する場合は、LogstashサーバーのAレコードがあることを確認し、クライアントマシンがLogstashサーバーのホスト名を解決できることも確認してください。
OpenSSLディレクトリに移動します。
cd /etc/pki/tls/
次に、SSL証明書を作成します。 緑を交換してください 1つは実際のLogstashサーバーのホスト名です。
openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt -subj /CN=server.itzgeek.local
オプション2:(IPアドレス)
ホスト名の代わりにIPアドレスを使用することを計画している場合は、手順に従ってIPSANのSSL証明書を作成してください。
IP SAN証明書を作成するには、LogstashサーバーのIPアドレスをOpenSSL構成ファイルのSubjectAltNameに追加する必要があります。
vi /etc/pki/tls/openssl.cnf
「[v3_ca]」セクションを探して、緑を置き換えます 1つはLogstashサーバーのIPです。
subjectAltName = IP:192.168.1.10
OpenSSLディレクトリに移動します。
cd /etc/pki/tls/
次に、次のコマンドを実行してSSL証明書を作成します。
openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crtこのlogstash-forwarder.crt Logstashサーバーにログを送信するすべてのクライアントマシンにコピーする必要があります。
Logstashの構成
Logstashの構成は、 /etc/logstash/conf.d/にあります。 。 Logstash構成ファイルは、入力、フィルター、および出力の3つのセクションで構成されています。 3つのセクションはすべて、1つのファイルにあるか、.confで終わる個別のファイルにあります。
入力、フィルター、出力セクションの配置には1つのファイルを使用することをお勧めします。
vi /etc/logstash/conf.d/logstash.conf
最初のセクションでは、入力構成のエントリを入力します。次の構成では、クライアントマシンにあるビート(フォワーダー)からの着信ログをポート5044でリッスンするようにLogstashを設定します。
また、安全な通信のために入力セクションにSSL証明書の詳細を追加します–オプション。
input { beats { port => 5044 # Set to False if you do not use SSL ssl => true # Delete below linesif you do not use SSL ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
フィルタセクション。 Elasticsearchに送信する前に、Grokを使用してログを解析します。次のgrokフィルターは、 syslogを検索します ログにラベルを付け、それらを解析して構造化インデックスを作成しようとします。
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGLINE}" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
その他のフィルターパターンについては、grokdebuggerページをご覧ください。
出力セクションでは、ログを保存する場所を定義します。明らかに、Elasticsearchである必要があります。
output { elasticsearch { hosts => localhost index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }
次に、Logstashサービスを開始して有効にします。
systemctl start logstash systemctl enable logstash
Logstashログを確認することで、問題のトラブルシューティングを行うことができます。
cat /var/log/logstash/logstash-plain.log
Kibanaのインストールと構成
Kibanaは、Elasticsearchに保存されているログの視覚化を提供します。次のコマンドを使用してKibanaをインストールします。
yum -y install kibana
kibana.ymlファイルを編集します。
vi /etc/kibana/kibana.yml
デフォルトでは、Kibanaはローカルホストでリッスンします。つまり、外部マシンからKibanaインターフェースにアクセスすることはできません。許可するには、以下の行をマシンのIPで編集します。
server.host: "192.168.1.10"
次の行のコメントを解除し、ElasticsearchインスタンスのURLで更新します。私の場合、ローカルホストです。
elasticsearch.url: "http://localhost:9200"
システムの起動時にkibanaを起動して有効にします。
systemctl start kibana systemctl enable kibana
ファイアウォール
ELKスタックノードでファイアウォールを構成して、クライアントマシンからログを受信します。
5044 –Logstashがログを受信するための
5061 –外部マシンからKibanaインターフェースにアクセスするため。
firewall-cmd --permanent --add-port=5044/tcp firewall-cmd --permanent --add-port=5601/tcp firewall-cmd --reload
次に、ログをLogstashサーバーに送信するようにビートを構成します。
Filebeatのインストールと構成
利用可能な4つのビートクライアントがあります
- パケットビート –ネットワークパケットデータを分析します。
- ファイルビート –ログデータへのリアルタイムの洞察。
- トップビート –インフラストラクチャデータから洞察を得る。
- メトリックビート –メトリックをElasticsearchに送信します。
クライアントマシン(例:client.itzgeek.local)のシステムログを分析するには、filebeatをインストールする必要があります 。 beats.repoファイルを作成します。
vi /etc/yum.repos.d/beats.repo
以下のコンテンツを上記のリポジトリファイルに追加します。
[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
次に、次のコマンドを使用してFilebeatをインストールします。
yum -y install filebeat
ご使用の環境にDNSサーバーがない場合に備えて、クライアントマシンにホストエントリを設定します 。
vi /etc/hosts
クライアントマシンで以下のようなホストエントリを作成します。
192.168.1.10 server.itzgeek.local server
Filebeat(beats)は、LogstashサーバーIDの検証にSSL証明書を使用するため、 logstash-forwarder.crtをコピーします。 Logstashサーバーからクライアントへ。
LogstashでSSLを使用していない場合は、この手順をスキップしてください。
scp -pr [email protected]:/etc/pki/tls/certs/logstash-forwarder.crt /etc/ssl/certs/
Filebeat構成ファイルはYAML形式であるため、インデントが非常に重要です。ガイドで使用されているのと同じ数のスペースを使用してください。
filebeat構成ファイルを開きます。
vi /etc/filebeat/filebeat.yml
上部に、プロスペクターセクションが表示されます。ここでは、Logstashに送信するログとその処理方法を指定する必要があります。各プロスペクターは–で始まります キャラクター。
テストの目的で、 / var / log / messagesを送信するようにfilebeatを構成します Logstashサーバーへ。これを行うには、パスの下にある既存のプロスペクターを変更します セクション。
–/var/log/*.logをコメントアウトします すべての.logを送信しないようにするため そのディレクトリに存在するファイルをLogstashに送信します。
filebeat.inputs: - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. paths: - /var/log/messages # - /var/log/*.log . . .
セクションoutput.elasticsearch:をコメントアウトします ログをElasticsearchに直接保存することはないためです。
ここで、 output.logstashという行を見つけます。 以下のようにエントリを変更します。このセクションでは、ログをLogstashサーバー server.itzgeek.localに送信するためのfilebeatを定義します。 ポート5044 コピーされたSSL証明書が配置されるパスについて言及します
IP SANを使用している場合は、server.itzgeek.localをIPアドレスに置き換えてください 。
. . . output.logstash: # The Logstash Server hosts: ["server.itzgeek.local:5044"] # Comment out this line if Logstash is not using SSL ssl.certificate_authorities: ["/etc/ssl/certs/logstash-forwarder.crt"] . . .
サービスを再開します。
systemctl restart filebeat
Beatsログは通常syslogファイルにあります。
cat /var/log/filebeat/filebeat
Kibanaにアクセス
次のURLを使用してKibanaにアクセスします。
http:// your-ip-address:5601 /Kibanaのホームページが表示されます。

最初のログイン時に、filebeatインデックスをマップする必要があります。 管理に移動します>>インデックスパターン 。

インデックスパターンに次のように入力します ボックス。
filebeat-*

上記のようなファイルビートインデックスが少なくとも1つ表示されます。 [次のステップ]をクリックします。
@timestampを選択します 次に、C reate をクリックします 。
@timestamp

インデックスパターンとそのマッピングを確認します。

次に、[検出]をクリックして、受信ログを表示し、検索クエリを実行します。

以上です。