ELK Stack 企业级日志平台



ELK Stack 企业级日志平台_java


一、ELK Stack概述

官方话:ELK一款轻量级的实时日志收集,处理,展示系统。

为什么用ELK:

  1. 业务需求,市场的需求

  2. 开发与产品的需求,运维的一种责任

  3. 大数据也是当前的一个前景

1.1 ELK介绍及优缺点

ELK日志分析系统的优势

  1. 使用方便,直接解决了我们的需求,并且是开源的;

  2. 相对来说,学习还是配置都是相对简单的;

  3. ES搜索快,基本上是秒级的;

  4. 架构相对简单,横向扩展方便。

ELK日志分析系统的缺点

  1. Logstash耗资源较大,运行占用CPU和内存高;

  2. 另外,没有消息队列缓存,存在数据丢失隐患。

二、ELK Stack架构


ELK Stack 企业级日志平台_java_02

ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合而成,形成一款强大的实时日志收集展示系统。除了相关的beat相关采集插件外,基本都是基于这个架构来完成。

  • 日志采集层: logstash或 filebeat

  • 消息代理层: redis或kafka。

  • 管理层: logstash

  • 搜索引擎层: Elasticsearch

  • 展示层: kibana

Filebeat隶属于Beats(社区)。目前Beats包含四种工具:

  1. Packerbeat (搜集网络流量数据)

  2. Topbeat (搜集系统,进程和文件系统级别的CPU和内存使用情况等数据)

  3. Filebeat(搜集文件数据)

  4. Winlogbeat(搜集windows事件日志数据)

Redis和kafka的作用

  1. 那如果logstash和ES无法通讯的话,日志是不是会从而丢失?

  2. 那如果日志量过大的话,日志是不是会从而丢失?

  3. 防止logstash 直接与ES操作,产生大量的链接,导致ES瓶颈!

生产环境拓扑图:

ELK Stack 企业级日志平台_java_03

三、ELK Stack搭建

环境规划

操作系统:CentOS-6.5-x86_64

ES版本:5.0

主机:192.168.63.246

主机:192.168.63.242

3.1 Elasticsearch安装与集群配置

  1. 安装JDK

# yum install open-jdk.1.8
# java –version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)

OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

  1. 安装Elasticsearch,下载解压即可

[root@module-kzkt-02 opt]# cd /opt
[root@module-kzkt-02 opt]# tar zcvf elasticsearch-5.3.1.tar.gz
  1. 配置Elasticsearch

[root@module-kzkt-02 opt]# cd elasticsearch-5.3.1/config/    
[root@module-kzkt-02 config]# vim elasticsearch.yml            
cluster.name: es-log                               #集群名
node.name: node-1             #节点名称
path.data: /path/to/data       #存储数据地址
path.logs: /path/to/logs      #存储日志地址
bootstrap.memory_lock: true   #当内存不足时,是否使用交换分区空间
network.host: 10.0.1.7         #IP地址
http.port: 9200               #通讯端口
discovery.zen.ping.unicast.hosts: ["host1", "host2"]   #集群地址IP
discovery.zen.minimum_master_nodes: 3            #集群节点个数

系统配置:

当消耗完交换分区这么大空间后才会产生oom:
# vim /etc/sysctl.conf    
vm.max_map_count=262144
# sysctl –p                    

系统的打开文件数:
# vim /etc/security/limits.conf       
* soft nofile 655350
* hard nofile 655350

修改用户打开的线程数,因为es的段要经常打开文件控制索引:
# vim /etc/security/limits.d/20-nproc.conf
*         soft   nproc     4096

切换到普通用户启动:

[root@module-kzkt-02 bin]# su - elk
[elk@module-kzkt-02 logs]$ cd /opt/elasticsearch-5.3.1/bin/
[elk@module-kzkt-02 bin]$ ./elasticsearch
  1. 要是提示,报一些没有启动的目录,直接创建即可。

  2. 但是想写入日志和数据必须是普通用户有写入权限logs,data。

启动之后:有如下显示表示已经安装成功。

