Log4j + Logstash + ElasticSearch + Kibana 3 +認証(Google OAuth2 / BasicAuth / CAS認証)を作成することを学ぶ



挑戦する



ログを処理および受信するための便利なツールをセットアップします。



条件



  1. MITまたはApache 2.0ライセンス
  2. 複数行メッセージを受信および処理する機能
  3. セットアップと使用が簡単
  4. Log4jのログを操作する機能




解決策



Logstash + ElasticSearch + Kibana 3。



実装



まず、サーバーにLogstash + ElasticSearch + Kibana 3をデプロイします。




#  ,   7   java -version # ,         Logstash cd /srv #     mkdir slog #   cd slog #   Logstash,      http://logstash.net/ curl -O https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz # tar.gz tar zxvf logstash-1.4.2.tar.gz #     Logstash cd logstash-1.4.2 #  Logstash  bin/logstash -e 'input { stdin { } } output { stdout {} }' #        .    ,   (Ctrl + C).
      
      







ここで、Logstashの構成ファイルを詳細に構成します。

ファイルはどこにでも保存できます。たとえば、 logstash / conf / main.confに保存します。

私の構成ファイルオプション:

 input { log4j { mode => "server" host => "logstash_server_ip" port => logstash_server_port type => "log4j" } } output { elasticsearch { embedded => "true" } }
      
      





詳細:



入力

モード -サービスのタイプ、サーバー/クライアント

host-サーバーのIPアドレス、log4jログが送信するアドレス

port = logstash_server_port-ログ交換用のポート

type-ログを示すメッセージのタイプ。

出力

組み込み -独自のelasticsearchサービスを開始する必要がありますか、それとも既存のサービスへの接続を確立する必要がありますか



Log4jでロギングを構成します。


このために、Log4jのLogstashプラグインと、Log4j側のSocketAppenderを使用します。



Log4jに設定を追加します。



logstash_server_port-ログを交換するためのLogstash設定で指定するポート

logstash_server_ip -Logstashが配置されているサーバーのIPアドレス

xml
 <appender name="LOGSTASH" class="org.apache.log4j.net.SocketAppender"> <param name="port" value="logstash_server_port" /> <param name="remoteHost" value="logstash_server_ip" /> </appender> <root> <appender-ref ref="LOGSTASH" /> </root>
      
      







物性
 log4j.rootLogger=logstash log4j.appender.logstash=org.apache.log4j.net.SocketAppender log4j.appender.logstash.port=logstash_server_port log4j.appender.logstash.remoteHost=logstash_server_ip
      
      







次に、システムを起動してみてください。


 #      Logstash cd /srv/slog/logstash-1.4.2/ #     : bin/logstash agent -f conf/main.conf #        ,      web bin/logstash agent -f conf/main.conf web
      
      





起動の最後に、同様のメッセージが画面に表示されます:

 Using milestone 1 input plugin 'log4j'. This plugin should work, but would benefit from use by folks like you. Please let us know if you find bugs or have suggestions on how to improve this plugin. For more information on plugin milestones, see http://logstash.net/docs/1.4.2/plugin-milestones {:level=>:warn}
      
      





これは、Log4jプラグインがテスト状態にあると言います。



今、視覚部分に行きます

  http:// logstash_server_ip:9292 


logstash_server_ip-サーバーのIPアドレス

9292-デフォルトのポート。構成ファイルで変更できます。



Kibanaの標準パフォーマンスはあまり便利ではないように思えましたが、カスタマイズすることはできます。 個人的には、私はこの記事のバージョンを基礎として、プレゼンテーションをより便利にしたと思います。



