1 引言

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA
API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括
syslog、消息传递(例如
RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在
Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

Filebeat是本地文件的日志数据采集器。 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail
file,并将它们转发给Elasticsearch或Logstash进行索引、kafka 等。

1.1 编写目的

ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。

elk占用空间大_elk占用空间大

2 部署对象说明

2.1 程序名称

2.2

Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene
构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;

2.3

Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;

2.4

Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;

2.5

Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder
源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat
就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。

2.6

如果您对 ELK Stack 还尚不了解,或是想了解更多,请点击集中式日志系统 ELK 协议栈详解,查看具体介绍。

2.2 程序功能

Elasticsearch:    分布式的搜索引擎和数据分析引擎

Logstash:       数据收集引擎

Kibana:       数据分析和可视化平台

Filebeat:      轻量型日志采集器

3 部署操作

3.1 环境准备

ELK5.3以后依赖JDK,所以我们先在服务器安装依赖 (JDK版本1.8.0及以上)
OpenJDK下载网站:
http://jdk.java.net/OpenJDK安装文档网站:
https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html

yum -y install java-1.8.0-openjdk git wget lrzsz vim gcc make zip unzip net-tools  coreutils npm

检查一下JAVA环境及版本

java -version

关闭防火墙和配置SELinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce  0  					#可以设置配置文件永久关闭
systemctl stop firewalld.service

ELK官方下载网站: https://www.elastic.co/cn/downloads/past-releases

elk占用空间大_elk占用空间大_02


Elasticsearch下载:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz Logstash下载:

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.zip

Kibana下载:

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz

Filebeat下载:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.0-linux-x86_64.tar.gz

3.3 安装步骤

安装elasticsearch
tar -xf elasticsearch-6.5.0.tar.gz -C /usr/local/
vim /usr/local/elasticsearch-6.5.0/config/elasticsearch.yml
17 cluster.name: elk-cluster  					#集群名称
23 node.name: node-1							#节点名称
33 path.data: /usr/local/elasticsearch-6.5.0/data			#设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开
37 path.logs: /usr/local/elasticsearch-6.5.0/logs			#设置日志文件的存储路径,默认是es根目录下的logs文件夹
55 network.host: 10.88.216.26			#当前节点IP地址
59 http.port: 9200  					#设置对外服务的http端口,默认为9200。
68 discovery.seed_hosts: ["10.88.216.17","10.88.216.19", "10.88.216.22"]			#集群每个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析
72 cluster.initial_master_nodes: ["node-1", "node-2","node-3"] 						#初始主节点应由其标识 节点名称,默认为其主机名。确保值cluster.initial_master_nodes与节点名称确切匹配。
80 gateway.recover_after_nodes: 3  		#设置集群中N个节点启动时进行数据恢复,默认为3。

具体详细配置阅读官方文档了解更多:
https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html

mkdir -p /usr/local/elasticsearch-6.5.0/data

修改sysctl内核参数

echo "vm.max_map_count=262144" >> /etc/sysctl.conf  &&  sysctl -p

vim /etc/security/limits.conf (添加下面参数)

*       soft    nofile  65536
*       hard    nofile  65536

ES插件的使用

• head插件(查看,库级别的操作)
安装node

由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)
官网下载对应版本的node: http://nodejs.org/dist/
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz 安装编译软件

yum gcc gcc-c++ kernel-devel make

然后解压node的安装包

tar -xvf node-v0.10.24.tar.gz -C /usr/local/
cd /usr/local/node-v0.10.24/

源码编译安装

./configure && make && make install

查看是否安装成功,-v查看版本

node -v

elk占用空间大_ELK _03


使用下面的命令取消ssl验证

npm config set strict-ssl false

#如遇错误error-code-ELIFECYCLE,执行如下命令

#npm cache clear --force
#npm install -g npm

下载elasticsearch-head插件
head下载地址:https://github.com/mobz/elasticsearch-head git clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head
npm install 	 	        	*#安装依赖*

修改启动文件
所有依赖包安装成功后,修改 elasticsearch-head 目录下的 Gruntfile.js 文件,在 options 属性内增加 hostname,设置为 0.0.0.0。

vim Gruntfile.js

