非常に役立つ記事:
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
1.1.1.1-RabbiMQへのエントリポイントのIPアドレス。 私たちの場合、これは特にIP rebbitです。
2.2.2.2-ES-BalancerのIPアドレス。 使用するバランサーを明示的に示すために使用されます。
イベントログを使用したダーティハックは、すべての「美しさ」を壊すさまざまな引用符とスラッシュの無限の流れに何らかの方法で対処するために必要です。
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 / haproxyでENABLED = 0を1に変更します 。
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分ですべてをチェックしました正常に動作します。
この記事が誰かの役に立つことを願っています。