ログのリポジトリとしてのELK + R 2.インストールと構成

ELKRにログを保存する実験を続けて、インストールと基本セットアップのための一種の「マニュアル」を書いています。



非常に役立つ記事:

Logstashを使用してログを収集、解析、提供します-Materiel

Lumberjack + Logstash + Elasticsearch + RabbitMQを使用してログを収集および分析します -実際の使用の良い例



著者に感謝します!



そのため、次のアーキテクチャを展開します。

デバイス=> HAProxy => Logstash-Listener => RabbitMQ => Logstash-Filter => Elasticsearch-Balancer => Elasticsearch DATA / MASTER





私はこれをDevStackにデプロイしました(これにより私の生活は大幅に簡素化されました)。

Ubuntuを例に取ります。

すべてのノードはNTPで構成されます。

LogstashおよびElasticsearchを使用するノードでは、default-jre-headlessがインストールされます



ESのインストール





すべてのESノードの場合:



リポジトリを追加

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb http://packages.elastic.co/elasticsearch/1.6/debian stable main" | sudo tee -a /etc/apt/sources.list
      
      







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

 sudo apt-get update && sudo apt-get install elasticsearch
      
      







次に、構成を構成します。



データノードの場合:

 cluster.name: CLUSTER_NAME node.name: Data Node NAME node.data: true node.master: false index.number_of_shards: 2 index.number_of_replicas: 2 http.enabled: false path.data: /PATH/TO/DATA/DIR
      
      







マスターノードの場合:

 cluster.name: CLUSTER_NAME node.name: Master Node NAME node.data: false node.master: true index.number_of_shards: 2 index.number_of_replicas: 2 http.enabled: false
      
      







Balancerノードの場合:

 cluster.name: CLUSTER_NAME node.name: Balancer Node NAME node.master: false node.data: false index.number_of_shards: 2 index.number_of_replicas: 2 http.port: 9200
      
      







CLUSTER_NAMEはクラスターの名前です。 ほとんどの場合、この設定で十分です。

NAME-ホスト名を使用しましたが、任意の一意の名前が可能です。

/ PATH / TO / DATA / DIR-データが保存されるディレクトリへのパス。 私の場合、これは/ usr / share / elasticsearch / dataです。



順番に拡張します。





次のこともお勧めします。

テンプレートlogstash-template.jsonを作成します

 { "template": "*", "settings" : { "number_of_shards" : 2, "number_of_replicas" : 1 } }
      
      







ES-Balancerで実行します

 curl -XPUT 'http://localhost:9200/_template/template_logstash/' -d @logstash-template.json
      
      







これは、すべてのインデックスのデフォルトのテンプレートです。 新しいインデックスはそれぞれ、2つのシャードと1つのレプリカで作成されます。 これは、2つのデータノードを持つ構成に適しています。

最適になります

number_of_shards =コアの数

number_of_replicas =データノードの数(複数)-1



mobz / elasticsearch-headモジュールも管理に非常に役立ちます。 ES-Balancerの場合:

 /usr/share/elasticsearch/bin/plugin -install mobz/elasticsearch-head
      
      







構成を変更した後、elasticsearchサービスを再起動することを忘れないでください。

それだけです! ログの保存場所はわかっています。



RabbitMQをインストールする





次に、Rabbimq-Serverをインストールします。

 apt-get update && apt-get install rabbitmq-server -y rabbitmq-plugins enable rabbitmq_management && service rabbitmq-server restart rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
      
      







logstashのユーザーを作成できますが、これは必須ではありません。



Logstashをインストールする





すべてのノードの場合:

 wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb http://packages.elasticsearch.org/logstash/1.5/debian stable main" | sudo tee -a /etc/apt/sources.list sudo apt-get update && sudo apt-get install logstash
      
      







/etc/logstash/conf.dの設定



フィルターの場合:

config.conf
 input { rabbitmq { auto_delete => false durable => true exchange => "logstash-exchange" exclusive => false host => '1.1.1.1' key => "logstash-routing-key" password => "guest" prefetch_count => 4 queue => "logstash-filter" type => "logstash-filter-input" user => "guest" threads => 3 arguments => {"x-ha-policy" => "all"} } } # Filter all data filter { if [type] == "apache-access" { grok { match => [ "message", "%{COMBINEDAPACHELOG}" ] add_field => [ "severity", "normal" ] } } else if [type] == "eventlog" { mutate { update => { "host" => "None" } add_field => { "severity" => "None" } } } if [type] =~ "apache" { mutate { add_field => { "Message" => "%{message}" } } } if [type] == "eventlog" { mutate { gsub => [ 'message', '[\[\]\\]', ""] } mutate { gsub => [ 'Message', ':', "-"] } mutate { gsub => [ 'Message', '"', "'"] } json { source => "message" } mutate { update => { "host" => "%{Hostname}" } update => { "severity" => "%{Severity}" } } } if [_jsonparsefailure] { mutate { update => { "host" => "Unknown" } update => { "severity" => "Unknown" } } } } # Output to elasticsearch balancer output { elasticsearch { cluster => "CLUSTER_NAME" protocol => "http" host => ['2.2.2.2'] index => "logstash-%{+YYYY.MM.dd}" } }
      
      







