前書き
このチュートリアルでは、CentOS 7でのElasticsearch ELKスタックのインストール、つまりElasticsearch 1.7.3、Logstash 1.5.4、Kibana 4.1.1について説明します。 また、一元化された場所でシステムのsyslogを収集して視覚化するように構成する方法も示します。 Logstashは、将来の使用に備えてログを収集、解析、保存するためのオープンソースツールです。 Kibanaは、Logstashがインデックス付けしたログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。
一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため便利です。
Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。
私たちの目標
チュートリアルの目的は、Logstashをセットアップして複数のサーバーのsyslogを収集し、収集されたログを視覚化するためにKibanaをセットアップすることです。
Logstash / Kibanaセットアップには、4つの主要コンポーネントがあります。
-
* Logstash *:受信ログを処理するLogstashのサーバーコンポーネント
-
* Elasticsearch *:すべてのログを保存します
-
* Kibana *:ログを検索および視覚化するためのWebインターフェイス。Nginxを介してプロキシされます。
-
* Logstash Forwarder *:Logstashにログを送信するサーバーにインストールされ、Logstash ForwarderはLogstashと通信するために_lumberjack_ネットワークプロトコルを利用するログ転送エージェントとして機能します
画像:https://assets.digitalocean.com/articles/elk/elk-infrastructure-logstashforwarder.png [ELKインフラストラクチャ]
最初の3つのコンポーネントを単一のサーバーにインストールします。これを* Logstashサーバー*と呼びます。 Logstash Forwarderは、ログを収集するすべてのクライアントサーバーにインストールされます。これを総称して*クライアントサーバー*と呼びます。
前提条件
このチュートリアルを完了するには、CentOS 7 VPSへのルートアクセスが必要です。 これを設定する手順は、こちら(手順3および4)で確認できます:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7[CentOS 7での初期サーバー設定]。
代わりにUbuntuを使用する場合は、次のチュートリアルをご覧ください:https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14- 04 [Ubuntu 14.04にELKをインストールする方法]。
Logstashサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。
-
OS:CentOS 7
-
RAM:4GB
-
CPU:2
Logstashサーバーに加えて、ログを収集する他のサーバーがいくつか必要になります。
Logstashサーバーのセットアップを始めましょう!
Java 8をインストールする
ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨しているので、Oracle Java 8の最新バージョンをインストールします。 ただし、そのルートに進むことにした場合、OpenJDKで正常に動作するはずです。 このセクションの手順に従うことは、Java SEのOracle Binary License Agreementに同意することを意味します。
ホームディレクトリに移動し、次のコマンドを使用してOracle Java 8(Update 65)JDK RPMをダウンロードします。
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)への外部アクセスを制限すると、HTTP APIを介して部外者がデータを読み取ったり、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
プロンプトでパスワードを入力します。 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 ;
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
Kibanaは、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してアクセス可能になりました。 http:// logstash%5C_server%5C_public%5C_ip / [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
保存して終了。
次のコマンドでLogstash 1.5をインストールします。
sudo yum -y install logstash
Logstashはインストールされていますが、まだ構成されていません。
SSL証明書を生成する
Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーペアを作成する必要があります。 Logstash Forwarderは、証明書を使用してLogstashサーバーのIDを確認します。
これで、SSL証明書を生成するための2つのオプションがあります。 クライアントサーバーがLogstashサーバーのIPアドレスを解決できるDNSセットアップがある場合は、*オプション2 *を使用します。 それ以外の場合は、*オプション1 *でIPアドレスを使用できます。
オプション1:IPアドレス
LogstashサーバーのIPアドレスを解決するためにログを収集するサーバーを許可するDNSセットアップがない場合は、LogstashサーバーのプライベートIPアドレスを `+ subjectAltName +`に追加する必要があります生成しようとしているSSL証明書の(SAN)フィールド。 これを行うには、OpenSSL構成ファイルを開きます。
sudo vi /etc/pki/tls/openssl.cnf
ファイル内の `+ [v3_ca] +`セクションを見つけて、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えてください):
openssl.cnfの抜粋
subjectAltName = IP:
保存して終了。
次のコマンドを使用して、適切な場所(/ etc / pki / tls /)にSSL証明書と秘密鍵を生成します。
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=/' -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 +」という設定ファイルを作成し、「lumberjack」入力(Logstash Forwarderが使用するプロトコル)を設定しましょう。
sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
次の_input_設定を挿入します。
/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
次のsyslog _filter_構成を挿入します。
/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" ]
}
}
}
保存して終了します。 このフィルターは、「syslog」タイプ(Logstash Forwarderによる)としてラベル付けされたログを探し、「grok」を使用して着信syslogログを解析し、構造化およびクエリ可能にします。
最後に、 `+ 30-lumberjack-output.conf +`という設定ファイルを作成します:
sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf
次の_output_設定を挿入します。
/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サーバーの準備ができたので、Logstash Forwarderのセットアップに移りましょう。
Logstash Forwarderのセットアップ(クライアントサーバーの追加)
Logstashサーバーにログを送信する* CentOSまたはRHEL 7 *サーバーごとにこれらの手順を実行します。 DebianベースのLinuxディストリビューションにLogstash Forwarderをインストールする手順については(例: Ubuntu、Debianなど)、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04#setを参照してください-up-logstash-forwarder-(add-client-servers)[このチュートリアルのUbuntuバリエーションのLogstash Forwarderセクションのビルドとパッケージ化]。
SSL証明書とLogstash Forwarderパッケージのコピー
-
Logstash Server で、SSL証明書を Client Server *にコピーします(クライアントサーバーのIPアドレスと独自のログインを置き換えます)。
scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp
ログイン資格情報を提供した後、証明書のコピーが成功したことを確認します。 クライアントサーバーとLogstashサーバー間の通信に必要です。
Logstash Forwarderパッケージをインストールする
*クライアントサーバー*で、次のコマンドを実行してElasticsearch公開GPGキーをrpmにインポートします。
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Logstash Forwarderの新しい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
保存して終了。
次に、Logstash Forwarderパッケージをインストールします。
sudo yum -y install logstash-forwarder
LogstashサーバーのSSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
Logstash Forwarderを構成する
*クライアントサーバー*で、JSON形式のLogstash Forwarder構成ファイルを作成および編集します。
sudo vi /etc/logstash-forwarder.conf
「+ network 」セクションの下で、ファイルに次の行を追加し、LogstashサーバーのプライベートIPアドレスを「 logstash_server_private_IP +」に置き換えます。
logstash-forwarder.confの抜粋1/2
"servers": [ ":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にLogstash Forwarderを他のログファイルに設定するために、さらにファイル/タイプを追加する場所であることに注意してください。
Logstash Forwarderを起動して有効にし、変更を適用します。
sudo systemctl start logstash-forwarder
sudo chkconfig logstash-forwarder on
Logstash Forwarderは、syslogの `+ messages `ファイルと ` secure +`ファイルをLogstashサーバーに送信しています。 ログを収集する他のすべてのサーバーについて、このセクションを繰り返します。
Kibanaに接続
ログを収集するすべてのサーバーでLogstash Forwarderのセットアップが完了したら、先ほどインストールしたWebインターフェースであるKibanaを見てみましょう。
Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 「kibanaadmin」資格情報を入力すると、インデックスパターンを構成するように求めるページが表示されます。
image:https://assets.digitalocean.com/articles/elk/1-select-index.gif [インデックスの作成]
先に進み、ドロップダウンメニューから* @ timestamp *を選択し、[作成]ボタンをクリックして最初のインデックスを作成します。
次に、上部ナビゲーションバーの[検出]リンクをクリックします。 デフォルトでは、過去15分間のすべてのログデータが表示されます。 以下のログメッセージとともに、ログイベントのヒストグラムが表示されます。
image:https://assets.digitalocean.com/articles/elk/2-discover.png [ページを発見]
クライアントサーバーからsyslogを収集しているだけなので、現時点ではそれほど多くはありません。 ここで、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。
次のことを試してください。
-
「ルート」を検索して、誰かがルートとしてサーバーにログインしようとしているかどうかを確認します
-
特定のホスト名を検索( `+ host:" "+`を検索)
-
ヒストグラム上の領域を選択するか、上のメニューから時間枠を変更します
-
ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認します
Kibanaには、グラフ作成やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください!
結論
syslogがElasticsearchとLogstashによって一元化され、Kibanaでそれらを視覚化できるようになったので、重要なログをすべて一元化することから始めましょう。 Logstashにはほとんどすべての種類のログを送信できますが、データはgrokで解析および構造化されるとさらに便利になります。
新しいELKスタックを改善するには、Logstashを使用して他のログを収集およびフィルタリングし、Kibanaダッシュボードを作成する必要があります。 これらのトピックは、このシリーズの2番目と3番目のチュートリアルで説明されています。 また、セットアップに問題がある場合は、https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues [ELKスタックの一般的な問題のトラブルシューティング方法]チュートリアルに従ってください。 。
リンクを下にスクロールして、ELKスタックの使用方法の詳細をご覧ください!