CentOS7にElasticsearch1.7、Logstash1.5、およびKibana4.1(ELKスタック)をインストールする方法
注:このチュートリアルは、最新バージョンと互換性のない古いバージョンのELKスタックを対象としています。 このチュートリアルの最新バージョンは、 CentOS 7 にElasticsearch、Logstash、およびKibana(ELKスタック)をインストールする方法で入手できます。
序章
このチュートリアルでは、CentOS7へのElasticsearchELKスタックのインストールについて説明します。つまり、Elasticsearch 1.7.3、Logstash 1.5.4、およびKibana4.1.1です。 また、一元化された場所でシステムのsyslogを収集して視覚化するように構成する方法についても説明します。 Logstashは、将来使用するためにログを収集、解析、および保存するためのオープンソースツールです。 Kibanaは、Logstashがインデックスを作成したログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。
一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に役立ちます。これにより、すべてのログを1か所で検索できるようになります。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるので便利です。
Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。
私たちの目標
チュートリアルの目的は、複数のサーバーのsyslogを収集するようにLogstashを設定し、収集されたログを視覚化するようにKibanaを設定することです。
Logstash / Kibanaのセットアップには、次の4つの主要コンポーネントがあります。
- Logstash :受信ログを処理するLogstashのサーバーコンポーネント
- Elasticsearch :すべてのログを保存します
- Kibana :Nginxを介してプロキシされるログを検索および視覚化するためのWebインターフェイス
- Logstash Forwarder :Logstashにログを送信するサーバーにインストールされたLogstash Forwarderは、lumberjackネットワーキングプロトコルを利用してLogstashと通信するログ転送エージェントとして機能します。
最初の3つのコンポーネントを単一のサーバーにインストールします。これをLogstashサーバーと呼びます。 Logstash Forwarderは、ログを収集するすべてのクライアントサーバーにインストールされます。これをまとめてクライアントサーバーと呼びます。
前提条件
このチュートリアルを完了するには、CentOS7VPSへのルートアクセスが必要です。 これを設定する手順は、ここにあります(手順3および4): CentOS7を使用したサーバーの初期設定。
代わりにUbuntuを使用したい場合は、次のチュートリアルを確認してください: Ubuntu14.04にELKをインストールする方法。
Logstashサーバーに必要なCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。
- OS:CentOS 7
- RAM:4GB
- CPU:2
Logstashサーバーに加えて、ログを収集するサーバーをいくつか用意する必要があります。
Logstashサーバーのセットアップを始めましょう!
Java8をインストールします
ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨する最新バージョンのOracleJava8をインストールします。 ただし、そのルートを選択する場合は、OpenJDKで正常に機能するはずです。 このセクションの手順に従うことは、JavaSEのOracleBinaryLicenseAgreementに同意することを意味します。
ホームディレクトリに移動し、次のコマンドを使用してOracle Java 8(Update 65)JDKRPMをダウンロードします。
cd ~ wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm"
次に、このyumコマンドを使用してRPMをインストールします(別のリリースをダウンロードした場合は、ここでファイル名に置き換えてください)。
sudo yum localinstall jdk-8u65-linux-x64.rpm
これで、Javaが/usr/java/jdk1.8.0_65/jre/bin/java
にインストールされ、/ usr / bin/javaからリンクされるはずです。
以前にダウンロードしたアーカイブファイルを削除できます。
rm ~/jdk-8u65-linux-x64.rpm
Java 8がインストールされたので、ElasticSearchをインストールしましょう。
Elasticsearchをインストールする
Elasticsearchは、Elasticのパッケージリポジトリを追加することにより、パッケージマネージャーとともにインストールできます。
次のコマンドを実行して、Elasticsearchの公開GPGキーをrpmにインポートします。
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Elasticsearch用の新しいyumリポジトリファイルを作成および編集します。
sudo vi /etc/yum.repos.d/elasticsearch.repo
次のリポジトリ構成を追加します。
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages baseurl=http://packages.elastic.co/elasticsearch/1.7/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
保存して終了。
次のコマンドでElasticsearchをインストールします。
sudo yum -y install elasticsearch
Elasticsearchがインストールされました。 構成を編集しましょう:
sudo vi /etc/elasticsearch/elasticsearch.yml
Elasticsearchインスタンス(ポート9200)への外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticsearchクラスターをシャットダウンしたりできないようにする必要があります。 network.host
を指定する行を見つけてコメントを外し、その値を「localhost」に置き換えて、次のようにします。
Elasticsearch.ymlの抜粋(更新)
network.host: localhost
elasticsearch.yml
を保存して終了します。
次にElasticsearchを起動します。
sudo systemctl start elasticsearch
次に、次のコマンドを実行して、起動時にElasticsearchを自動的に開始します。
sudo systemctl enable elasticsearch
Elasticsearchが稼働しているので、Kibanaをインストールしましょう。
Kibanaをインストールする
KibanaパッケージはElasticsearchと同じGPGキーを共有しており、その公開キーはすでにインストールされているので、Kibanaの新しいYumリポジトリファイルを作成して編集しましょう。
Kibanaの新しいyumリポジトリファイルを作成および編集します。
sudo vi /etc/yum.repos.d/kibana.repo
次のリポジトリ構成を追加します。
/etc/yum.repos.d/kibana.repo
[kibana-4.1] name=Kibana repository for 4.1.x packages baseurl=http://packages.elastic.co/kibana/4.1/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
保存して終了。
次のコマンドでKibanaをインストールします。
sudo yum -y install kibana
Kibana構成ファイルを開いて編集します。
sudo vi /opt/kibana/config/kibana.yml
Kibana構成ファイルで、host
を指定する行を見つけ、IPアドレス(デフォルトでは「0.0.0.0」)を「localhost」に置き換えます。
kibana.ymlの抜粋(更新)
host: "localhost"
保存して終了。 この設定により、Kibanaはローカルホストのみがアクセスできるようになります。 Nginxリバースプロキシを同じサーバーにインストールして外部アクセスを許可するため、これは問題ありません。
次に、Kibanaサービスを開始し、有効にします。
sudo systemctl start kibana sudo chkconfig kibana on
Kibana Webインターフェースを使用する前に、リバースプロキシを設定する必要があります。 Nginxを使って今それをやってみましょう。
Nginxをインストールします
localhost
でリッスンするようにKibanaを構成したため、外部アクセスを許可するようにリバースプロキシを設定する必要があります。 この目的のためにNginxを使用します。
注:使用するNginxインスタンスが既にある場合は、代わりにそれを自由に使用してください。 Nginxサーバーから到達できるようにKibanaを構成してください(/opt/kibana/config/kibana.yml
のhost
値をKibanaサーバーのプライベートIPアドレスに変更することをお勧めします)。 また、SSL/TLSを有効にすることをお勧めします。
EPELリポジトリをyumに追加します。
sudo yum -y install epel-release
次に、yumを使用してNginxとhttpd-toolsをインストールします。
sudo yum -y install nginx httpd-tools
htpasswdを使用して、Kibana Webインターフェイスにアクセスできる「kibanaadmin」(別の名前を使用する必要があります)という管理ユーザーを作成します。
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
プロンプトでパスワードを入力します。 Kibana Webインターフェースにアクセスするために必要になるため、このログインを覚えておいてください。
次に、お気に入りのエディターでNginx構成ファイルを開きます。 viを使用します:
sudo vi /etc/nginx/nginx.conf
ファイルの最後の構成ブロックであるデフォルトのサーバーブロック(server {
で始まる)を見つけて削除します。 完了すると、ファイルの最後の2行は次のようになります。
nginx.confの抜粋
include /etc/nginx/conf.d/*.conf; }
保存して終了。
次に、新しいファイルにNginxサーバーブロックを作成します。
sudo vi /etc/nginx/conf.d/kibana.conf
次のコードブロックをファイルに貼り付けます。 サーバーの名前と一致するようにserver_name
を更新してください。
/etc/nginx/conf.d/kibana.conf
server { listen 80; server_name example.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
保存して終了。 これにより、サーバーのHTTPトラフィックをlocalhost:5601
でリッスンしているKibanaアプリケーションに転送するようにNginxが構成されます。 また、Nginxは以前に作成したhtpasswd.users
ファイルを使用するため、基本認証が必要です。
次に、Nginxを起動して有効にし、変更を有効にします。
sudo systemctl start nginx sudo systemctl enable nginx
注:このチュートリアルは、SELinuxが無効になっていることを前提としています。 そうでない場合、Kibanaを正しく機能させるには、次のコマンドを実行する必要があります。sudo setsebool -P httpd_can_network_connect 1
これで、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してKibanaにアクセスできます。 http://logstash_server_public_ip/。 Webブラウザーでそこにアクセスすると、「kibanaadmin」クレデンシャルを入力した後、インデックスパターンの構成を求めるKibanaウェルカムページが表示されます。 他のすべてのコンポーネントをインストールした後、後でそれに戻りましょう。
Logstashをインストールします
LogstashパッケージはElasticsearchと同じGPGキーを共有しており、その公開キーはすでにインストールされているので、Logstash用の新しいYumリポジトリファイルを作成して編集しましょう。
sudo vi /etc/yum.repos.d/logstash.repo
次のリポジトリ構成を追加します。
/etc/yum.repos.d/logstash.repo
[logstash-1.5] name=logstash repository for 1.5.x packages baseurl=http://packages.elasticsearch.org/logstash/1.5/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
保存して終了。
次のコマンドでLogstash1.5をインストールします。
sudo yum -y install logstash
Logstashはインストールされていますが、まだ構成されていません。
SSL証明書を生成する
Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーのペアを作成する必要があります。 この証明書は、LogstashForwarderがLogstashサーバーのIDを確認するために使用されます。
これで、SSL証明書を生成するための2つのオプションがあります。 クライアントサーバーがLogstashサーバーのIPアドレスを解決できるようにするDNS設定がある場合は、オプション2を使用します。 それ以外の場合は、オプション1でIPアドレスを使用できます。
オプション1:IPアドレス
LogstashサーバーのIPアドレスを解決するために、ログを収集するサーバーを許可するDNS設定がない場合は、LogstashサーバーのプライベートIPアドレスを[に追加する必要があります。 X217X](SAN)生成しようとしているSSL証明書のフィールド。 これを行うには、OpenSSL構成ファイルを開きます。
sudo vi /etc/pki/tls/openssl.cnf
ファイル内の[ v3_ca ]
セクションを見つけて、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えます)。
openssl.cnfの抜粋
subjectAltName = IP: logstash_server_private_ip
保存して終了。
次に、次のコマンドを使用して、SSL証明書と秘密鍵を適切な場所(/ etc / pki / tls /)に生成します。
cd /etc/pki/tls sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
logstash-forwarder.crt ファイルは、ログをLogstashに送信するすべてのサーバーにコピーされますが、少し後で行います。 Logstashの構成を完了しましょう。 このオプションを使用した場合は、オプション2をスキップして、Logstashの構成に進みます。
オプション2:FQDN(DNS)
プライベートネットワークでDNSを設定している場合は、LogstashサーバーのプライベートIPアドレスを含むAレコードを作成する必要があります。このドメイン名は次のコマンドでSSL証明書を生成するために使用されます。 または、サーバーのパブリックIPアドレスを指すレコードを使用することもできます。 サーバー(ログを収集するサーバー)がドメイン名をLogstashサーバーに解決できることを確認してください。
次に、次のコマンドを使用して、適切な場所(/ etc / pki / tls /…)にSSL証明書と秘密鍵を生成します(LogstashサーバーのFQDNに置き換えます)。
cd /etc/pki/tls sudo openssl req -subj '/CN=logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
logstash-forwarder.crt ファイルは、ログをLogstashに送信するすべてのサーバーにコピーされますが、少し後で行います。 Logstashの構成を完了しましょう。
Logstashを構成する
Logstash構成ファイルはJSON形式であり、/ etc / logstash/conf.dにあります。 構成は、入力、フィルター、および出力の3つのセクションで構成されます。
01-lumberjack-input.conf
という構成ファイルを作成し、「木こり」入力(Logstash Forwarderが使用するプロトコル)を設定しましょう。
sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
次の入力構成を挿入します。
/etc/logstash/conf.d/01-lumberjack-input.conf
input { lumberjack { port => 5043 type => "logs" ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
保存して終了します。 これは、tcpポート5043
でリッスンするlumberjack
入力を指定し、前に作成したSSL証明書と秘密鍵を使用します。
次に、10-syslog.conf
という構成ファイルを作成します。ここで、syslogメッセージのフィルターを追加します。
sudo vi /etc/logstash/conf.d/10-syslog.conf
次のsyslogfilter構成を挿入します。
/etc/logstash/conf.d/10-syslog.conf
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
保存して終了します。 このフィルターは、(Logstash Forwarderによって)「syslog」タイプとしてラベル付けされたログを検索し、「grok」を使用して着信syslogログを解析し、構造化およびクエリ可能にしようとします。
最後に、30-lumberjack-output.conf
という構成ファイルを作成します。
sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf
次の出力構成を挿入します。
/etc/logstash/conf.d/30-lumberjack-output.conf
output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
保存して終了。 この出力は基本的に、Elasticsearchにログを保存するようにLogstashを構成します。
この構成では、Logstashはフィルターと一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、送信元IPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。
Logstash Forwarder入力を使用する他のアプリケーションにフィルターを追加する場合は、入力構成と出力構成の間でソートされるように、必ずファイルに名前を付けてください(つまり、 01-と30-の間)。
Logstashを再起動して有効にし、構成の変更を有効にします。
sudo systemctl restart logstash
Logstashサーバーの準備ができたので、LogstashForwarderのセットアップに移りましょう。
Logstashフォワーダーのセットアップ(クライアントサーバーの追加)
Logstashサーバーにログを送信するCentOSまたはRHEL7サーバーごとに、これらの手順を実行します。 DebianベースのLinuxディストリビューションにLogstashForwarderをインストールする手順については(例: Ubuntu、Debianなど)、このチュートリアルのUbuntuバリエーションの Build and PackageLogstashForwarderセクションを参照してください。
SSL証明書とLogstashフォワーダーパッケージをコピーする
Logstashサーバーで、SSL証明書をクライアントサーバーにコピーします(クライアントサーバーのIPアドレスと自分のログインを置き換えます)。
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
ログイン資格情報を提供した後、証明書のコピーが成功したことを確認します。 クライアントサーバーとLogstashサーバー間の通信に必要です。
LogstashForwarderパッケージをインストールします
クライアントサーバーで、次のコマンドを作成して実行し、Elasticsearchの公開GPGキーをrpmにインポートします。
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
LogstashForwarderの新しいyumリポジトリファイルを作成および編集します。
sudo vi /etc/yum.repos.d/logstash-forwarder.repo
次のリポジトリ構成を追加します。
/etc/yum.repos.d/logstash-forwarder.repo
[logstash-forwarder] name=logstash-forwarder repository baseurl=http://packages.elastic.co/logstashforwarder/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
保存して終了。
次に、LogstashForwarderパッケージをインストールします。
sudo yum -y install logstash-forwarder
次に、LogstashサーバーのSSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
LogstashForwarderを構成する
クライアントサーバーで、JSON形式のLogstashForwarder構成ファイルを作成および編集します。
sudo vi /etc/logstash-forwarder.conf
network
セクションで、次の行をファイルに追加し、LogstashサーバーのプライベートIPアドレスをlogstash_server_private_IP
に置き換えます。
logstash-forwarder.confの抜粋1/2
"servers": [ "logstash_server_private_IP:5043" ], "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt", "timeout": 15
files
セクション(角かっこの間)の下に、次の行を追加します。
logstash-forwarder.conf抜粋2/2
{ "paths": [ "/var/log/messages", "/var/log/secure" ], "fields": { "type": "syslog" } }
保存して終了します。 これにより、Logstash Forwarderがポート5043(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths セクションは送信するログファイルを指定し(ここではmessages
とsecure
を指定)、typeセクションはこれらのログが「syslog*」と入力します(これは、フィルターが探しているタイプです)。
これは、ポート5043のLogstashへの他のログファイルにLogstashForwarderを構成するためにさらにファイル/タイプを追加する場所であることに注意してください。
次に、Logstash Forwarderを起動して有効にし、変更を適用します。
sudo systemctl start logstash-forwarder sudo chkconfig logstash-forwarder on
これで、LogstashForwarderはsyslogmessages
およびsecure
ファイルをLogstashサーバーに送信します。 ログを収集する他のすべてのサーバーについて、このセクションを繰り返します。
Kibanaに接続する
ログを収集するすべてのサーバーでLogstashForwarderのセットアップが完了したら、前にインストールしたWebインターフェイスであるKibanaを見てみましょう。
Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 「kibanaadmin」クレデンシャルを入力すると、インデックスパターンを構成するように求めるページが表示されます。
ドロップダウンメニューから@timestampを選択し、Createボタンをクリックして最初のインデックスを作成します。
次に、上部のナビゲーションバーにあるDiscoverリンクをクリックします。 デフォルトでは、これにより過去15分間のすべてのログデータが表示されます。 以下のログメッセージとともに、ログイベントのヒストグラムが表示されます。
現時点では、クライアントサーバーからsyslogを収集しているだけなので、それほど多くはありません。 ここでは、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。
次のことを試してください。
- 「root」を検索して、誰かがrootとしてサーバーにログインしようとしていないかどうかを確認します
- 特定のホスト名を検索します(
host: "hostname"
を検索します) - ヒストグラムの領域を選択するか、上のメニューから時間枠を変更します
- ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認してください
Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください。
結論
これで、syslogがElasticsearchとLogstashを介して一元化され、Kibanaでそれらを視覚化できるようになったので、すべての重要なログを一元化することから始めることができます。 Logstashにはほとんどすべてのタイプのログを送信できますが、grokを使用して解析および構造化すると、データはさらに便利になります。
新しいELKスタックを改善するには、Logstashを使用して他のログを収集およびフィルタリングし、Kibanaダッシュボードを作成することを検討する必要があります。 これらのトピックは、このシリーズの2番目と3番目のチュートリアルで説明されています。 また、セットアップで問題が発生した場合は、一般的なELKスタックの問題をトラブルシューティングする方法チュートリアルに従ってください。
ELKスタックの使用について詳しくは、リンクを下にスクロールしてください。