ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程

环境:OS X 10.10.5 + JDK 1.8

步骤:

一、下载ELK的三大组件

Elasticsearch下载地址: https://www.elastic.co/downloads/elasticsearch (目前最新版本:2.1.1)

Logstash下载地址: https://www.elastic.co/downloads/logstash (目前最新版本:2.1.1)

Kibana下载地址: https://www.elastic.co/downloads/kibana (目前最新版本:4.3.1)

下载后将其解压到某个目录即可,本文中的解压目录为:

~/app/elasticsearch-2.1.1

~/app/logstash-2.1.1

~/app/kibana-4.3.1-darwin-x64

注:这3个组件相互之间的关系及作用如下:

Logstash(收集服务器上的日志文件) --》然后保存到 ElasticSearch(搜索引擎) --》Kibana提供友好的web界面(从ElasticSearch读取数据进行展示)

 

二、启动elasticsearch

2.1

进入elasticsearch目录\bin

./elasticsearch

顺利的话,启动成功后,在浏览器里输入http://localhost:9200/ 应该能看到类似下面的输出:

复制代码
 1 {
 2   "name" : "Atalanta",
 3   "cluster_name" : "elasticsearch",
 4   "version" : {
 5     "number" : "2.1.1",
 6     "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
 7     "build_timestamp" : "2015-12-15T13:05:55Z",
 8     "build_snapshot" : false,
 9     "lucene_version" : "5.3.1"
10   },
11   "tagline" : "You Know, for Search"
12 }
复制代码

2.2 安装kopf插件

先按Ctrl+C停止elasticsearch,接下来准备安装插件,elasticsearch有大量插件资源,用于增加其功能,bin目录下,输入

./plugin list 可以查看当前安装的插件列表,我们刚刚全新安装,输出的是一个空列表,继续输入

./plugin install lmenezes/elasticsearch-kopf

将会联网安装kopf插件,安装完成后,再次用./plugin list确认下:

Installed plugins in /Users/yjmyzz/app/elasticsearch-2.1.1/plugins:
    - .DS_Store
    - kopf

如果输出上述类似,表明kopf安装成功。

然后重启elasticsearch,浏览器里输入http://localhost:9200/_plugin/kopf,将会看到类似下面的界面,可以很直观的看到elasticsearch的一些运行状况

点击看大图

以上操作都ok后,建议Ctrl+C关掉,改用nohup ./elasticsearch & 将其做为后台进程运行,以免退出。

 

三、logstash的启动与配置

3.1 新建索引配置文件

~/app/logstash-2.1.1/bin 下

mkdir conf

vi conf/logstash-indexer.conf

内容如下:

复制代码
 1 input {
 2  file {
 3    path => ["/var/opt/log/a.log","/var/opt/log/b.log"]
 4  }
 5 }
 6 
 7 output {
 8   elasticsearch { hosts => ["localhost:9200"] }
 9   stdout { codec => rubydebug }
10 }
复制代码

上面几个步骤的意思就是创建一个名为logstash-indexer.conf的配置文件,input{file{...}}部分指定的是日志文件的位置(可以多个文件),一般来说就是应用程序log4j输出的日志文件。output部分则是表示将日志文件的内容保存到elasticsearch,这里hosts对应的是一个数组,可以设置多个elasticsearch主机,相当于一份日志文件的内容,可以保存到多个elasticsearch中。

至于第9行的stdout,则表示终端的标准输出,方便部署时验证是否正常运行,验证通过后,可以去掉。

3.2 启动

继续保持在logstash的bin目录下,输入

./logstash -f conf/logstash-indexer.conf

稍等片刻,如果看到Logstash startup completed,则表示启动成功。然后另开一个终端窗口,随便找个文本编辑工具(比如:vi),向/var/opt/log/a.log里写点东西,比如:hello world之类,然后保存。观察logstash的终端运行窗口,是否有东西输出,如果有以下类似输出:

复制代码
1 {
2        "message" => "hello world",
3       "@version" => "1",
4     "@timestamp" => "2016-01-08T14:35:16.834Z",
5           "host" => "yangjunmingdeMacBook-Pro.local",
6           "path" => "/var/opt/log/a.log"
7 }
复制代码

说明logstash工作正常,此时浏览http://localhost:9200/_search?pretty 也应该能看到一堆输出,表明elasticsearch接收到logstash的数据了。

 

四、kibana的配置及启动