ここに私のオプションがあります
 { "title": "Home dashboard dark", "services": { "query": { "idQueue": [], "list": { "0": { "id": 0, "color": "#7EB26D", "alias": "", "pin": false, "type": "lucene", "enable": true, "query": "priority: \"INFO\"" }, "1": { "id": 1, "color": "#E24D42", "query": "priority: \"ERROR\"", "alias": "", "pin": false, "type": "lucene", "enable": true }, "2": { "id": 2, "color": "#6ED0E0", "alias": "", "pin": false, "type": "lucene", "enable": true, "query": "priority: \"WARN\"" } }, "ids": [ 0, 1, 2 ] }, "filter": { "idQueue": [], "list": { "0": { "type": "time", "field": "@timestamp", "from": "now-6h", "to": "now", "mandate": "must", "active": true, "alias": "", "id": 0 } }, "ids": [ 0 ] } }, "rows": [ { "title": "Filtering", "height": "150px", "editable": true, "collapse": false, "collapsable": true, "panels": [ { "error": false, "type": "filtering", "span": 12 }, { "loading": false, "error": false, "sizeable": false, "span": 12, "height": "150px", "editable": true, "type": "query", "query": "*", "pinned": true, "history": [ "priority: \"WARN\"", "priority: \"ERROR\"", "priority: \"INFO\"", "@&~(HHH.+)", "@&~(foo.+)", "*", "level:\"WARN\"", "level:\"ERROR\"", "level:\"INFO\"" ], "remember": 10 } ], "notice": true }, { "title": "Graph", "height": "200px", "editable": true, "collapse": false, "collapsable": true, "panels": [ { "span": 12, "editable": true, "group": [ "default" ], "type": "histogram", "mode": "count", "time_field": "@timestamp", "value_field": null, "auto_int": true, "resolution": 99, "interval": "5m", "fill": 2, "linewidth": 3, "timezone": "browser", "spyable": true, "zoomlinks": true, "bars": false, "stack": false, "points": false, "lines": true, "legend": true, "x-axis": true, "y-axis": true, "percentage": false, "interactive": true, "queries": { "mode": "all", "ids": [ 0, 1, 2 ] }, "title": "Events over time", "intervals": [ "auto", "1s", "1m", "5m", "10m", "30m", "1h", "3h", "12h", "1d", "1w", "1M", "1y" ], "options": true, "tooltip": { "value_type": "cumulative", "query_as_alias": true }, "scale": 1, "y_format": "none", "grid": { "max": null, "min": 0 }, "annotate": { "enable": false, "query": "*", "size": 20, "field": "_type", "sort": [ "_score", "desc" ] }, "pointradius": 5, "show_query": true, "legend_counts": true, "zerofill": true, "derivative": false } ], "notice": false }, { "title": "Events", "height": "150px", "editable": true, "collapse": false, "collapsable": true, "panels": [ { "title": "All events", "error": false, "span": 12, "editable": true, "group": [ "default" ], "type": "table", "size": 100, "pages": 5, "offset": 0, "sort": [ "@timestamp", "desc" ], "style": { "font-size": "9pt" }, "overflow": "min-height", "fields": [ "@timestamp", "priority", "message", "class", "host" ], "highlight": [ "level" ], "sortable": true, "header": true, "paging": true, "spyable": true, "queries": { "mode": "all", "ids": [ 0, 1, 2 ] }, "field_list": false, "status": "Stable", "trimFactor": 300, "normTimes": true, "all_fields": false, "localTime": false, "timeField": "@timestamp" } ], "notice": false } ], "editable": true, "failover": false, "index": { "interval": "day", "pattern": "[logstash-]YYYY.MM.DD", "default": "NO_TIME_FILTER_OR_INDEX_PATTERN_NOT_MATCHED", "warm_fields": true }, "style": "dark", "panel_hints": true, "pulldowns": [ { "type": "query", "collapse": false, "notice": false, "query": "*", "pinned": true, "history": [], "remember": 10, "enable": false }, { "type": "filtering", "collapse": true, "notice": true, "enable": false } ], "nav": [ { "type": "timepicker", "collapse": false, "notice": false, "status": "Stable", "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ], "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "timefield": "@timestamp", "now": true, "filter_id": 0, "enable": true } ], "loader": { "save_gist": false, "save_elasticsearch": true, "save_local": true, "save_default": true, "save_temp": true, "save_temp_ttl_enable": true, "save_temp_ttl": "30d", "load_gist": true, "load_elasticsearch": true, "load_elasticsearch_size": 20, "load_local": true, "hide": false }, "refresh": false }
      
      







認証:


このシステムの欠点は、内部ネットワーク用に設計されたという事実のため、認証がないことです。 しかし、これはgithubからのこのフォークによってすぐに解決されます。



それを使用するには、まず、サーバーにnode.jsをインストールする必要があります。 個人的には、 このチュートリアルを使用しました



 #   cd /usr/src #  http://nodejs.org/download/.       # http://nodejs.org/dist/v0.10.31/node-v0.10.31.tar.gz #  wget http://nodejs.org/dist/v0.10.31/node-v0.10.31.tar.gz #  tar zxf node-v0.10.4.tar.gz #    node.js cd node-v0.10.4 #  ./configure #      make make install #     node.js #       . #        cd /srv/slog #  : git clone https://github.com/fangli/kibana-authentication-proxy cd kibana-authentication-proxy/ git submodule init git submodule update npm install #    Kibana    cd kibana && git checkout master && git pull #    config.js . #   nano ,      nano /srv/slog/kibana-authentication-proxy/config.js
      
      







最初の起動では、次の設定を編集する必要があります: es_host / es_port

それらで、ElasticSearchの接続設定を設定します。 前のケースで、組み込みのKibanaに組み込みのElasticSearchを使用した場合、別のカスタムKibanaに構​​成する必要があります。 これを行うには、 main.confファイルを編集して、ElasticSearchポート設定を追加します。



elasticsearch_server_port -elasticsearchが利用可能になるポート

最終バージョン:

 input { log4j { mode => "server" host => "logstash_server_ip" port => logstash_server_port type => "log4j" } } output { elasticsearch { embedded => "true" embedded_http_port => elasticsearch_server_port } }
      
      







config.jsの設定を変更します



es_host :logstash_server_ip

Es_portelasticsearch_server_port



これで認証。 このフォークを使用すると、Google OAuth2 /基本認証/ CAS認証の3つの認証のいずれかを構成できます。



たとえば、基本認証を設定します。

  "enable_basic_auth": true, "basic_auth_users": [ {"user": "admin", "password": "admin"}, ],
      
      







打ち上げ:


 #   Logstash + ElasticSearch #  web          cd /srv/slog/logstash-1.4.2/ bin/logstash agent -f conf/main.conf #   Logstash     . cd /srv/slog/kibana-authentication-proxy/ node app.js
      
      





このKibanaフォークのデフォルトポートは9201です

そのため、次の場所で入手できます。

  http:// logstash_server_ip:9201。 




結果











UPD: Logstashをバージョン1.5に更新した後*レシピが機能しないため、時間があります-更新されたバージョンを投稿します。



All Articles