これらの日は、あなたと共有するのが良い記事を参照してラインで、ElasticSearchを研究してきました。
ELKプラットフォームの紹介
検索でELK情報は、私はこの記事が優れているので、短い抜粋が見つかりました:
以下から:http://baidu.blog.51cto.com/71938/1676798
システムログ、アプリケーションログ、およびセキュリティログを含むログ。システム運用・保守およびサーバーのハードウェアおよびソフトウェア開発者は、ログ情報を通じて学び、エラーの原因をチェックし、エラーが発生した構成処理することができます。ログの定期的な分析は、負荷、パフォーマンス、サーバーのセキュリティを理解し、そのエラーを修正するためにタイムリーな措置をとることができます。
典型的には、分散ログは、異なるデバイス上に格納されました。あなたは何百台ものサーバの数十を管理する場合でも、ログの検査の伝統的な方法を使用して順番に各マシンにログインします。これは非常に面倒で非効率的な感じされていません。我々のような、中央集中型のログ管理を使用することが不可欠:すべてのサーバーにログオンし、オープンソースのsyslogが集計を集めます。
集中管理、ログ管理の後、統計情報を記録して検索が面倒なことになってきた、我々は一般的なawk、grepのを使用し、トイレや他のLinuxは、検索や統計情報を得ることができますが、並べ替え、クエリ、およびより厳しい統計的要件のためのコマンドそしてマシンも、この方法を使用する多数のやや無力でした。
上記の私たちの問題を解決するためのオープンソースのリアルタイムログ解析ELK完璧なプラットフォーム、ELK ElasticSearch、LogstashとKiabana 3つのオープンソースツールで。公式サイト:https://www.elastic.co/products
-
Elasticsearch検索エンジン分散オープンソースであり、その特徴は次のとおり、このような自動負荷探索などの分散、ゼロコンフィギュレーション、自動検出、自動スライスインデックス、インデックス複製機構、安らかスタイルインターフェイス、複数のデータソース、。
-
Logstashが完全にオープンソースのツールである、彼はあなたのログ、フィルタを収集し、(検索など)後で使用するためにそれを保存することができます。
-
KibanaもKibanaフレンドリーWebインターフェイスを分析し、Logstash ElasticSearchあなたは、まとめて分析し、重要なデータのログを検索できるようにするために用意ログインすることができ、オープンソースとフリーのツールです。
---------------------------- 端の内容を抽出------------------- ------------
ELKは図の作品を描きました。
図:Logstashは、AppServerには、ログを生成し収集、およびElasticSearchクラスタを配置し、グラフからクラスタKibana ESクエリデータが生成され、その後、ブラウザに戻りました。
NBSP;
ELKプラットフォームが構築します
システム環境
システム:CentOSには(決勝)6.7をリリース
ElasticSearch:2.1.0
Logstash:2.1.1
Kibana: 4.3.0
Javaの:OpenJDKのバージョンNBSP; "1.8.0_65"
注意:原因Logstashへの操作は、Java環境に依存し、Logstash 1.5以降の以下のJava 1.7以上、Javaの最新バージョンを使用することをお勧めします。あなたが唯一のJREをインストールすることができますが、ここで私はまだJDKを使用するように、我々は唯一、Javaランタイム環境を必要とするので、独自の検索をインストールします。
ELKダウンロード:https://www.elastic.co/downloads/
NBSP;
ElasticSearch
設定ElasticSearch:
tarnbsp;-zxvfnbsp;elasticsearch-2.1.0.tar.gz cdnbsp;elasticsearch-2.1.0
装着ヘッドプラグ(オプション):
./bin/pluginnbsp;installnbsp;mobz/elasticsearch-head
ESその後、設定ファイルを編集します。
vinbsp;config/elasticsearch.yml
次の設定項目を変更します。
cluster.name=es_cluster
node.name=node0
path.data=/tmp/elasticsearch/data path.logs=/tmp/elasticsearch/logs #当前hostname或IP,我这里是centos2 network.host=centos2 network.port=9200
その他のオプションはデフォルトのままにして、ESを起動します。
./bin/elasticsearch
あなたは、ポートが9200のためのHTTP要求を受け入れ、転送ポート9300の他のノードとそれを見ることができます。
停止するには、Ctrl + Cを使用してください。もちろん、あなたはまた、バックグラウンド・プロセスは、道のESを開始し使用することができます。
./bin/elasticsearchnbsp;amp;
あなたは、ページのlocalhostを開くことができます:9200を、次のように表示されます。
戻りCLUSTER_NAMEと名の設定だけでなく、ESのバージョンやその他の情報のインストールを示しています。
刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。现在也可以使用它打开localhost:9200/_plugin/head页面来查看ES集群状态:
可以看到,现在,ES集群中没有index,也没有type,因此这两条是空的。
nbsp;
Logstash
Logstash的功能如下:
其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。
配置Logstash:
tarnbsp;-zxvfnbsp;logstash-2.1.1.tar.gz cdnbsp;logstash-2.1.1
编写配置文件(名字和位置可以随意,这里我放在config目录下,取名为log4j_to_es.conf):
mkdirnbsp;config
vinbsp;config/log4j_to_es.conf
输入以下内容:
#nbsp;Fornbsp;detailnbsp;structurenbsp;ofnbsp;thisnbsp;file
#nbsp;Set:nbsp;https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
inputnbsp;{
nbsp;nbsp;#nbsp;Fornbsp;detailnbsp;confignbsp;fornbsp;log4jnbsp;asnbsp;input,nbsp;
nbsp;nbsp;#nbsp;See:nbsp;https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
nbsp;nbsp;log4jnbsp;{
nbsp;nbsp;nbsp;nbsp;modenbsp;=gt;nbsp;"server" nbsp;nbsp;nbsp;nbsp;hostnbsp;=gt;nbsp;"centos2" nbsp;nbsp;nbsp;nbsp;portnbsp;=gt;nbsp;4567 nbsp;nbsp;} } filternbsp;{ nbsp;nbsp;#Onlynbsp;matchednbsp;datanbsp;arenbsp;sendnbsp;tonbsp;output. } outputnbsp;{ nbsp;nbsp;#nbsp;Fornbsp;detailnbsp;confignbsp;fornbsp;elasticsearchnbsp;asnbsp;output,nbsp; nbsp;nbsp;#nbsp;See:nbsp;https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html nbsp;nbsp;elasticsearchnbsp;{ nbsp;nbsp;nbsp;nbsp;actionnbsp;=gt;nbsp;"index"nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; #Thenbsp;operationnbsp;onnbsp;ES nbsp;nbsp;nbsp;nbsp;hostsnbsp;nbsp;=gt;nbsp;"centos2:9200" #ElasticSearchnbsp;host,nbsp;cannbsp;benbsp;array. nbsp;nbsp;nbsp;nbsp;indexnbsp;nbsp;=gt;nbsp;"applog"nbsp;nbsp;nbsp;nbsp;nbsp; #Thenbsp;indexnbsp;tonbsp;writenbsp;datanbsp;to. nbsp;nbsp;} }
logstash命令只有2个参数:
因此使用agent来启动它(使用-f指定配置文件):
./bin/logstashnbsp;agentnbsp;-fnbsp;config/log4j_to_es.conf
到这里,我们已经可以使用Logstash来收集日志并保存到ES中了,下面来看看项目代码。
nbsp;
Java项目
照例先看项目结构图:
pom.xml,很简单,只用到了Log4j库:
lt;dependencygt; nbsp;nbsp;nbsp;nbsp;lt;groupIdgt;log4jlt;/groupIdgt; nbsp;nbsp;nbsp;nbsp;lt;artifactIdgt;log4jlt;/artifactIdgt; nbsp;nbsp;nbsp;nbsp;lt;versiongt;1.2.17lt;/versiongt; lt;/dependencygt;
log4j.properties,将Log4j的日志输出到SocketAppender,因为官网是这么说的:
log4j.rootLogger=INFO,console
#nbsp;fornbsp;packagenbsp;com.demo.elk,nbsp;lognbsp;wouldnbsp;benbsp;sentnbsp;tonbsp;socketnbsp;appender.
log4j.logger.com.demo.elk=DEBUG,nbsp;socket
#nbsp;appendernbsp;socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender log4j.appender.socket.Port=4567 log4j.appender.socket.RemoteHost=centos2 log4j.appender.socket.layout=org.apache.log4j.PatternLayout log4j.appender.socket.layout.ConversionPattern=%dnbsp;[%-5p]nbsp;[%l]nbsp;%m%n log4j.appender.socket.ReconnectionDelay=10000 #nbsp;appendernbsp;console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%dnbsp;[%-5p]nbsp;[%l]nbsp;%m%n
注意:这里的端口号需要跟Logstash监听的端口号一致,这里是4567。
Application.java,使用Log4j的LOGGER打印日志即可:
packagenbsp;com.demo.elk;
importnbsp;org.apache.log4j.Logger;
publicnbsp;classnbsp;Applicationnbsp;{ nbsp;nbsp;nbsp;nbsp;privatenbsp;staticnbsp;finalnbsp;Loggernbsp;LOGGERnbsp;=nbsp;Logger.getLogger(Application.class); nbsp;nbsp;nbsp;nbsp;publicnbsp;staticnbsp;voidnbsp;main(String[]nbsp;args)nbsp;throwsnbsp;Exceptionnbsp;{ nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;fornbsp;(intnbsp;inbsp;=nbsp;0;nbsp;inbsp;lt;nbsp;10;nbsp;i++)nbsp;{ nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;LOGGER.error("Infonbsp;lognbsp;["nbsp;+nbsp;inbsp;+nbsp;"]."); nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Thread.sleep(500); nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;} nbsp;nbsp;nbsp;nbsp;} }
用Head插件查看ES状态和内容
运行Application.java,先看看console的输出(当然,这个输出只是为了做验证,不输出到console也可以的):
再来看看ES的head页面:
切换到Browser标签:
单击某一个文档(doc),则会展示该文档的所有信息:
可以看到,除了基础的message字段是我们的日志内容,Logstash还为我们增加了许多字段。而在https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html中也明确说明了这一点:
上面使用了ES的Head插件观察了ES集群的状态和数据,但这只是个简单的用于跟ES交互的页面而已,并不能生成报表或者图表什么的,接下来使用Kibana来执行搜索并生成图表。
nbsp;
Kibana
配置Kibana:
tarnbsp;-zxvfnbsp;kibana-4.3.0-linux-x86.tar.gz
cdnbsp;kibana-4.3.0-linux-x86
vinbsp;config/kibana.yml
修改以下几项(由于是单机版的,因此host的值也可以使用localhost来代替,这里仅仅作为演示):
server.port:nbsp;5601
server.host:nbsp;ldquo;centos2rdquo;
elasticsearch.url:nbsp;http://centos2:9200 kibana.index:nbsp;ldquo;.kibanardquo;
启动kibana:
./bin/kibana
用浏览器打开该地址:
为了后续使用Kibana,需要配置至少一个Index名字或者Pattern,它用于在分析时确定ES中的Index。这里我输入之前配置的Index名字applog,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:
点击Create后,可以看到左侧增加了配置的Index名字:
接下来切换到Discover标签上,注意右上角是查询的时间范围,如果没有查找到数据,那么你就可能需要调整这个时间范围了,这里我选择Today:
接下来就能看到ES中的数据了:
执行搜索看看呢:
点击右边的保存按钮,保存该查询为search_all_logs。接下来去Visualize页面,点击新建一个柱状图(Vertical Bar Chart),然后选择刚刚保存的查询search_all_logs,之后,Kibana将生成类似于下图的柱状图(只有10条日志,而且是在同一时间段的,比较丑,但足可以说明问题了:) nbsp;):
你可以在左边设置图形的各项参数,点击Apply Changes按钮,右边的图形将被更新。同理,其他类型的图形都可以实时更新。
点击右边的保存,保存此图,命名为search_all_logs_visual。接下来切换到Dashboard页面:
单击新建按钮,选择刚刚保存的search_all_logs_visual图形,面板上将展示该图:
如果有较多数据,我们可以根据业务需求和关注点在Dashboard页面添加多个图表:柱形图,折线图,地图,饼图等等。当然,我们可以设置更新频率,让图表自动更新:
如果设置的时间间隔够短,就很趋近于实时分析了。
到这里,ELK平台部署和基本的测试已完成。
nbsp;
参考:
http://baidu.blog.51cto.com/71938/1676798
http://blog.csdn.net/cnweike/article/details/33736429
nbsp;