ELK研究-部署搭建运用

1:需要解决什么问题? 

1)日志以文本文件形式存储在应用服务器上,查看不方便;

2)不能检索和分析;

3)有的公司对服务器权限控制比较严格,限制登录服务器;

4)通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下

5)集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情

2:什么是ELK?

ELK是ElasticSearch、Logstash、Kibana三个应用的缩写,目前都属于 Elasticsearch 公司产品,官方网站https://www.elastic.co/products

1)ElasticSearch简称ES,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等,项目开始于 2010 年,也是近两年最受关注的大数据项目之一,三次融资已经超过一亿美元;

2)Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),项目诞生于 2009 年 8 月 2 日,其作者是世界著名的运维工程师乔丹西塞(JordanSissel),乔丹西塞当时是著名虚拟主机托管商 DreamHost 的员工,还发布过非常棒的软件打包工具 fpm,并主办着一年一度的 sysadmin advent calendar(advent calendar 文化源自基督教氛围浓厚的 Perl 社区,在每年圣诞来临的 12 月举办,从 12 月 1 日起至 12 月 24 日止,每天发布一篇小短文介绍主题相关技术),2013 年,Logstash 被 Elasticsearch 公司收购;

3)Kibana也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志,angularjs 版本 kibana 其实原名叫 elasticsearch-dashboard,kibana 原先是 RoR 框架的另一个项目,但作者是同一个人,换句话说,kibana 比 logstash 还早就进了 elasticsearch 名下;

4)工作原理:在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示;

3:ELK部署搭建

已亲自尝试成功,并正常收发日志及查询显示

1)环境准备:

虚拟机安装:VMware-player-12.5.1-4542065.exe

Linux安装:CentOS-7-x86_64-DVD-1511.iso

2)安装Logstash依赖包JDK

Logstash的运行依赖于Java运行环境, Logstash 1.5以上版本不低于java 7推荐使用最新版本的Java。由于我们只是运行Java程序,而不是开发,下载JRE即可;

下载:#wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz

安装:

# mkdir /usr/local/java

# tar -zxf jdk-8u45-linux-x64.tar.gz -C /usr/local/java/

显示如下结果,说明安装成功

#java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02,mixed mode)

附:CentOS-7默认会安装JDK1.8.0_65

3)安装Logstash

下载:#wget https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz

安装:# tar –zxf logstash-1.5.2.tar.gz -C /usr/local/

4)安装Elasticsearch

下载版本:elasticsearch-1.6.0

安装:# tar -zxf elasticsearch-1.6.0.tar.gz -C /usr/local/

5)安装Kibana

下载版本:kibana-4.1.1

安装:# tar -zxf kibana-4.1.1-linux-x64.tar.gz -C /usr/local/

6)window上安装nxlog

选择对应OS的版本:nxlog-ce-2.9.1716.msi

4:实际运用

Logstash使用input和output定义收集日志时的输入和输出的相关配置

1)命令行作为logstash的输入input,命令行按照某种格式作为logstash的输出output

设置logstash配置文件(logstash-simple.conf)如下:

[root@localhost logstash-1.5.2]# cat logstash-simple.conf
input{stdin{}}
output{stdout{codec=>rubydebug}}

使用logstash的-f参数来读取配置文件,执行如下开始进行测试:

[root@localhost logstash-1.5.2]# /usr/local/logstash-1.5.2/bin/logstash agent -f logstash-simple.conf
Logstash startup completed
hello World
{
"message" => "hello World",
"@version" => "1",
"@timestamp" => "2017-01-11T05:05:28.622Z",
"host" => "localhost.localdomain"
}

可以看到输入的字符hello World按照指定格式输出的屏幕上

附:使用CTRL-C命令可以退出之前运行的Logstash

2)命令行作为logstash的输入input,elasticsearch和命令行同时作为logstash的输出output(这样的“多重输出”即保证输出结果显示到屏幕上,同时也输出到elastisearch中)

设置logstash配置文件(logstash-es-simple.conf)如下:

