LogstashとKibanaを使用してUbuntu14.04でログを一元化する方法
注:このチュートリアルは、最新バージョンと互換性のない古いバージョンのELKスタックを対象としています。 このチュートリアルの最新バージョンは、 Ubuntu 14.04 にElasticsearch、Logstash、およびKibana(ELK Stack)をインストールする方法で入手できます。
序章
このチュートリアルでは、Logstash1.4.2とKibana3のインストールと、システムのsyslogを一元化された場所に収集して視覚化するように構成する方法について説明します。 Logstashは、将来使用するためにログを収集、解析、および保存するためのオープンソースツールです。 Kibana 3は、Logstashがインデックスを作成したログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。 Elasticsearch、Logstash、およびKibanaを一緒に使用すると、ELKスタックと呼ばれます。
一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に役立ちます。これにより、すべてのログを1か所で検索できるようになります。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるので便利です。
Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。
私たちの目標
チュートリアルの目的は、複数のサーバーのsyslogを収集するようにLogstashを設定し、収集されたログを視覚化するようにKibanaを設定することです。
Logstash / Kibanaのセットアップには、次の4つの主要コンポーネントがあります。
- Logstash :受信ログを処理するLogstashのサーバーコンポーネント
- Elasticsearch :すべてのログを保存します
- Kibana :ログを検索および視覚化するためのWebインターフェイス
- Logstash Forwarder :Logstashにログを送信するサーバーにインストールされたLogstash Forwarderは、lumberjackネットワークプロトコルを利用してLogstashと通信するログ転送エージェントとして機能します。
最初の3つのコンポーネントを単一のサーバーにインストールします。これをLogstashサーバーと呼びます。 Logstash Forwarderは、ログを収集するすべてのサーバーにインストールされます。これらのサーバーをまとめてサーバーと呼びます。
前提条件
このチュートリアルを完了するには、Ubuntu14.04VPSへのrootアクセスが必要です。 これを設定する手順は、ここにあります(手順3および4): Ubuntu14.04を使用したサーバーの初期設定。
Logstashサーバーに必要なCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。
- OS:Ubuntu 14.04
- RAM:4GB
- CPU:2
Logstashサーバーに加えて、ログを収集するサーバーをいくつか用意する必要があります。
Logstashサーバーのセットアップを始めましょう!
Java7をインストールします
ElasticsearchとLogstashにはJava7が必要なので、今すぐインストールします。 Elasticsearchが推奨しているので、OracleJava7をインストールします。 ただし、そのルートを選択する場合は、OpenJDKで正常に機能するはずです。
OracleJavaPPAをaptに追加します。
sudo add-apt-repository -y ppa:webupd8team/java
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドを使用して、Oracle Java 7の最新の安定バージョンをインストールします(ポップアップするライセンス契約に同意します)。
sudo apt-get -y install oracle-java7-installer
Java 7がインストールされたので、ElasticSearchをインストールしましょう。
Elasticsearchをインストールする
注:Logstash1.4.2はElasticsearch1.1.1を推奨しています。
次のコマンドを実行して、Elasticsearchの公開GPGキーをaptにインポートします。
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -
Elasticsearchソースリストを作成します。
echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.list
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドでElasticsearchをインストールします。
sudo apt-get -y install elasticsearch=1.1.1
Elasticsearchがインストールされました。 構成を編集しましょう:
sudo vi /etc/elasticsearch/elasticsearch.yml
動的スクリプトを無効にするには、ファイルのどこかに次の行を追加します。
script.disable_dynamic: true
また、Elasticsearchインスタンス(ポート9200)への外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticseachクラスターをシャットダウンしたりできないようにすることもできます。 network.host
を指定する行を見つけてコメントを外し、次のようにします。
network.host: localhost
elasticsearch.yml
を保存して終了します。
次にElasticsearchを起動します。
sudo service elasticsearch restart
次に、次のコマンドを実行して、起動時にElasticsearchを起動します。
sudo update-rc.d elasticsearch defaults 95 10
Elasticsearchが稼働しているので、Kibanaをインストールしましょう。
Kibanaをインストールする
注:Logstash1.4.2はKibana3.0.1を推奨しています
次のコマンドを使用して、Kibanaをホームディレクトリにダウンロードします。
cd ~; wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
tarを使用してKibanaアーカイブを抽出します。
tar xvf kibana-3.0.1.tar.gz
Kibana構成ファイルを開いて編集します。
sudo vi ~/kibana-3.0.1/config.js
Kibana構成ファイルで、elasticsearch
を指定する行を見つけ、ポート番号(デフォルトでは9200)を80
に置き換えます。
elasticsearch: "http://"+window.location.hostname+":80",
これが必要なのは、ポート80でKibanaにアクセスすることを計画しているためです(つまり、 http:// logstash_server_public_ip /)。
Nginxを使用してKibanaのインストールを提供するので、ファイルを適切な場所に移動しましょう。 次のコマンドでディレクトリを作成します。
sudo mkdir -p /var/www/kibana3
次に、Kibanaファイルを新しく作成したディレクトリにコピーします。
sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/
Kibana Webインターフェースを使用する前に、Nginxをインストールする必要があります。 今それをしましょう。
Nginxをインストールします
aptを使用してNginxをインストールします。
sudo apt-get install nginx
KibanaがユーザーをElasticsearchとインターフェースする方法(ユーザーはElasticsearchに直接アクセスできる必要があります)のため、ポート80リクエストをポート9200(Elasticsearchがデフォルトでリッスンするポート)にプロキシするようにNginxを構成する必要があります。 幸いなことに、Kibanaはこれのほとんどを設定するサンプルのNginx構成を提供します。
サンプルのNginx構成をKibanaのgithubリポジトリからホームディレクトリにダウンロードします。
cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf
編集用にサンプル構成ファイルを開きます。
vi nginx.conf
server_name
の値を見つけてFQDN(またはドメイン名を使用していない場合はlocalhost)に変更し、root
をKibanaをインストールした場所に変更すると、次のエントリのようになります。
server_name FQDN;
root /var/www/kibana3;
保存して終了。 次に、次のコマンドを使用して、Nginxのデフォルトサーバーブロックにコピーします。
sudo cp nginx.conf /etc/nginx/sites-available/default
次に、apache2-utils
をインストールして、htpasswd
を使用してユーザー名とパスワードのペアを生成できるようにします。
sudo apt-get install apache2-utils
次に、Kibanaでダッシュボードの保存と共有に使用するログインを生成します(自分のユーザー名に置き換えてください)。
sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user
次に、パスワードを入力して確認します。 作成したばかりのhtpasswdファイルは、最近構成したNginx構成で参照されます。
次に、Nginxを再起動して、変更を有効にします。
sudo service nginx restart
これで、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してKibanaにアクセスできます。 http://logstash_server_public_ip/。 Webブラウザーでそこにアクセスすると、ダッシュボードを表示できるKibanaウェルカムページが表示されますが、Logstashがまだ設定されていないため、表示するログはありません。 今それをしましょう。
Logstashをインストールします
LogstashパッケージはElasticsearchと同じリポジトリから入手でき、すでにその公開鍵をインストールしているので、Logstashソースリストを作成しましょう。
echo 'deb http://packages.elasticsearch.org/logstash/1.4/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドでLogstashをインストールします。
sudo apt-get install logstash=1.4.2-1-2c0f5a1
Logstashはインストールされていますが、まだ構成されていません。
SSL証明書を生成する
Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーのペアを作成する必要があります。 証明書は、LogstashForwarderがLogstashサーバーのIDを確認するために使用されます。 次のコマンドを使用して、証明書と秘密鍵を格納するディレクトリを作成します。
sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private
これで、SSL証明書を生成するための2つのオプションがあります。 クライアントサーバーがLogstashサーバーのIPアドレスを解決できるようにするDNS設定がある場合は、オプション2を使用します。 それ以外の場合は、オプション1でIPアドレスを使用できます。
オプション1:IPアドレス
LogstashサーバーのIPアドレスを解決するために、ログを収集するサーバーを許可するDNS設定がない場合は、LogstashサーバーのプライベートIPアドレスを
sudo vi /etc/ssl/openssl.cnf
ファイル内の[ v3_ca ]
セクションを見つけて、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えます)。
subjectAltName = IP: logstash_server_private_ip
保存して終了。
次に、次のコマンドを使用して、SSL証明書と秘密鍵を適切な場所(/ etc / pki / tls /)に生成します。
cd /etc/pki/tls
sudo openssl req -config /etc/ssl/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
次の入力構成を挿入します。
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
次のsyslogfilter構成を挿入します。
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
次の出力構成を挿入します。
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
保存して終了。 この出力は基本的に、Elasticsearchにログを保存するようにLogstashを構成します。
この構成では、Logstashはフィルターと一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、送信元IPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。
Logstash Forwarder入力を使用する他のアプリケーションにフィルターを追加する場合は、ファイルに名前を付けて、入力構成と出力構成の間でソートされるようにしてください(つまり、 01から30の間)。
Logstashを再起動して、構成の変更を有効にします。
sudo service logstash restart
Logstashサーバーの準備ができたので、LogstashForwarderのセットアップに移りましょう。
LogstashForwarderを設定する
注:ログをLogstashサーバーに送信するサーバーごとにこれらの手順を実行します。 LogstashForwarderをRedHatベースのLinuxディストリビューションにインストールする手順については(例: RHEL、CentOSなど)、このチュートリアルのCentOSバリエーションの Build and PackageLogstashForwarderセクションを参照してください。
SSL証明書とLogstashフォワーダーパッケージをコピーする
Logstashサーバーで、SSL証明書をサーバーにコピーします(自分のログインに置き換えてください)。
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
LogstashForwarderパッケージをインストールします
サーバーで、LogstashForwarderソースリストを作成します。
echo 'deb http://packages.elasticsearch.org/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list
また、Elasticsearchと同じGPGキーを使用します。これは、次のコマンドでインストールできます。
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -
次に、LogstashForwarderパッケージをインストールします。
sudo apt-get update
sudo apt-get install logstash-forwarder
注: 32ビットリリースのUbuntuを使用していて、「パッケージlogstash-forwarderが見つかりません」というエラーが発生する場合は、LogstashForwarderを手動でインストールする必要があります。
wget https://assets.digitalocean.com/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb
次に、Logstash Forwarder initスクリプトをインストールして、起動時に開始するようにします。
cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults
次に、SSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。
sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
LogstashForwarderを構成する
サーバーで、JSON形式のLogstashForwarder構成ファイルを作成および編集します。
sudo vi /etc/logstash-forwarder
次に、次の行をファイルに追加し、LogstashサーバーのプライベートIPアドレスをlogstash_server_private_IP
に置き換えます。
{
"network": {
"servers": [ "logstash_server_private_IP:5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
},
"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
]
}
保存して終了します。 これにより、Logstash Forwarderがポート5000(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths セクションは、送信するログファイル(ここではsyslogとauth.logを指定)を指定し、 type セクションは、これらのログがタイプ “syslog *(フィルタが探しているタイプ)。
これは、ポート5000のLogstashへの他のログファイルにLogstashForwarderを構成するためにさらにファイル/タイプを追加する場所であることに注意してください。
次に、Logstash Forwarderを再起動して、変更を適用します。
sudo service logstash-forwarder restart
これで、LogstashForwarderはsyslogとauth.logをLogstashサーバーに送信します。 ログを収集する他のすべてのサーバーに対して、このプロセスを繰り返します。
Kibanaに接続する
ログを収集するすべてのサーバーでLogstashForwarderのセットアップが完了したら、前にインストールしたWebインターフェイスであるKibanaを見てみましょう。
Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 Kibanaのウェルカムページが表示されます。
Logstash Dashboard をクリックして、作成済みのダッシュボードに移動します。 以下にログメッセージを含むログイベントのヒストグラムが表示されます(イベントまたはメッセージが表示されない場合は、4つのLogstashコンポーネントの1つが正しく構成されていません)。
ここでは、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。 これは、Kibanaインスタンスがどのように見えるかのサンプルです。
次のことを試してください。
- 「root」を検索して、誰かがrootとしてサーバーにログインしようとしていないかどうかを確認します
- 特定のホスト名を検索する
- ヒストグラムの領域を選択するか、上のメニューから時間枠を変更します
- ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認してください
Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください。
結論
これで、syslogがLogstashを介して一元化され、Kibanaで視覚化できるようになったので、重要なログをすべて一元化することから始めましょう。 Logstashにはほとんどすべてのタイプのログを送信できますが、grokを使用して解析および構造化すると、データはさらに便利になります。
Kibanaダッシュボードには、サーバーにアクセスできるすべてのユーザーがアクセスできるため、htaccessなどでサーバーを保護する必要があることに注意してください。