Ubuntu 14.04でLogstashとKibanaを使用してログを集中化する方法

前書き

このチュートリアルでは、Logstash 1.4.2およびKibana 3のインストールについて説明し、一元化された場所でシステムのsyslogを収集して視覚化するように構成する方法を説明します。 Logstashは、将来の使用に備えてログを収集、解析、保存するためのオープンソースツールです。 Kibana 3は、Logstashがインデックス付けしたログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。 Elasticsearch、Logstash、およびKibanaを一緒に使用すると、ELKスタックと呼ばれます。

一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため便利です。

Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。

私たちの目標

チュートリアルの目的は、Logstashをセットアップして複数のサーバーのsyslogを収集し、収集されたログを視覚化するためにKibanaをセットアップすることです。

Logstash / Kibanaセットアップには、4つの主要コンポーネントがあります。

  • * Logstash *:受信ログを処理するLogstashのサーバーコンポーネント

  • * Elasticsearch *:すべてのログを保存します

  • * Kibana *:ログを検索および視覚化するためのWebインターフェイス

  • * Logstash Forwarder *:Logstashにログを送信するサーバーにインストールされ、Logstash ForwarderはLogstashと通信するために_lumberjack_ネットワークプロトコルを利用するログ転送エージェントとして機能します

最初の3つのコンポーネントを単一のサーバーにインストールします。これを* Logstashサーバー*と呼びます。 Logstash Forwarderは、ログを収集するすべてのサーバーにインストールされます。これを総称して*サーバー*と呼びます。

前提条件

このチュートリアルを完了するには、Ubuntu 14.04 VPSへのルートアクセスが必要です。 これを設定する手順は、こちら(手順3および4)で確認できます:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ]。

Logstashサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。

  • OS:Ubuntu 14.04

  • RAM:4GB

  • CPU:2

Logstashサーバーに加えて、ログを収集する他のサーバーがいくつか必要になります。

Logstashサーバーのセットアップを始めましょう!

Java 7をインストールする

ElasticsearchとLogstashにはJava 7が必要なため、今すぐインストールします。 Elasticsearchが推奨しているので、Oracle Java 7をインストールします。 ただし、そのルートに進むことにした場合、OpenJDKで正常に動作するはずです。

aptにOracle Java PPAを追加します。

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をインストールする

:Logstash 1.4.2はElasticsearch 1.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)への外部アクセスを制限すると、HTTP APIを介して部外者がデータを読み取ったり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をインストールする

:Logstash 1.4.2はKibana 3.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%5C_server%5C_public%5C_ip / [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構成を提供します。

KibanaのgithubリポジトリからホームディレクトリにNginxのサンプル設定をダウンロードします。

cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

サンプル構成ファイルを開いて編集します。

vi nginx.conf

`+ server_name `の値をFQDN(またはドメイン名を使用していない場合はlocalhost)およびKibanaをインストールした場所の ` root +`の値を見つけて変更し、次のエントリのようにします。

 server_name ;
 root /var/www/kibana3;

保存して終了。 次のコマンドを使用して、Nginxのデフォルトサーバーブロックにコピーします。

sudo cp nginx.conf /etc/nginx/sites-available/default

ここで、「+ htpasswd 」を使用してユーザー名とパスワードのペアを生成できるように、「 apache2-utils +」をインストールします。

sudo apt-get install apache2-utils

次に、ダッシュボードを保存して共有するためにKibanaで使用されるログインを生成します(独自のユーザー名に置き換えます)。

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd

次に、パスワードを入力して確認します。 作成したhtpasswdファイルは、最近構成したNginx構成で参照されます。

Nginxを再起動して、変更を有効にします。

sudo service nginx restart

Kibanaは、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してアクセス可能になりました。 http:// logstash%5C_server%5C_public%5C_ip / [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証明書とキーペアを作成する必要があります。 Logstash Forwarderは、証明書を使用して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アドレスを `+ subjectAltName +`に追加する必要があります生成しようとしているSSL証明書の(SAN)フィールド。 これを行うには、OpenSSL構成ファイルを開きます。

sudo vi /etc/ssl/openssl.cnf

ファイル内の `+ [v3_ca] +`セクションを見つけて、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えてください):

subjectAltName = IP:

保存して終了。

次のコマンドを使用して、適切な場所(/ etc / pki / tls /)にSSL証明書と秘密鍵を生成します。

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=/' -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サーバーにログを送信するサーバーごとにこれらの手順を実行します。 Logstash ForwarderをRed HatベースのLinuxディストリビューションにインストールする手順(例: RHEL、CentOSなど)、https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-logs-on-centos-6#SetUpLogstashForwarderを参照してくださいこのチュートリアルのCentOSバリエーションの[Logstash Forwarderセクションのビルドとパッケージ化]。

SSL証明書とLogstash Forwarderパッケージのコピー

  • Logstash Server で、SSL証明書を Server *にコピーします(独自のログインで置き換えます)。

scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp

Logstash Forwarderパッケージをインストールする

*サーバー*で、Logstash Forwarderソースリストを作成します。

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 -

次に、Logstash Forwarderパッケージをインストールします。

sudo apt-get update
sudo apt-get install logstash-forwarder

注: 32ビットリリースのUbuntuを使用していて、「パッケージlogstash-forwarderが見つかりません」というエラーが表示される場合は、Logstash Forwarderを手動でインストールする必要があります。

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/

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/syslog",
       "/var/log/auth.log"
      ],
     "fields": { "type": "syslog" }
   }
  ]
}

保存して終了します。 これにより、Logstash Forwarderがポート5000(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths_セクションは、送信するログファイルを指定し(ここではsyslogとauth.logを指定します)、 type_セクションはこれらのログのタイプが「syslog *(フィルターが検索するタイプ)」であることを指定します。

ここで、他のファイル/タイプを追加して、Logstash Forwarderをポート5000上のLogstashの他のログファイルに設定することに注意してください。

Logstash Forwarderを再起動して、変更を適切な場所に配置します。

sudo service logstash-forwarder restart

Logstash Forwarderはsyslogとauth.logをLogstashサーバーに送信しています! ログを収集する他のすべてのサーバーについて、このプロセスを繰り返します。

Kibanaに接続

ログを収集するすべてのサーバーでLogstash Forwarderのセットアップが完了したら、先ほどインストールしたWebインターフェースであるKibanaを見てみましょう。

Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 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などのセキュリティで保護する必要があることに注意してください。

Related