4.1 修改配置文件

~/app/kibana-4.3.1-darwin-x64/config 下有一个配置文件kibana.yml,大概在12行的位置,改成下面这样:

1 # The Elasticsearch instance to use for all your queries.
2 elasticsearch.url: "http://localhost:9200"

即:指定elasticsearch的访问位置

4.2 启动

~/app/kibana-4.3.1-darwin-x64/bin 下,输入:

./kibana

注:如果启动不成功,请检查版本是否为4.3.1,kibana必须与elasticsearch的版本匹配,一般说来,都从官网下载最新版即可。

启动完成后,在浏览器里输入http://localhost:5601/ 即可看到kibana界面,首次运行,会提示创建index,直接点击Create按钮即可。

然后,就能看到类似下面的界面了:

 





Windows 安装ELK

Windows服务器上安装ELK

logstash在windows平台下不能监控磁盘文件,用nxlog代替,监控文件并把内容发送到logstash

   

部署环境

Os :Windows 7

logstash版本:logstash-2.2.1

elasticsearch版本:elasticsearch-2.2.0

kibana版本:kibana-4.4.2-windows

nxlog版本:2.8.1248

Java版本:jdk-8

   

下载软件

   

Java: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Logstashhttps://www.elastic.co/downloads/logstash

Elasticsearch: https://www.elastic.co/downloads/elasticsearch

Kibana: https://www.elastic.co/downloads/kibana

Nxlog: http://nxlog.org/products/nxlog-community-edition/download

Nssm: https://nssm.cc/download

   

帮助文档

Logstash https://www.elastic.co/guide/en/logstash/current/codec-plugins.html

Elasticsearch https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html

Kibana https://www.elastic.co/guide/en/kibana/current/index.html

Nxlog http://nxlog.org/docs

nssm:https://nssm.cc/usage

   

   

解压文件

我创建了文件夹"E:\soft\elk",将所有压缩包解压到此目录,方便以后管理。

目录结构如下所示:

E:\soft\elk\elasticsearch-2.2.0

E:\soft\elk\logstash-2.2.1

E:\soft\elk\kibana-4.4.2-windows

   

安装java

下载 Java SE Downloads,我下载的是jdk-8u65-windows-x64.exe

安装完成后添加JAVA_HOME 环境变量

   

Path添加 %JAVA_HOME%\bin

   

   

安装nxlog

双击安装,安装过程省略

   

启动elasticsearch

   

   

输入service manager

   

   

   

修改"Startup type " ,Automatic

运行服务

   

在浏览器中输入http://localhost:9200,出现如下界面,表明elasticsearch安装成功。

安装插件

   

/bin/plugin install mobz/elasticsearch-head

   

   

安装成功后打开http://localhost:9200/_plugin/head/

通过这个页面可以查询和测试elasticsearch的api

   

 新建Logstash配置文件

   

在E:\soft\elk\logstash-2.2.1\bin\config 文件夹里新建Logstash.conf

内容如下

input {

tcp {

port=>5549        

}

}

   

   

output {

elasticsearch {

hosts => ["localhost:9200"]

index => "test-logstash-%{+YYYY-MM}"         

}

}

   

启动kibana

E:\soft\elk\kibana-4.4.2-windows>bin\kibana

   

   

启动logstash

E:\soft\elk\logstash-2.2.1\bin>logstash.bat agent -f config\logstash.conf

   

   

Telnet 测试数据

telnet 127.0.0.1 5549

输入

test lostash

   

打开http://localhost:5601 输入如下内容,点击 create

   

   

回到discover 页面显示如下内容

   

   

   

ELK安装完成

   

把kibana、logstash安装成服务

Logstash 启动可以把logstash.bat agent -f config\logstash.conf 保存到一个 bat文件中,nssm启动这个bat文件

   

解压缩nssm,通过nssm.exe安装成服务,使用方式 nssm -? 获取帮助信息

   

   

   

监控本地文件到elk,注意要监控的文件格式是ansi的,不能用utf8 的编码,会出现乱码

   

打开 C:\Program Files (x86)\nxlog\conf\nxlog.conf

Nxlog 配置文件如下

<Input in>

Module im_file

File "E:\\log\\webapi\\\error_*.log"

SavePos TRUE

   

</Input>

   

<Output out>

Module om_tcp

Host 127.0.0.1

Port 5549

</Output>

   

<Route 1>

