注:このチュートリアルは、最新バージョンと互換性のない古いバージョンのELKスタックを対象としています。 このチュートリアルの最新バージョンは、 Ubuntu 14.04 にElasticsearch、Logstash、およびKibana(ELK Stack)をインストールする方法で入手できます。

序章

このチュートリアルでは、Ubuntu14.04への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は、ログを収集するすべてのクライアントサーバーにインストールされます。これをまとめてクライアントサーバーと呼びます。

前提条件

このチュートリアルを完了するには、Ubuntu14.04VPSへのルートアクセスが必要です。 これを設定する手順は、ここにあります(手順3および4): Ubuntu14.04を使用したサーバーの初期設定。

代わりにCentOSを使用したい場合は、次のチュートリアルを確認してください: CentOS7にELKをインストールする方法。

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

  • OS:Ubuntu 14.04
  • RAM:4GB
  • CPU:2

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

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

Java8をインストールします

ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨する最新バージョンのOracleJava8をインストールします。 ただし、そのルートを選択する場合は、OpenJDKで正常に機能するはずです。

OracleJavaPPAをaptに追加します。

  1. sudo add-apt-repository -y ppa:webupd8team/java

aptパッケージデータベースを更新します。

  1. sudo apt-get update

次のコマンドを使用して、Oracle Java 8の最新の安定バージョンをインストールします(ポップアップするライセンス契約に同意します)。

  1. sudo apt-get -y install oracle-java8-installer

Java 8がインストールされたので、ElasticSearchをインストールしましょう。

Elasticsearchをインストールする

Elasticsearchは、Elasticのパッケージソースリストを追加することにより、パッケージマネージャーとともにインストールできます。

次のコマンドを実行して、Elasticsearchの公開GPGキーをaptにインポートします。

  1. wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

プロンプトがちょうどそこにぶら下がっている場合は、おそらくユーザーのパスワードを待っています( sudo 指図)。 この場合は、パスワードを入力してください。

Elasticsearchソースリストを作成します。

  1. echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

aptパッケージデータベースを更新します。

  1. sudo apt-get update

次のコマンドでElasticsearchをインストールします。

  1. sudo apt-get -y install elasticsearch

Elasticsearchがインストールされました。 構成を編集しましょう:

  1. sudo vi /etc/elasticsearch/elasticsearch.yml

Elasticsearchインスタンス(ポート9200)への外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticsearchクラスターをシャットダウンしたりできないようにする必要があります。 指定する行を検索します network.host、コメントを外し、その値を「localhost」に置き換えて、次のようにします。

Elasticsearch.ymlの抜粋(更新)
network.host: localhost

保存して終了 elasticsearch.yml.

次にElasticsearchを起動します。

  1. sudo service elasticsearch restart

次に、次のコマンドを実行して、起動時にElasticsearchを起動します。

  1. sudo update-rc.d elasticsearch defaults 95 10

Elasticsearchが稼働しているので、Kibanaをインストールしましょう。

Kibanaをインストールする

Elasticのパッケージソースリストを追加することで、パッケージマネージャーを使用してKibanaをインストールできます。

Kibanaソースリストを作成します。

  1. echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list

aptパッケージデータベースを更新します。

  1. sudo apt-get update

次のコマンドでKibanaをインストールします。

  1. sudo apt-get -y install kibana

Kibanaがインストールされました。

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

  1. sudo vi /opt/kibana/config/kibana.yml

Kibana構成ファイルで、を指定する行を見つけます host、IPアドレス(デフォルトでは「0.0.0.0」)を「localhost」に置き換えます。

kibana.ymlの抜粋(更新)
host: "localhost"

保存して終了。 この設定により、Kibanaはローカルホストのみがアクセスできるようになります。 Nginxリバースプロキシを同じサーバーにインストールして外部アクセスを許可するため、これは問題ありません。

次に、Kibanaサービスを有効にして、開始します。

  1. sudo update-rc.d kibana defaults 96 9
  2. sudo service kibana start