1.1.1.1-RabbiMQへのエントリポイントのIPアドレス。 私たちの場合、これは特にIP rebbitです。

2.2.2.2-ES-BalancerのIPアドレス。 使用するバランサーを明示的に示すために使用されます。



イベントログを使用したダーティハックは、すべての「美しさ」を壊すさまざまな引用符とスラッシュの無限の流れに何らかの方法で対処するために必要です。





リスナーの場合:

config.conf
 input { # Logstash to Logstash lumberjack { codec => "json" port => 3333 ssl_certificate => "/etc/logstash/ls.crt" ssl_key => "/etc/logstash/ls.key" } # Nxlog to Logstash tcp { type => "eventlog" port => 3515 codec => "json" } } output { rabbitmq { durable => true exchange => "logstash-exchange" key => "logstash-routing-key" exchange_type => "direct" host => '1.1.1.1' password => "guest" persistent => true user => "guest" } #file { path => "/var/log/raw/%{host}/%{+YYYY-MM-dd}.log" } }
      
      









詳細はこちらこちらをご覧ください。



HAProxyをインストールする





 apt-get update && apt-get install haproxy -y
      
      







/etc/haproxy/haproxy.cfgを編集します

haproxy.cfg
 global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option tcplog option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 listen to_listeners_event_log :3515 mode tcp balance roundrobin option tcpka server one 1.1.1.1:3515 check inter 5000 server two 2.2.2.2:3515 check inter 5000 … server last nnnn:3515 check inter 5000 listen to_listeners_event_log :3333 mode tcp balance roundrobin option tcpka server one 1.1.1.1:3333 check inter 5000 server two 2.2.2.2:3333 check inter 5000 … server last nnnn:3333 check inter 5000 listen stats :1936 stats show-legends stats refresh 5s stats hide-version stats uri /
      
      









突然起動しない場合は、 / etc / default / haproxyENABLED = 01に変更します



1936ポートの統計を見ることができます。



NXLOGをインストールする





NXLOGにはコミュニティバージョンがあります。オフサイトからダウンロードしてください

次のような構成:

nxlog.conf
 #define ROOT C:\Program Files\nxlog define ROOT C:\Program Files (x86)\nxlog Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Extension json> Module xm_json </Extension> # Windows Event Log <Input eventlog> # Uncomment im_msvistalog for Windows Vista/2008 and later Module im_msvistalog Query <QueryList> \ <Query Id='1'> \ <Select Path="Application">*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]</Select> \ <Select Path='Security'>*</Select> \ <Select Path="System">*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]</Select> \ </Query> \ </QueryList> Exec $Message = replace ($Message, '"', "'"); # Uncomment im_mseventlog for Windows XP/2000/2003 # Module im_mseventlog Exec to_json(); </Input> <Output out> Module om_tcp # Ip of HAProxy listeners server Host 192.168.0.14 # Port in Listeners Port 3515 </Output> <Route 1> Path eventlog => out </Route>
      
      









私は意図的にIPプロキシをより馴染みのあるものに設定したので、これがクライアントに表示される唯一のアドレスであることは明らかでした(kibanaを除く)。



nxlogサービスを再起動します。



すべてが正しければ、すべてのホストで何らかのアクティビティを確認できます。



Kibanaのインストール



 cd /tmp wget https://download.elastic.co/kibana/kibana/kibana-4.1.0-linux-x64.tar.gz tar xvfC kibana-4.1.0-linux-x64.tar.gz /usr/local rm -vf /usr/local/kibana ln -s /usr/local/kibana-4.1.0-linux-x64 /usr/local/kibana cd /usr/local/kibana
      
      







構成/usr/local/kibana/config/kibana.ymlを編集します

 … port: 80 … elasticsearch_url: 'http://IP_TO_ES_BALANCER:9200'
      
      







さて、実行:

 ./bin/kibana -q &
      
      







ブラウザを介して外部ip kibanaに移動し、構成を使用して直感的な操作を行うように提案されます。



それだけです これで、椅子に座って1〜10個のダッシュボードを作成し、ログを見ることができます(ちなみに、それらを美しく整理し、数cmに置くことができます)。

もちろん、このシステム全体を管理しやすくするために、このプロセスを何らかの方法で自動化することをお勧めします。 私たちの場合、これはシェフ+オープンスタックです。起動時に実行するレシピを設定し、紅茶/コーヒー/レモネードを飲みに行きました。

そして、これは、実行できること、実行すべきことからはほど遠いものです。 しかし、基本的なプラットフォームはすでに存在しています。



最小装備:

1 HAProxy

リスナー2人

1 RabbitMQ

2フィルター

1 ESバランサー

2 ESマスター

2 ESデータ



RabbitMQをクラスターに配置すると、リスナー、フィルター、ES-Dataノードを追加するためにすべての水平スケーリングが低下します。 自動化を考慮すると、このプロセスには5〜15分かかります(官僚主義は考慮していません)。

1時間でChefを使用してすべてをゼロからテストベンチに展開し、そのうち5分でホストを作成し、5分でホストでレシピを実行するスクリプトを作成し、40分でHabrのニュースを読み、10分ですべてをチェックしました正常に動作します。



この記事が誰かの役に立つことを願っています。



All Articles