开源实时日志分析ELK平台部署

ELK版本:5.5.0
下载:https://www.elastic.co/cn/downloads
这里只介绍环境的搭建,至于简介什么,以后慢慢来吧.

环境:
Ubuntu
JDK 1.8
Linux用户:mungo
首先,ELK工作的原理图:
开源实时日志分析ELK平台部署_第1张图片
即:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

ElasticSearch

配置文件
在elasticsearch的config目录下elasticsearch.yml

# Use a descriptive name for your cluster:
#
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /home/mungo/elk/data
#
# Path to log files:
#
path.logs: /home/mungo/elk/logs
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 这里配置的ip为本机的ip
#
network.host: 10.81.12.46
#
# Set a custom port for HTTP:
#
http.port: 9200

然后到elasticsearch的bin目录下,通过elasticsearch脚本即可启动.

./elasticsearch

开源实时日志分析ELK平台部署_第2张图片
这里写图片描述
通过输出可以看到,elasticsearch发布到了配置文件定义的9200端口.通过上面配置的ip即可访问.

http://10.81.12.46:9200/
开源实时日志分析ELK平台部署_第3张图片
通过http://10.81.12.46:9200/_cluster/health可以查看当前elasticsearch服务器的运行状态.比如:

{
  "cluster_name": "my-application",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 5,
  "active_shards": 5,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 5,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

其中:status一共有3个状态:green表示所有主分片及备份分片都分配好了,集群100%健康。yellow表示所有主分片都分配好了,但至少有一个备份分片未分配。数据没有丢失,搜索结果时完整的。但高可用性会缺失,存在丢失数据风险,以黄色表示警告。red表示至少有一个主分片未分配,并且这个主分片的所有分片都丢失了。数据已经丢失了,搜索结果不完整,并且往这个分片索引数据会发生异常。

  • number_of_nodes和number_of_data_nodes,分别是节点数和数据节点数。
  • active_primary_shards,集群中所有index的主分片数量的总和。
  • active_shards,集群中所有index的分片数量的总和,包括备份分片.

Kibana

配置文件
在kibana的config目录下kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "localhost"
# The URL of the Elasticsearch instance to use for all your queries.
# 这里配置的Elasticsearch的链接地址
elasticsearch.url: "http://10.81.12.46:9200"
# 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的bin目录下的kibana启动.

./kibana

开源实时日志分析ELK平台部署_第4张图片
开源实时日志分析ELK平台部署_第5张图片
通过配置文件可知,kibana监听的是5601端口.所以通过链接
http://localhost:5601启动.
开源实时日志分析ELK平台部署_第6张图片
看到这个问题,意思是logstash没有把日志写入到elasticsearch。因为logstash目前还未配置.下面开始配置logstash.如果有配置日志写入,就检查logstash与elasticsearch之间的通讯是否有问题。

Unable to fetch mapping. Do you have indices matching the pattern?

还有就是左侧的菜单可能会有些许不一直,因为我的版本里有先安装了x-pack插件.具体怎么使用如以后会做说明.

Logstash

Logstash 项目诞生于 2009 年 8 月 2 日。其作者是世界著名的运维工程师乔丹西塞(JordanSissel)。LogStash架构专为收集、分析和存储日志所设计。
Logstash的功能如下:
开源实时日志分析ELK平台部署_第7张图片
从上图可以看出,Logstash其实就是一个收集器,使用时需要为它指定Input和Output(Input和Output可以为多个)。比如若把Java代码中Log4j的日志输出到ElasticSearch中,Input就是Log4j,而Output就是ElasticSearch。若通过tcp的读取网络数据到ElasticSearch中,Input就是tcp监听的端口(可以配合 nc 命令导入数据,在启动 logstash 进程后,在另一个终端运行nc ip 监听端口 < olddata即可导入数据:),而Output就是ElasticSearch。
配置文件
配置两个输入,分别是Log4j日志输入和tcp数据输入.输出到ElasticSearch.
配置文件位置可以随意的,这里我放到logstash下的config目录下,取名为logstash_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 => "10.81.12.46"
    port => 4567
  }
  tcp {
    port => 8888
    mode => "server"
    ssl_enable => false
  }
}
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  => "10.81.12.46:9200"   #ElasticSearch host, can be array.
    index  => "logstash-%{type}-%{+YYYY.MM.dd}"         #The index to write data to.
  }
}

logstash启动需要通过-f参数指明配置文件:
开源实时日志分析ELK平台部署_第8张图片

关于logstash使用可以通过如下命令查看.

./logstash --help

根据以上配置,通过下面命令启动logstash.

./logstash -f ../config/logstash_to_es.conf 

开源实时日志分析ELK平台部署_第9张图片
同过输出可以看出,配置input的4567和8888端口都被监听了.
通过nc命令将一个日志文件导入到elasticsearch

nc 127.0.0.1 8888 < log.log 

然后在kibana中就可以创建一个Index了.
开源实时日志分析ELK平台部署_第10张图片
然后在Discover菜单中就可以看到日志的内容了.就可以对日志内容进行查找了.
开源实时日志分析ELK平台部署_第11张图片
Log4j通过logstash写入elasticsearch
在log4j.properties配置文件中增加一项配置,将Log4j的日志输出到SocketAppender:

# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=10.81.12.46
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

注意:这里的端口号需要跟Logstash监听的端口号一致,这里是4567。
开源实时日志分析ELK平台部署_第12张图片
可以看到,工程的日志已经输入到es了,如果设置的时间间隔够短,就很趋近于实时分析了。

至此,ELK平台部署和基本的测试就完成。

你可能感兴趣的:(ELKStack)