基本环境
Linux系统
- elasticsearch-2.4.2.tar.gz
- logstash-2.4.1.tar.gz
- kibana-4.6.3-linux-x86_64.tar.gz
基本概念
本节内容摘自http://baidu.blog.51cto.com/71938/1676798
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和 效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products
- Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
- kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、 分析和搜索重要数据日志。
工作原理如下如所示:
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
elasticsearch集群安装
下载地址
https://www.elastic.co/products/elasticsearch
解压
|
|
安装head插件
|
|
配置config
这里集群包含3台服务器
elasticsearch-2.4.2_1的配置
|
|
elasticsearch-2.4.2_21的配置(只写了不同的部分)
|
|
elasticsearch-2.4.2_3的配置(只写了不同的部分)
|
|
后台启动3台服务器:
注意要讲elasticsearch所有文件用户赋给elasticsearch用户,否则没权限。
这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑。chown -R elasticsearch elasticsearch2.4.0
如果出现
curl 127.0.0.1:9211
可以正常访问,curl 本机IP地址:9211
不能访问的问题,则需要在conf文件中配置network.host: 你的服务器ip地址
。参考:ss -l
命令
安装logstash
修改配置文件
- 读取文件方式1234567891011121314151617181920212223242526272829303132333435input {file {type => "infolog"#监听文件的路径path => "你的日志路径*.log"}file {type => "errorlog"#监听文件的路径path => "你的日志路径*.log"}}filter {multiline {pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"negate => truewhat => "previous"}}output {if [type] == "infolog" {elasticsearch {action => "index" #The operation on EShosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.index => "apilog" #The index to write data to.}}else{elasticsearch {action => "index" #The operation on EShosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.index => "apierrorlog" #The index to write data to.}}}
- 说明:multiline的作用是为了处理错误日志的,使得错误堆栈信息作为一条记录显示。这里可能导致无法创建多线程,只能以单线程运行,解决办法参考我的另一篇文章ELK 之 nginx日志分析1234567filter {multiline {pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"negate => truewhat => "previous"}}
- 还可以直接与log4j配合使用,直接将日志输出到logstash中123456789log4j.logger.包名=debug, socket# appender socketlog4j.appender.socket=org.apache.log4j.net.SocketAppenderlog4j.appender.socket.Port=${elk_port}log4j.appender.socket.RemoteHost=${elk_ip}log4j.appender.socket.layout=org.apache.log4j.PatternLayoutlog4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%nlog4j.appender.socket.ReconnectionDelay=10000
启动服务
|
|
安装kibana
修改配置
|
|
后台启动
|
|
但是nohup在使用时还需要注意一些问题:
1、当输入nohup COMMAND & 命令后,需要按任意键返回到shell窗口
2、退出当前登录窗口用exit命令,不要直接点击窗口上的叉来关闭
配置索引
进入kibana,配置好在logstash中配置的索引
到此为止,ELK环境搭建完毕。
后续会继续写ELK的具体使用教程,敬请期待