elk占用空间大_数据_04


修改 Elasticsearch 配置文件 config/elasticsearch.yml支持跨域访问

vim /usr/local/elasticsearch-6.5.0/config/elasticsearch.yml (在末行添加如下两条配置)
89 http.cors.enabled: true
90 http.cors.allow-origin: '*'

具体配置参考官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http

elk占用空间大_ELK _05

elasticsearch自5版本之后,处于安全考虑,不允许使用root用户运行。

解决:创建一个普通用户,将elasticsearch 安装目录权限修改一下,切换至普通用户运行elasticsearch就可以了

useradd elasticsearch
mv elasticsearch-head /usr/local/
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-head
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-6.5.0
**切换用户启动服务**
su – elasticsearch

nohup /usr/local/elasticsearch-6.5.0/bin/elasticsearch & 			#忽略输入并把输出追加到"nohup.out”
cd /usr/local/elasticsearch-head/
nohup npm run start &

查看服务启动端口

ss -ntulp | grep -E "9100|9200|9300"

elk占用空间大_ELK _06


访问 http://10.88.216.26:9100 地址,就可以看到当前 Elasticsearch 集群信息

elk占用空间大_elasticsearch_07

• cerebo是kopf在es5上的替代者(集群操作)

Cerebro下载网站:https://github.com/lmenezes/cerebro/releases

wget https://github.com/lmenezes/cerebro/releases/download/v0.8.4/cerebro-0.8.4.tgz

tar -zvxf cerebro-0.8.4.tgz -C /usr/local/
  cd /usr/local/cerebro-0.8.4/

vim /usr/local/cerebro-0.8.4/conf/application.conf

elk占用空间大_elasticsearch_08


nohup ./bin/cerebro -Dhttp.port=[定义启动的端口] -Dhttp.address=[定义启动IP] &

elk占用空间大_ELK _09

查看启动并访问节点

http://10.88.216.26:9000

elk占用空间大_Filebeat_10


• bigdesk插件(集群状态查看)

https://github.com/hlstudio/bigdesk wget https://github.com/hlstudio/bigdesk/archive/master.zip

unzip master.zip -d /usr/local/
cd /usr/local/bigdesk-master/_site/

启动web服务器

python -m SimpleHTTPServer 					#默认监听端口号是 8000
nohup python -m SimpleHTTPServer 8900  & 	#指定启动端口,并后台启动

查看启动并访问节点

elk占用空间大_Filebeat_11


访问并连接节点查看

访问http://10.88.216.26:8900即可进入监控页面

elk占用空间大_ELK _12

Beats可以直接(或者通过Logstash)将数据发送到Elasticsearch,在那里你可以进一步处理和增强数据,然后在Kibana中将其可视化。

Filebeat安装部署

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.0-linux-x86_64.tar.gz

tar -zvxf filebeat-6.5.0-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/filebeat-6.5.0-linux-x86_64/

配置Filebeat

官方参考文档: https://www.elastic.co/guide/en/beats/filebeat/index.html

vim /usr/local/filebeat-6.5.0-linux-x86_64/filebeat.yml

Logstash安装部署

elk占用空间大_Filebeat_13


Logstash的数据处理过程主要包括:输入,过滤器,输出三部分,另外在输入和输出中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义管道配置文件,设置需要使用的输入,过滤器,输出,编解码器插件,以实现特定的数据采集,数据处理,数据输出等功能

• (1)输入:用于从数据源获取数据,常见的插件如file,syslog,redis,beats等[ 详细参考 ] • (2)过滤器:用于处理数据如格式转换,数据派生等,常见的插件如grok,mutate,drop,clone,geoip等[ 详细参考 ]

• (3)输出:用于数据输出,常见的插件如elastcisearch,file,graphite,statsd等[ 详细参考 ]

• (4)编解码器:编解码器不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline [ 详细参考 ]

Logstash下载:(需要预先安装JDK8)

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.zip

unzip logstash-6.5.0.zip -d /usr/local/
cd /usr/local/logstash-6.5.0/
#简单测试
#bin/logstash -e 'input { stdin { } } output { stdout {} }'

logstash配置语句详解