Kibana Webインターフェースを使用する前に、リバースプロキシを設定する必要があります。 Nginxを使って今それをやってみましょう。

Nginxをインストールします

Kibanaをリッスンするように構成したため localhost、外部アクセスを許可するためにリバースプロキシを設定する必要があります。 この目的のためにNginxを使用します。

注:使用するNginxインスタンスが既にある場合は、代わりにそれを自由に使用してください。 Nginxサーバーから到達できるようにKibanaを構成してください(おそらく、Kibanaを変更する必要があります host 値、 /opt/kibana/config/kibana.yml、KibanaサーバーのプライベートIPアドレスまたはホスト名に)。 また、SSL/TLSを有効にすることをお勧めします。

aptを使用してNginxとApache2-utilsをインストールします。

  1. sudo apt-get install nginx apache2-utils

htpasswdを使用して、Kibana Webインターフェイスにアクセスできる「kibanaadmin」(別の名前を使用する必要があります)という管理ユーザーを作成します。

  1. sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

プロンプトでパスワードを入力します。 Kibana Webインターフェースにアクセスするために必要になるため、このログインを覚えておいてください。

次に、お気に入りのエディターでNginxのデフォルトサーバーブロックを開きます。 viを使用します:

  1. sudo vi /etc/nginx/sites-available/default

ファイルの内容を削除し、次のコードブロックをファイルに貼り付けます。 必ず更新してください server_name サーバーの名前と一致させるには:

/ etc / nginx / sites-available / default
  1. server {
  2. listen 80;
  3. server_name example.com;
  4. auth_basic "Restricted Access";
  5. auth_basic_user_file /etc/nginx/htpasswd.users;
  6. location / {
  7. proxy_pass http://localhost:5601;
  8. proxy_http_version 1.1;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection 'upgrade';
  11. proxy_set_header Host $host;
  12. proxy_cache_bypass $http_upgrade;
  13. }
  14. }

保存して終了。 これにより、サーバーのHTTPトラフィックをリッスンしているKibanaアプリケーションに転送するようにNginxが構成されます。 localhost:5601. また、Nginxは htpasswd.users 以前に作成したファイルであり、基本認証が必要です。

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

  1. sudo service nginx restart

これで、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してKibanaにアクセスできます。 http://logstash_server_public_ip/。 Webブラウザーでそこにアクセスすると、「kibanaadmin」クレデンシャルを入力した後、インデックスパターンの構成を求めるKibanaウェルカムページが表示されます。 他のすべてのコンポーネントをインストールした後、後でそれに戻りましょう。

Logstashをインストールします

LogstashパッケージはElasticsearchと同じリポジトリから入手でき、すでにその公開鍵をインストールしているので、Logstashソースリストを作成しましょう。

  1. echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

aptパッケージデータベースを更新します。

  1. sudo apt-get update

次のコマンドでLogstashをインストールします。

  1. sudo apt-get install logstash

Logstashはインストールされていますが、まだ構成されていません。

SSL証明書を生成する

Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーのペアを作成する必要があります。 この証明書は、LogstashForwarderがLogstashサーバーのIDを確認するために使用されます。 次のコマンドを使用して、証明書と秘密鍵を格納するディレクトリを作成します。

  1. sudo mkdir -p /etc/pki/tls/certs
  2. 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構成ファイルを開きます。

  1. sudo vi /etc/ssl/openssl.cnf

を見つける [ v3_ca ] ファイルのセクションを作成し、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えます)。

openssl.cnfの抜粋(更新)
subjectAltName = IP: logstash_server_private_ip

保存して終了。

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

  1. cd /etc/pki/tls
  2. 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に置き換えます)。

  1. 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が使用するプロトコル)を設定します。

  1. sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

次の入力構成を挿入します。

01-木こり-input.conf
  1. input {
  2. lumberjack {
  3. port => 5043
  4. type => "logs"
  5. ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
  6. ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  7. }
  8. }