Path in => out

</Route>

   

启动noxlog 服务,在文件中输入内容,在kibana中查看内容是否发送成功

   

检查错误

1.nxlog 检查

C:\Program Files (x86)\nxlog\data\nxlog.log 会有nxlog启动情况,如果配置文件有错,会在这里显示

2.logstash

如果数据发送失败,用控制台启动logstash,数据转换或正则的错误会在控制台里显示




一、ElasticSearch简介


   ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,
能够达到实时搜索,稳定,可靠,快速,安装使用方便。 建立一个网站或应用程序,并要添加搜索功能,令我们受打击的
是:搜索工作是很难的。希望我们的搜索解决方案要快,希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单
地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们
要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。
ElasticSearch的Schema与其它DB比较:
image
ElasticSearch三方访问方式:
image
   环境是CentOS6.4,安装方法有好几种,在这儿我们直接从官网下载包, 1.71版解压后,进入目录执行:
   bin/elasticsearch
   检查服务是否正常工作
   curl -X GET http://localhost:9200/
elasticsearch默认是9200端口,返回一个JSON数据,有版本说明运行正常。 
elasticsearch的伸缩性很高,如下示例数据分片:
image
安装前端elasticsearch-head

elasticsearch/bin/plugin –install  mobz/elasticsearch-head

打开 http://localhost:9200/_plugin/head/,可以看如下UI,此处我们配置IP是192.168.0.103,它多语言版,已经自动识别为中文UI

image

在这儿我们还安装一个管理结点的前端 bigdesk,  安装方式类似,也是推荐插件模式:

$ ./bin/plugin -install lukas-vlcek/bigdesk/<bigdesk_version>
http://192.168.0.103:9200/_plugin/bigdesk/ 之后UI是这样的:
image

还有其他的前端项目,在这儿我们不一 一 描述,其目的为了更好的管理ElasticSearch集群。

 

二、ElasticSearch与Asp.net应用程序集成

好了,我们在Asp.net项目中已经安装Elmah,现在我们安装 Elmah.Elasticsearch,这里是1.1.0.27

PM> Install-Package Elmah.Elasticsearch

在web.config中配置节,我们配置index名称:elmahCurrent

1
2
3
4
5
6
7
< elmah >
    <!--
        See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for
        more information on remote access and securing ELMAH.
    --> < security  allowRemoteAccess="true" />
    < errorLog  type="Elmah.Io.ElasticSearch.ElasticSearchErrorLog, Elmah.Io.ElasticSearch" connectionStringName="ElmahIoElasticSearch" defaultIndex="elmahCurrent" />
</ elmah >

连接字符串增加

1
2
3
< connectionStrings >
   < add  name="ElmahIoElasticSearch" connectionString="http://192.168.0.103:9200/" />
</ connectionStrings >

让我们来访问一个不存在http://localhost:1960/KK webpage  故意引发异常,然后我们到前端head里可以看到:

image 
完整记录JSON数据,当然也可以使用查询方式。

接下来,让我们来配置NLOG的日志也输出到ElasticSearch,先安装包 NLog.Targets.ElasticSearch 1.0.14

PM> Install-Package NLog.Targets.ElasticSearch

对应的NLog.config文件是这样的,看加粗字体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? xml  version="1.0" encoding="utf-8" ?>
< nlog  xmlns="http://www.nlog-project.org/schemas/NLog.xsd"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   < extensions >
     < add  assembly="NLog.Targets.ElasticSearch"/>
   </ extensions >
   < targets  async="true">
< strong >    < target  name="elastic" xsi:type="ElasticSearch" uri="http://192.168.0.103:9200/"  index="DevLogging" documentType="logevent"></ strong >
     </ target >
     < target  name="asyncFile" xsi:type="AsyncWrapper">
       < target  xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
        layout="${longdate} ${logger} ${uppercase:${level}} ${message} ${exception:format=ToString,StackTrace,method:maxInnerExceptionLevel=5:innerFormat=ToString}" />
     </ target >
   </ targets >
   < rules >
     < logger  name="*" minlevel="Trace" writeTo="f" />
    < strong > < logger  name="*" minlevel="Trace" writeTo="elastic" /></ strong >
   </ rules >
</ nlog >

这样我们可以把非异常的日志自由输出到ElasticSearch中,例如我们记录webapi请求的日志:

image

devlogging是我们在配置文件已配置过的index名称。 我们同时使用NLOG记录了文件日志。

