前書き
このチュートリアルでは、CentOS 7でのLogstash 1.4.2およびKibana 3のインストールと、一元化された場所でシステムのsyslogを収集して視覚化するように構成する方法について説明します。 Logstashは、将来の使用に備えてログを収集、解析、保存するためのオープンソースツールです。 Kibana 3は、Logstashがインデックス付けしたログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。 Elasticsearch、Logstash、およびKibanaを一緒に使用すると、ELKスタックと呼ばれます。
一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため便利です。
Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。
*注:*このガイドの更新版は、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7にあります。 [Elasticsearch、Logstash、およびKibana 4をCentOS 7にインストールする方法]。
私たちの目標
チュートリアルの目的は、Logstashをセットアップして複数のサーバーのsyslogを収集し、収集されたログを視覚化するためにKibanaをセットアップすることです。
Logstash / Kibanaセットアップには、4つの主要コンポーネントがあります。
-
* Logstash *:受信ログを処理するLogstashのサーバーコンポーネント
-
* Elasticsearch *:すべてのログを保存します
-
* Kibana *:ログを検索および視覚化するためのWebインターフェイス
-
* Logstash Forwarder *:Logstashにログを送信するサーバーにインストールされ、Logstash ForwarderはLogstashと通信するために_lumberjack_ネットワークプロトコルを利用するログ転送エージェントとして機能します
最初の3つのコンポーネントを単一のサーバーにインストールします。これを* Logstashサーバー*と呼びます。 Logstash Forwarderは、ログを収集するすべてのサーバーにインストールされます。これを総称して*サーバー*と呼びます。
前提条件
このチュートリアルを完了するには、CentOS 7 VPSへのルートアクセスが必要です。 これを設定する手順については、こちら(手順3および4)を参照してください(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-6[CentOS 6での初期サーバー設定])。
Logstashサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。
-
OS:CentOS 7
-
RAM:2GB
-
CPU:2
Logstashサーバーに加えて、ログを収集する他のサーバーがいくつか必要になります。
Logstashサーバーのセットアップを始めましょう!
Java 7をインストールする
ElasticsearchとLogstashにはJava 7が必要なため、今すぐインストールします。 OpenJDK 7をインストールします。
次のコマンドを使用して、OpenJDK 7の最新の安定バージョンをインストールします。
sudo yum -y install java-1.7.0-openjdk
Java 7がインストールされたので、ElasticSearchをインストールしましょう。
Elasticsearchをインストールする
注:Logstash 1.4.2はElasticsearch 1.1.1を推奨しています。
次のコマンドを実行して、Elasticsearch公開GPGキーをrpmにインポートします。
sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Elasticsearchの新しいyumリポジトリファイルを作成および編集します。
sudo vi /etc/yum.repos.d/elasticsearch.repo
次のリポジトリ構成を追加します。
[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
保存して終了。
次のコマンドでElasticsearch 1.1.1をインストールします。
sudo yum -y install elasticsearch-1.1.1
Elasticsearchがインストールされました。 設定を編集しましょう:
sudo vi /etc/elasticsearch/elasticsearch.yml
ファイルのどこかに次の行を追加して、動的スクリプトを無効にします。
script.disable_dynamic: true
また、Elasticsearchインスタンスへの外部アクセスを制限して、外部者がHTTP APIを介してデータを読み取ったりElasticseachクラスターをシャットダウンしたりできないようにすることもできます。 `+ network.host +`を指定する行を見つけて、コメントを外して、次のようにします。
network.host: localhost
次に、「+ discovery.zen.ping.multicast.enabled +」アイテムを見つけてコメントを外し、次のようにマルチキャストを無効にします。
discovery.zen.ping.multicast.enabled: false
保存して `+ elasticsearch.yml +`を終了します。
次に、Elasticsearchを開始します。
sudo systemctl start elasticsearch.service
次に、次のコマンドを実行して、起動時にElasticsearchを開始します。
sudo systemctl enable elasticsearch.service
Elasticsearchが実行されたら、Kibanaをインストールしましょう。
Kibanaをインストールする
注:Logstash 1.4.2はKibana 3.0.1を推奨しています。
次のコマンドを使用して、Kibanaをホームディレクトリにダウンロードします。
cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
tarでKibanaアーカイブを抽出します。
tar xvf kibana-3.0.1.tar.gz
Kibana構成ファイルを編集用に開きます。
vi ~/kibana-3.0.1/config.js
Kibana設定ファイルで、 `+ elasticsearch `サーバーURLを指定する行を見つけ、ポート番号(デフォルトでは9200)を ` 80 +`に置き換えます。
elasticsearch: "http://"+window.location.hostname+":80",
これは、ポート80でKibanaにアクセスすることを計画しているために必要です(つまり、 http:// logstash%5C_server%5C_public%5C_ip / [http:// logstash \ _server \ _public \ _ip /])。
Kibanaインストールを提供するためにApacheを使用するので、ファイルを適切な場所に移動しましょう。 次のコマンドでディレクトリを作成します。
sudo mkdir -p /var/www/kibana3
次に、Kibanaファイルを新しく作成したディレクトリにコピーします。
sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/
Kibana Webインターフェースを使用する前に、Apacheをインストールする必要があります。 それでは今やろう。
Apache HTTPをインストールする
Yumを使用してApache HTTPをインストールします。
sudo yum -y install httpd
KibanaがユーザーとElasticsearchをインターフェイスさせる方法のため(ユーザーはElasticsearchに直接アクセスできる必要があります)、ポート80リクエストをポート9200(Elasticsearchがデフォルトでリッスンするポート)にプロキシするようにApacheを構成する必要があります。 最初にサンプルのVirtualHostファイルを提供します。
サンプルVirtualHost構成をダウンロードします。
cd ~; wget https://assets.digitalocean.com/articles/logstash/kibana3.conf
サンプル構成ファイルを開いて編集します。
vi kibana3.conf
ハイライトされた値「+ VirtualHost 」と「 ServerName 」を検索してFQDN(またはドメイン名を使用していない場合はローカルホスト)に変更し、「 root +」をKibanaをインストールした場所に変更して、次のエントリのようにします:
<VirtualHost :80>
ServerName
保存して終了。 次に、Apache構成構成にコピーします。
sudo cp ~/kibana3.conf /etc/httpd/conf.d/
次に、Kibanaへのアクセスに使用するログインを生成します(独自のユーザー名に置き換えます)。
sudo htpasswd -c /etc/httpd/conf.d/kibana-htpasswd
次に、パスワードを入力して確認します。 作成したhtpasswdファイルは、最近構成したApache構成で参照されます。
次に、Apacheを起動して、変更を有効にします。
sudo systemctl start httpd.service
また、起動時に起動するようにApacheを構成します。
sudo systemctl enable httpd.service
Kibanaは、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してアクセス可能になりました。 http:// logstash%5C_server%5C_public%5C_ip / [http:// logstash \ _server \ _public \ _ip /]。 Webブラウザーにアクセスすると、ダッシュボードを表示できるKibanaのウェルカムページが表示されますが、Logstashがまだセットアップされていないため、表示するログはありません。 それでは今やろう。
Logstashをインストールする
LogstashパッケージはElasticsearchと同じGPGキーを共有し、その公開キーを既にインストールしているため、Logstashの新しいYumリポジトリファイルを作成して編集しましょう。
sudo vi /etc/yum.repos.d/logstash.repo
次のリポジトリ構成を追加します。
[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
保存して終了。
次のコマンドでLogstash 1.4.2をインストールします。
sudo yum -y install logstash-1.4.2
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アドレスに置き換えてください):
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=<^>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 +」という設定ファイルを作成し、「lumberjack」入力(Logstash Forwarderが使用するプロトコル)を設定しましょう。
sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
次の_input_設定を挿入します。
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
保存して終了します。 これは、TCPポート「5000」でリッスンする「+ lumberjack +」入力を指定し、以前に作成したSSL証明書と秘密鍵を使用します。
次に、「+ 10-syslog.conf +」という設定ファイルを作成します。ここで、syslogメッセージ用のフィルターを追加します。
sudo vi /etc/logstash/conf.d/10-syslog.conf
次のsyslog _filter_構成を挿入します。
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_設定を挿入します。
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
保存して終了。 この出力は、基本的に、ログをElasticsearchに保存するようにLogstashを構成します。
この構成では、Logstashはフィルターに一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、ソースIPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。
Logstash Forwarder入力を使用する他のアプリケーション用のフィルターを追加する場合は、入力と出力の構成(つまり、 01と30の間)。
Logstashを再起動して、構成の変更を有効にします。
sudo service logstash restart
Logstashサーバーの準備ができたので、Logstash Forwarderのセットアップに移りましょう。
Logstash Forwarderをセットアップする
注:Logstashサーバーにログを送信するサーバーごとにこれらの手順を実行します。 DebianベースのLinuxディストリビューションにLogstash Forwarderをインストールする手順については(例: Ubuntu、Debianなど)、https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-and-visualize-logs-on-ubuntuを参照してください-14-04#BuildandPackageLogstashForwarder [このチュートリアルのUbuntuバリエーションのLogstash Forwarderのビルドとパッケージ化]。
SSL証明書とLogstash Forwarderパッケージのコピー
-
Logstash Server で、SSL証明書を Server *にコピーします(独自のログインで置き換えます)。
scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp
Logstash Forwarderパッケージをインストールする
-
Server *で、Logstash Forwarder RPMをホームディレクトリにダウンロードします。
cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm
次に、Logstash Forwarder Packageをインストールします。
sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm
次に、Logstash Forwarder initスクリプトをインストールして、起動時に起動するようにします。 logstashbook.comが提供するinitスクリプトを使用します。
cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder
initスクリプトは、 `+ / etc / sysconfig / logstash-forwarder +`というファイルに依存しています。 サンプルファイルをダウンロードできます。
sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig
編集用に開きます。
sudo vi /etc/sysconfig/logstash-forwarder
そして、 `+ LOGSTASH_FORWARDER_OPTIONS +`の値を次のように変更します:
LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"
保存して終了します。
SSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
Logstash Forwarderを構成する
-
Server *で、JSON形式のLogstash Forwarder設定ファイルを作成および編集します。
sudo vi /etc/logstash-forwarder
ファイルに次の行を追加し、LogstashサーバーのプライベートIPアドレスを `+ logstash_server_private_IP +`に置き換えます。
{
"network": {
"servers": [ ":5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
},
"files": [
{
"paths": [
"/var/log/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
]
}
保存して終了します。 これにより、Logstash Forwarderがポート5000(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths_セクションはどのログファイルを送信するかを指定し(ここでは_messages_と_secure_を指定します)、 type_セクションはこれらのログのタイプが「syslog *(フィルターが検索するタイプ)」であることを指定します。
ここで、他のファイル/タイプを追加して、Logstash Forwarderをポート5000上のLogstashの他のログファイルに設定することに注意してください。
ここで、_chkconfig_を使用してLogstash Forwarderサービスを追加します。
sudo chkconfig --add logstash-forwarder
Logstash Forwarderを起動して、変更を適切な場所に配置します。
sudo service logstash-forwarder start
これで、Logstash Forwarderは_messages_と_auth.log_をLogstashサーバーに送信しています! ログを収集する他のすべてのサーバーについて、このプロセスを繰り返します。
Kibanaに接続
ログを収集するすべてのサーバーでLogstash Forwarderのセットアップが完了したら、先ほどインストールしたWebインターフェースであるKibanaを見てみましょう。
Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 (Apacheのセットアップ中に)作成したログインを入力する必要があります。すると、Kibanaのようこそページが表示されます。
[_Logstashダッシュボード]をクリックして、作成済みのダッシュボードに移動します。 以下のログメッセージとともに、ログイベントのヒストグラムが表示されます(イベントまたはメッセージが表示されない場合、4つのLogstashコンポーネントの1つが正しく構成されていません)。
ここで、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。 これは、Kibanaインスタンスがどのように見えるかのサンプルです。
image:https://assets.digitalocean.com/articles/logstash/dashboard.png [Kibana 3ダッシュボードの例]
次のことを試してください。
-
「ルート」を検索して、ルートとしてサーバーにログインしようとしている人がいるかどうかを確認します。
-
特定のホスト名を検索する
-
ヒストグラム上の領域を選択するか、上のメニューから時間枠を変更します
-
ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認します
Kibanaには、グラフ作成やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください!
結論
syslogがLogstashを介して一元化され、Kibanaでそれらを視覚化できるようになったので、重要なログをすべて一元化することから始めましょう。 Logstashにはほとんどすべての種類のログを送信できますが、データはgrokで解析および構造化されるとさらに便利になります。
Kibanaダッシュボードは、サーバーにアクセスできるすべてのユーザーがアクセスできるため、htaccessなどのセキュリティで保護する必要があることに注意してください。