[root@module-kzkt-02 bin]# curl -XGET '10.0.1.7:9200'
{
"name" : "node-1",
"cluster_name" : "es-log",
"cluster_uuid" : "ZKwbyR74RHqKhUMyzFSQ5A",
"version" : {
  "number" : "5.3.1",
  "build_hash" : "5f9cf58",
  "build_date" : "2017-04-17T15:52:53.846Z",
  "build_snapshot" : false,
  "lucene_version" : "6.4.2"
},
"tagline" : "You Know, for Search"
}

扩展:集群启动设置

假如说只有一个节点,那么es就当做自己是一个集群。

一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数据和负载。

当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。

3.2 Logstash安装与配置

1.  下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf logstash-6.2.4.tar.gz

2.  配置文件修改

[root@module-kzkt-02 config]# vim config/logstash_to_es.conf
input {
  file {
      type => "log"
      path => "/usr/local/nginx/logs/\*.log"
      discover_interval => 10
      start_position => "beginning"
  }
}

filter {
}

output {
  elasticsearch {
  index => "log-%{+YYYY.MM.dd}"
  hosts => ["10.0.1.7:9200"]
  }

stdout {codec => rubydebug}

也支持条件判断,例如:

if [type] == "****"{
      elasticsearch {
          hosts => ["192.168.1.1:9200"]
          index => "system-%{+YYYY.MM.dd}"
      }
  }

  if [type] == "****"{
      elasticsearch {
          hosts => ["192.168.1.160:9200"]
          index => "es-error-%{+YYYY.MM.dd}"
      }
  }

我的配置文件如下:ELK Stack 企业级日志平台_java_04

3.  启动服务

[root@module-kzkt-02 bin]# nohup ./bin/logstash -f config/logstash_to_es.conf &

3.3 Filebeat安装与配置

1.下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf filebeat-5.3.1-linux-x86_64

2.配置文件修改

[root@module-kzkt-02 filebeat-5.3.1-linux-x86_64]# vim filebeat.yml
- input_type: log           #类型
paths:
- /var/log/*.log             #需要采集的日志路径
- /                                  #多个的话直接添加
exclude_files: [".gz$"] :   #移除这个目录下面相关gz结尾的文件
exclude_lines: ["^DBG"]:   #表示移除什么样的结尾的行。

output.elasticsearch:
hosts: ["localhost:9200"]

也可以输出到Logstash、Redis等,示例:

输出到logstash:
output.logstash:
hosts: ["localhost:5044"]

输出到redis:
output.redis:
hosts: ["localhost"]
password: "my_password"

key: "filebeat"

db: 0

timeout: 5

3.4 Kibana安装与配置

1.下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf kibana-5.3.1-linux-x86_64.tar.gz

2.配置文件修改

[root@module-kzkt-02 config]# cd /opt/kibana-5.3.1-linux-x86_64/config/
[root@module-kzkt-02 config]# vim kibana.yml
server.port: 5601                             #服务端口
server.host: "10.0.1.7"                       #服务IP
elasticsearch.url: <http://10.0.1.7:9200>     #连接es的地址
#elasticsearch.username: "user"               #es用户 
#elasticsearch.password: "pass"               #es密码

3.启动服务

[root@module-kzkt-02 bin]# ./kibana

4.访问

直接访问: http://IP:5601

刚开始有个初始化的步骤,可能要等一会。ELK Stack 企业级日志平台_java_05

要创建一个索引:Management-->>index Partterns-->>Add NewELK Stack 企业级日志平台_java_06

出图:ELK Stack 企业级日志平台_java_07

ELK还支持非常丰富的仪表盘功能,可视化展示关键数据,以下是公司6.x版本kibana展示的数据。

官网总访问量及总字节数:ELK Stack 企业级日志平台_java_08

电商月份总收入额:ELK Stack 企业级日志平台_java_09

组件的一些监控:ELK Stack 企业级日志平台_java_10

更多实践经验及部署细节可从视频教程中学习,在后台回复“elk”免费获取。


END -