[root@localhost logstash-1.5.2]# cat logstash-es-simple.conf
input{stdin{}}
output{
elasticsearch{host=>"localhost"}     #elasticsearch作为输出配置
stdout{codec=>rubydebug}           #命令行作为输出配置
}

由于同时也输出到es,所以执行如下命令启动es:

[root@localhost ~]# /usr/local/elasticsearch-1.6.0/bin/elasticsearch

使用logstash的-f参数来读取配置文件,执行如下开始进行测试:

[root@localhost logstash-1.5.2]# /usr/local/logstash-1.5.2/bin/logstash agent -f logstash-es-simple.conf
Logstash startup completed
hello baby
{
"message" => "hello baby",
"@version" => "1",
"@timestamp" => "2017-01-11T05:30:50.636Z",
"host" => "localhost.localdomain"
}

可以看到输入的hello baby字符按照指定格式输出的屏幕上,接下来需要验证下是否也成功输出到es,输入如下命令:

[root@localhost ~]# curl 'http://localhost:9200/_search?pretty'

3)nxlog作为logstash的输入,es作为logstash的输出,并使用kibana检索发送的日志数据

nxlog配置:

## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally and is also available
## online at http://nxlog.org/docs/

## Please set the ROOT to the folder your nxlog was installed into,
## otherwise it will not start.

#define ROOT C:Program Files xlog
define ROOT C:Program Files (x86) xlog

Moduledir %ROOT%modules
CacheDir %ROOT%data
Pidfile %ROOT%data xlog.pid
SpoolDir %ROOT%data
LogFile %ROOT%data xlog.log

<Extension fileop>
Module xm_fileop
</Extension>

<Input testfile>
Module im_file
File "D:\test\*.log"
SavePos TRUE
</Input>

#处理csv格式

<Extension autolog>
Module xm_csv
Fields $Level, $Time, $HostName, $AppName, $Message, $DetailStackTrace
FieldTypes string, string, string, string, string, string
Delimiter ','
</Extension>

##业务日志的路径及解析配置
<Input FileMonitor>
Module im_file
File "D:\logs\NXLogCsv\2017*"
SavePos TRUE
Exec if $raw_event =~ /^#/ drop();
else
{
autolog->parse_csv();
$EventTime = parsedate($Time);
$EventTime = strftime($EventTime, "%Y-%m-%dT%H:%M:%S.000Z");
to_json ();
}
</Input>

<Output out>
Module om_tcp
Host 192.168.147.130
Port 514
Exec file_write("C:\Program Files (x86)\nxlog\data\nxlog_output.log", $raw_event);
</Output>

<Route 1>
Path testfile => out

</Route>

<Route 2>
Path FileMonitor => out

</Route>

日志数据当然也可以时csv等格式数据,可以使用nxlog组件转化成json数据发送给logstash

logstash配置

[root@localhost logstash-1.5.2]# cat logstash-nxlog-simple.conf
input{
tcp
{
type=>"applog"    #重要,索引类型
codec=>json         #重要,如果json方式配置,logstash在发送数据给es的时候,es可以自动根据json数据域自动匹配对应域
port=>514
}
}
output{
elasticsearch{
host=>"localhost"
index=>"%{type}-index-%{+YYYY.MM.dd}"    #重要,索引
}
stdout{codec=>rubydebug}
}

5:kibana使用

1)创建索引匹配模式

2)选择索引匹配模式

3)kibana搜索语法

6:总结

1)u盘挂载linux虚拟机,可能需要选择某个分区,默认会挂载某个目录

2)window拷贝文件到linux虚拟机

3)ftp传文件到linux虚拟机

4)xshell链接linux虚拟机

5)kibana不能链接到linux虚拟机,需要确认是否linux防火墙阻止了5601端口

6)三个重要配置:type=>"applog" ,codec=>json,index=>"%{type}-index-%{+YYYY.MM.dd}" 

附:参考文献

http://baidu.blog.51cto.com/71938/1676798

http://udn.yyuap.com/doc/logstash-best-practice-cn/ecosystem/nxlog.html

http://enable.blog.51cto.com/747951/1550579

原文地址:https://www.cnblogs.com/keys9/p/6270264.html