搜索:

image

基于REST方式请求按ID查询:

http://localhost:9200/<index>/<type>/<id>.

如:

http://192.168.0.103:9200/devlogging/logevent/AU9a4zu6oaP7IVhrhcmO

还有一些搜索示例如下:

//索引
$ curl -XPUT http://localhost:9200/twitter/tweet/2 -d '{
    "user": "kimchy",
    "post_date": "2009-11-15T14:12:12",
    "message": "You know, for Search"
}'

//lucene语法方式的查询
$ curl -XGET http://localhost:9200/twitter/tweet/_search?q=user:kimchy

//query DSL方式查询
$ curl -XGET http://localhost:9200/twitter/tweet/_search -d '{
    "query" : {
        "term" : { "user": "kimchy" }
    }
}'

//query DSL方式查询
$ curl -XGET http://localhost:9200/twitter/_search?pretty=true -d '{
    "query" : {
        "range" : {
            "post_date" : {
                "from" : "2009-11-15T13:00:00",
                "to" : "2009-11-15T14:30:00"
            }
        }
    }
}'

我们可以配置多个应用程序的日志统一输出到ES中,以便于我们查询与分析。



 CentOS

 
 

环境

CentOS 7.1 + Oracle JDK 7.0

步骤

  • 下载Linux版本的三个组件,官网下载地址:https://www.elastic.co/downloads
  • 下载后使用SSH工具传到服务器(客户机是window,安装是在linux服务器上)
  • 分别解压到不同的目录下(tar -zxvf XXX)
Paste_Image.png

三大组件之间的关系

  • Logstash(收集服务器上的日志文件)
  • 保存到 ElasticSearch(搜索引擎)
  • Kibana提供友好的web界面(从ElasticSearch读取数据进行展示)

elasticsearch配置

  • 进入elasticsearch的bin目录下
  • 启动./elasticsearch
  • 顺利的话,使用curl命令,可以看到如下代码
Paste_Image.png
  • 我们可以在客户端浏览器进行访问,但是发现访问不了,原因是elasticsearch配置文件的设置,由于了解不深,就不做过多介绍,在config目录下修改elasticsearch.yml文件
Paste_Image.png

安装kopf插件,elasticsearch中有很多插件

  • 停止elasticsearch进入bin目录
  • ./plugin list可以查看已经安装的插件列表
  • ./plugin install lmenezes/elasticsearch-kopf
  • 使用./plugin list查看是否安装成功,下面是安装成功了
Paste_Image.png
  • 然后重新启动elasticsearch,在浏览器中访问http://localhost:9200/_plugin/kopf,将会看到类似下面的界面,可以很直观的看到elasticsearch的一些运行状况
Paste_Image.png

遇到的问题

  • 在以admin启动的时候出现异常
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root. at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:285) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) Refer to the log for complete error details.
  • 新建用户

useradd elsearch

  • 给elsearch用户权限

chown -R elsearch:elsearch elasticsearch

  • 启动成功

Logstash的配置

  • Logstash用于收集日志,我们在bin目录下新建conf文件,然后新建logstash-indexer.conf配置文件

mkdir conf
vi conf/logstash-indexer.conf

  • 添加配置信息
input {
 file {
   path => ["/var/opt/log/a.log","/var/opt/log/b.log"]
 }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}
  • input{file{...}}部分指定的是日志文件的位置(可以多个文件),一般位置就是log4j输出的日志文件
  • output部分则是表示将日志文件的内容保存到elasticsearch,这里hosts对应的是一个数组,可以设置多个elasticsearch主机,相当于一份日志文件的内容,可以保存到多个elasticsearch中。
  • 启动

./logstash -f conf/logstash-indexer.conf

  • 在日志中写入一点文件
  • 如有类似输出,表示成功
{
       "message" => "  stdout { codec => rubydebug }\r",
      "@version" => "1",
    "@timestamp" => "2016-08-29T06:15:41.538Z",
          "path" => "/home/cheng/log/a.log",
          "host" => "172.16.103.19"
}

配置Kibana

  • 因为Kibana要从ElasticSearch读取数据进行展示,在这里我们要对Kibana进行配置,修改kibana.yml文件,将url改为当前服务器的地址

elasticsearch.url: "http://localhost:9200"



作者:橙小张
链接:https://www.jianshu.com/p/ff82bb09301c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值