ELK日志统计系统安装小记 window10

兵器库

2017-09-27

237

0

摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究此方案可行性的时候,我发现ELK(ElasticSearch, Logstash, Kibana)平台恰好可以同时实现日志收集、日志搜索和日志分析的功能,于是又去学习了一番。之后发现如果使用这三者,收集日志也可以不再使用Kafka了,Logstash就可以帮我们完成。当然,虽然Logstash也支持使用Kafka作为数据源输入,但是使用这三者就没有必要再增加系统复杂度了。

ELK平台介绍

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products

 

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

 

画了一个ELK工作的原理图

如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

安装成功看到的效果图:

ELK平台搭建

系统环境

系统:window10

JDK:JDK1.8

elasticsearch:elasticsearch-5.6.1

Logstash:logstash-5.6.1

filebeat:filebeat-5.6.1-windows-x86_64

elasticsearch-header:elasticsearch-header

kibana:kibana-5.6.1-windows-x86

 

第一步:安装JDK1.8

1.下载JDK1.8,一步一步安装

2. 配置环境变量 如:JAVA_HOME:C:\Program Files\Java\jdk1.8.0_131

第二步:安装elasticsearch

 

遇到的坑,开始没有安装JDK1.8,出现了很多问题

1.配置文件设置config/elasticsearch.yml

 

 

cluster.name=es_cluster

node.name=node0

path.data=/tmp/elasticsearch/data

path.logs=/tmp/elasticsearch/logs

# 增加新的参数,这样head插件可以访问es
http.cors.enabled: true 
http.cors.allow-origin: "*" 

2.启动

到bin目录下面,shift+右键,选择 【在此处打开命令窗口】

在控制台 输入:elasticsearch.bat 就可以运行。。

如图:

可以看到,它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200。

然后可以打开页面localhost:9200,将会看到以下内容:

返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。

恭喜你:成功的安装了elasticsearch,是不是很简单。

第三部:安装Logstash[可以略]

Logstash的功能如下:

其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。

编写配置文件(名字和位置可以随意,这里我放在config目录下,取名为log4j_to_es.conf)

1.在config目录下面编写一个文件log4j_to_es.conf,文件名称随意。

内容如下:

# For detail structure of this file
# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
input {
  # For detail config for log4j as input, 
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
  log4j {
    mode => "server"
    host => "127.0.0.1"
    port => 4567
  }
}
filter {
  #Only matched data are send to output.
}
output {
  # For detail config for elasticsearch as output, 
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
  elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "127.0.0.1:9200"   #ElasticSearch host, can be array.
    index  => "applog"         #The index to write data to.
  }
}

input是输入,output是输出,filter是过滤条件。

input 里面有很多种方式,这里写的是通过log4j的进来的日志,官网已经不建议这种方式了,建议用filebeat

2.启动方式

logstash -f ./config/log4j_to_es.conf 指定配置文件进行启动。

第四步:安装filebeat

摘要: Filebeat是一个开源的文件收集器,主要用于获取日志文件,并把它们发送到logstash或elasticsearch。filebeat不仅支持各版本的Linux系统(centos5.6除外),在Windows操作系统上也有很好的体验。

下载:https://www.elastic.co/downloads/beats/filebeat

安装:
运行以下命令来安装Filebeat作为Windows服务,进入cmd控制台
cd ‘C:\Program Files\Filebeat’ 
C:\Program Files\Filebeat> .\install-service-filebeat.ps1
执行报错:
cdbee766a7274eeec7b7c4dd60e91d5f0cebd98f
用以下命令执行:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
d89eed91c6d173705ffa67dc5d19e13952dc6dbe
 
安装完成后,修改filebeat.yml配置文件,指定好上传日志文件的路径等参数
 
启动:
直接执行.exe程序即可
3bbd35f03039fd63d85aaa2ed40561691142e747
 
但是这里有一个问题,程序只能前台运行,一旦关闭cmd窗口,程序也会关闭,google了很多办法,start /b参数尝试也不行,后来搜到一个chp.exe程序,加在filebeat.exe前执行即可。
 
 
测试了最新版本5.0,以及1.3和1.2的filebeat版本,只有1.2版本可以执行
1.3和5.0出现输出报错:
failed to initialize console plugin as output: console output initialization failed with: GetFileInformationByHandle /dev/stdout: The handle is invalid.
 
filebeat.yml配置文件:
- input_type: log

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - C:\logs\*
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

遇到的坑:控制台提示权限不够的时候,需要用管理员方式运行。。

参考:https://yq.aliyun.com/articles/64836

第五步:安装elasticsearch-header

参考:http://blog.csdn.net/yx1214442120/article/details/55102298

第六步:安装kibana

1.配置kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "localhost"

# Enables you to specify a path to mount Kibana at if you are running behind a proxy. This only affects
# the URLs generated by Kibana, your proxy is expected to remove the basePath value before forwarding requests
# to Kibana. This setting cannot end in a slash.
#server.basePath: ""

# The maximum payload size in bytes for incoming server requests.
#server.maxPayloadBytes: 1048576

# The Kibana server's name.  This is used for display purposes.
#server.name: "your-hostname"

# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://127.0.0.1:9200/"

# When this setting's value is true Kibana uses the hostname specified in the server.host
# setting. When the value of this setting is false, Kibana uses the hostname of the host
# that connects to this Kibana instance.
#elasticsearch.preserveHost: true

# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"

启动:

在控制台里面直接输入命令:kibana,启动。

恭喜你,可以成功了。。如果遇到什么问题,可以在QQ群[475894803]里问我。。

 

发表评论

全部评论:0条

houzhe11

JAVA从业者