保存して終了します。 これは、 lumberjack tcpポートでリッスンする入力 5043、以前に作成したSSL証明書と秘密鍵を使用します。

それでは、という構成ファイルを作成しましょう。 10-syslog.conf、ここで、syslogメッセージのフィルターを追加します。

  1. sudo vi /etc/logstash/conf.d/10-syslog.conf

次のsyslogfilter構成を挿入します。

10-syslog.conf
  1. filter {
  2. if [type] == "syslog" {
  3. grok {
  4. match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
  5. add_field => [ "received_at", "%{@timestamp}" ]
  6. add_field => [ "received_from", "%{host}" ]
  7. }
  8. syslog_pri { }
  9. date {
  10. match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
  11. }
  12. }
  13. }

保存して終了します。 このフィルターは、(Logstash Forwarderによって)「syslog」タイプとしてラベル付けされたログを検索し、「grok」を使用して着信syslogログを解析し、構造化およびクエリ可能にしようとします。

最後に、という構成ファイルを作成します 30-lumberjack-output.conf:

  1. sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

次の出力構成を挿入します。

30-syslog.conf
  1. output {
  2. elasticsearch { host => localhost }
  3. stdout { codec => rubydebug }
  4. }

保存して終了。 この出力は基本的に、Elasticsearchにログを保存するようにLogstashを構成します。

この構成では、Logstashはフィルターと一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、送信元IPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。

Logstash Forwarder入力を使用する他のアプリケーションにフィルターを追加する場合は、入力構成と出力構成の間でソートされるように、必ずファイルに名前を付けてください(つまり、 01-と30-の間)。

Logstashを再起動して、構成の変更を有効にします。

  1. sudo service logstash restart

Logstashサーバーの準備ができたので、LogstashForwarderのセットアップに移りましょう。

Logstashフォワーダーのセットアップ(クライアントサーバーの追加)

Logstashサーバーにログを送信するUbuntuまたはDebianサーバーごとにこれらの手順を実行します。 LogstashForwarderをRedHatベースのLinuxディストリビューションにインストールする手順については(例: RHEL、CentOSなど)、このチュートリアルのCentOSバリエーションの Build and PackageLogstashForwarderセクションを参照してください。

SSL証明書とLogstashフォワーダーパッケージをコピーする

Logstashサーバーで、SSL証明書をクライアントサーバーにコピーします(クライアントサーバーのアドレスと自分のログインを置き換えます)。

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

ログインの資格情報を入力したら、証明書のコピーが成功したことを確認します。 クライアントサーバーとLogstashサーバー間の通信に必要です。

LogstashForwarderパッケージをインストールします

クライアントサーバーで、LogstashForwarderソースリストを作成します。

  1. echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

また、Elasticsearchと同じGPGキーを使用します。これは、次のコマンドでインストールできます。

  1. wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

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

  1. sudo apt-get update
  2. sudo apt-get install logstash-forwarder

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

次に、LogstashサーバーのSSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。

  1. sudo mkdir -p /etc/pki/tls/certs
  2. sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

LogstashForwarderを構成する

クライアントサーバーで、JSON形式のLogstashForwarder構成ファイルを作成および編集します。

  1. sudo vi /etc/logstash-forwarder.conf

network セクションで、次の行をファイルに追加し、Logstashサーバーのプライベートアドレスを次のように置き換えます logstash_server_private_address:

logstash-forwarder.confの抜粋1/2
    "servers": [ "logstash_server_private_address:5043" ],
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
    "timeout": 15

files セクション(角かっこの間)に、次の行を追加します。

logstash-forwarder.conf抜粋2/2
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }

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

これは、ポート5043のLogstashへの他のログファイルにLogstashForwarderを構成するためにさらにファイル/タイプを追加する場所であることに注意してください。

次に、Logstash Forwarderを再起動して、変更を適用します。

  1. sudo service logstash-forwarder restart

これで、LogstashForwarderはsyslogとauth.logを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スタックの問題をトラブルシューティングする方法チュートリアルに従ってください。