logstash配置文件包含三个配置部分,分别为:input{}、filter{}、output{}。
{} 定义区域,区域内可以定义一个或多个插件,通过插件对数据进行收集,加工处理,输出。

logstash.yml

• 包含Logstash配置标志,你可以在这个文件中设置标志,而不是在命令行中传递标志,在命令行中设置的任何标志都覆盖logstash.yml文件中的相应设置,更多信息见logstash.yml官方参考文档

Logstash没有默认的配置文件,需要手动配
  • 数据类型:
    布尔值类型: ssl_enable => true
    字节类型: bytes => “1MiB”
    字符串类型: name => “xkops”
    数值类型: port => 22
    数组: match => [“datetime”,“UNIX”]
    哈希: options => {key1 => “value1”,key2 => “value2”}
    编码解码: codec => “json”
    路径: file_path => “/tmp/filename”
    注释: #
  • 条件判断:
    等于: ==
    不等于: !=
    小于: <
    大于: >
    小于等于: <=
    大于等于: >=
    匹配正则: =~
    不匹配正则: !~
    包含: in
    不包含: not in
    与: and
    或: or
    非与: nand
    非或: xor
    复合表达式: ()
    取反符合: !()
创建logstash.conf配置文件:
mkdir /usr/local/logstash-6.5.0/config.d
vim /usr/local/logstash-6.5.0/config.d/logstash.conf
input {
 beats {
   port => 5044             #定义服务监听的端口
  }
}
filter {
  if [fields][logtype] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
  if [fields][logtype] == "spring-boot-log4j2" {
    json {
      source => "message"
      target => "data"
    }
  }
}
output {
  if [fields][logtype] == "spring-boot-log4j2"{
    elasticsearch {
      hosts => ["10.88.216.26:9200"]
      index => "spring-boot-log4j2-%{+YYYY.MM.dd}"
    }
  }

  if [fields][logtype] == "syslog"{
    elasticsearch {
      hosts => ["10.88.216.26:9200"]
      index => "filebeat-%{+YYYY.MM.dd}"
    }
  }
}

检查配置并启动Logstash

cd /usr/local/logstash-6.5.0/

bin/logstash  -f  config.d/logstash.conf  --config.test_and_exit 

#--config.test_and_exit 选项的意思是解析配置文件并报告任何错误

bin/logstash  -f	 config.d/logstash.conf	--config.reload.automatic

#config.reload.automatic 选项的意思是启用自动配置加载,以至于每次你修改完配置文件以后无需停止然后重启Logstash*
logstash三种启动方式:
-e  						*#sting类型启动*
-f   						*#指定配置文件启动*

service logstash start  	#服务启动
logstash常用插件

文档及插件参考地址 查看插件的方式

cd /usr/local/logstash-6.5.0/bin
./logstash-plugin list

input插件,常用的插件:file、tcp、udp、syslog,beats filter插件,常用的插件:json、grok
output插件,常用的插件:file; tcp/udp; redis/kfaka; elasticsearch
codec类插件,常用的插件:plain、json、json_lines、rubydebug、multiline等

启动filebeat和logstash
cd /usr/local/filebeat-6.5.0-linux-x86_64/
nohup ./filebeat -e -c filebeat.yml -d "publish" &
cd /usr/local/logstash-6.5.0/
nohup  bin/logstash  -f	 config.d/logstash.conf	--config.reload.automatic &

安装kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz

tar -zvxf kibana-6.5.0-linux-x86_64.tar.gz -C /usr/local/
cd  /usr/local/kibana-6.5.0-linux-x86_64/

修改配置文件

vim /usr/local/kibana-6.5.0-linux-x86_64/config/kibana.yml

elk占用空间大_数据_14


汉化kibana插件下载地址:https://github.com/anbai-inc git clone https://github.com/anbai-inc/Kibana_Hanization.git

cd Kibana_Hanization/old/
python main.py /usr/local/kibana-6.5.0-linux-x86_64

汉化成功后启动kibana

cd /usr/local/kibana-6.5.0-linux-x86_64/bin/
nohup ./kibana &
ss -ntulp | grep 5601

elk占用空间大_elk占用空间大_15


浏览器访问:http://服务器IP:5601/