ELK6.5.0+Filebeat 日志系统部署

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

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 已经成为目前最流行的集中式日志解决方案。

2. 部署对象说明

2.1 程序名称

Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速5.Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。
如果您对 ELK Stack 还尚不了解,或是想了解更多,请点击集中式日志系统 ELK 协议详解,查看具体介绍。

2.2 程序功能

  • Elasticsearch:分布式的搜索引擎和数据分析引擎
  • Logstash:数据收集引擎
  • Kibana:数据分析和可视化平台
  • Filebeat:轻量型日志采集器

3. 部署操作

3.1 环境准备

ELK5.3以后依赖JDK,所以我们先在服务器安装依赖 (JDK版本1.8.0及以上)
OpenJDK下载网站:
JDK Builds from Oracle
OpenJDK安装文档网站:
JDK 8 and JRE 8 Installation Start Here
1
yum -y install java-1.8.0-openjdk wget lrzsz vim net-tools coreutils npm
2
yum groupinstall 'Development Tools'
Copied!

检查一下JAVA环境及版本

1
java -version
Copied!

关闭防火墙和配置SELinux

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

ELK官方下载网站:

Past Releases of Elastic Stack Software
elastic

Elasticsearch下载:

1
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz
Copied!

Logstash下载:

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

Kibana下载:

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

Filebeat下载:

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

3.2 安装步骤

安装elasticsearch

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

具体详细配置阅读官方文档了解更多:

Install Elasticsearch from archive on Linux or MacOS | Elasticsearch Guide [7.16] | Elastic
Elastic
1
mkdir -p /usr/local/elasticsearch-6.5.0/data
Copied!

修改sysctl内核参数

1
echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
2
vim /etc/security/limits.conf (添加下面参数)
3
* soft nofile 65536
4
* hard nofile 65536
Copied!

3.3 程序运行成功状态检查

ES插件的使用
head插件(查看,库级别的操作)

安装node

由于head插件本质上还是一个node.js的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)
官网下载对应版本的node:
Index of /dist/
1
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
Copied!
安装编译软件
1
yum gcc gcc-c++ kernel-devel make
Copied!
然后解压node的安装包
1
tar -xvf node-v0.10.24.tar.gz -C /usr/local/
2
cd /usr/local/node-v0.10.24/
Copied!
源码编译安装
1
./configure && make && make install
Copied!
查看是否安装成功,-v查看版本
1
node -v
Copied!
使用下面的命令取消ssl验证
1
npm config set strict-ssl false
Copied!
如遇错误error-code-ELIFECYCLE,执行如下命令
1
npm cache clear --force
2
npm install -g npm
Copied!

下载elasticsearch-head插件

head下载地址:https://github.com/mobz/elasticsearch-head
1
git clone git://github.com/mobz/elasticsearch-head.git
2
cd elasticsearch-head
3
npm install #安装依赖
Copied!
修改启动文件
所有依赖包安装成功后,修改 elasticsearch-head 目录下的 Gruntfile.js 文件,在 options 属性内增加 hostname,设置为 0.0.0.0。
1
vim Gruntfile.js
Copied!
修改 Elasticsearch 配置文件 config/elasticsearch.yml支持跨域访问
具体配置参考官方文档
HTTP | Elasticsearch Guide [7.16] | Elastic
Elastic
1
vim /usr/local/elasticsearch-6.5.0/config/elasticsearch.yml (在末行添加如下两条配置)
2
89 http.cors.enabled: true
3
90 http.cors.allow-origin: '*'
Copied!
Elasticsearch自5版本之后,处于安全考虑,不允许使用root用户运行。
解决:创建一个普通用户,将elasticsearch 安装目录权限修改一下,切换至普通用户运行elasticsearch就可以了
1
useradd elasticsearch
2
mv elasticsearch-head /usr/local/
3
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-head
4
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-6.5.0
Copied!

切换用户启动服务

1
su – elasticsearch
2
nohup /usr/local/elasticsearch-6.5.0/bin/elasticsearch & #忽略输入并把输出追加到"nohup.out”
3
cd /usr/local/elasticsearch-head/
4
nohup npm run start &
Copied!

查看服务启动端口

1
ss -ntulp | grep -E "9100|9200|9300"
Copied!
访问 http://10.88.216.26:9100 地址,就可以看到当前 Elasticsearch 集群信息

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

Cerebro下载网站:
Releases · lmenezes/cerebro
GitHub
1
wget https://github.com/lmenezes/cerebro/releases/download/v0.8.4/cerebro-0.8.4.tgz
2
tar -zvxf cerebro-0.8.4.tgz -C /usr/local/
3
cd /usr/local/cerebro-0.8.4/
4
vim /usr/local/cerebro-0.8.4/conf/application.conf
Copied!
1
nohup ./bin/cerebro -Dhttp.port=[定义启动的端口] -Dhttp.address=[定义启动IP] &
Copied!
查看启动并访问节点
Bigdesk插件(集群状态查看)
GitHub - hlstudio/bigdesk: lukas-vlcek/bigdesk to support elasticsearch 2.x/5.x/7.x+
GitHub
1
wget https://github.com/hlstudio/bigdesk/archive/master.zip
2
unzip master.zip -d /usr/local/
3
cd /usr/local/bigdesk-master/_site/
Copied!

启动web服务器

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

查看启动并访问节点

访问并连接节点查看

访问http://10.88.216.26:8900即可进入监控页面
Beats可以直接(或者通过Logstash)将数据发送到Elasticsearch,在那里你可以进一步处理和增强数据,然后在Kibana中将其可视化。
Filebeat安装部署
1
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.0-linux-x86_64.tar.gz
2
tar -zvxf filebeat-6.5.0-linux-x86_64.tar.gz -C /usr/local/
3
cd /usr/local/filebeat-6.5.0-linux-x86_64/
Copied!
配置Filebeat
官方参考文档:
Filebeat Reference | Elastic
Elastic
1
vim /usr/local/filebeat-6.5.0-linux-x86_64/filebeat.yml
Copied!

Logstash安装部署

Logstash的数据处理过程主要包括:输入过滤器输出三部分,另外在输入和输出中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义管道配置文件,设置需要使用的输入,过滤器,输出,编解码器插件,以实现特定的数据采集,数据处理,数据输出等功能
  • (1)输入:用于从数据源获取数据,常见的插件如file,syslog,redis,beats等[ 详细参考 ]
  • (2)过滤器:用于处理数据如格式转换,数据派生等,常见的插件如grok,mutate,drop,clone,geoip等[ 详细参考 ]
  • (3)输出:用于数据输出,常见的插件如elastcisearch,file,graphite,statsd等[ 详细参考 ]
  • (4)编解码器:编解码器不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline [ 详细参考 ]

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

1
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.zip
2
unzip logstash-6.5.0.zip -d /usr/local/
3
cd /usr/local/logstash-6.5.0/
4
#简单测试
5
# bin/logstash -e 'input { stdin { } } output { stdout {} }'
Copied!
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配置文件:

1
mkdir /usr/local/logstash-6.5.0/config.d
2
vim /usr/local/logstash-6.5.0/config.d/logstash.conf
3
input {
4
beats {
5
port => 5044 #定义服务监听的端口
6
}
7
}
8
filter {
9
if [fields][logtype] == "syslog" {
10
grok {
11
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
12
add_field => [ "received_at", "%{@timestamp}" ]
13
add_field => [ "received_from", "%{host}" ]
14
}
15
syslog_pri { }
16
date {
17
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
18
}
19
}
20
if [fields][logtype] == "spring-boot-log4j2" {
21
json {
22
source => "message"
23
target => "data"
24
}
25
}
26
}
27
output {
28
if [fields][logtype] == "spring-boot-log4j2"{
29
elasticsearch {
30
hosts => ["10.88.216.26:9200"]
31
index => "spring-boot-log4j2-%{+YYYY.MM.dd}"
32
}
33
}
34
if [fields][logtype] == "syslog"{
35
elasticsearch {
36
hosts => ["10.88.216.26:9200"]
37
index => "filebeat-%{+YYYY.MM.dd}"
38
}
39
}
40
}
Copied!
检查配置并启动Logstash
1
cd /usr/local/logstash-6.5.0/
2
bin/logstash -f config.d/logstash.conf --config.test_and_exit #--config.test_and_exit选项的意思是解析配置文件并报告任何错误
3
bin/logstash -f config.d/logstash.conf --config.reload.automatic #config.reload.automatic选项的意思是启用自动配置加载,以至于每次你修改完配置文件以后无需停止然后重启Logstash
Copied!
logstash三种启动方式
1
-e #sting类型启动
2
-f #指定配置文件启动
3
service logstash start #服务启动
Copied!

logstash常用插件

查看插件的方式
1
cd /usr/local/logstash-6.5.0/bin
2
./logstash-plugin list
Copied!
  • 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
1
cd /usr/local/filebeat-6.5.0-linux-x86_64/
2
nohup ./filebeat -e -c filebeat.yml -d "publish" &
3
cd /usr/local/logstash-6.5.0/
4
nohup bin/logstash -f config.d/logstash.conf --config.reload.automatic &
Copied!

安装kibana

1
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
2
tar -zvxf kibana-6.5.0-linux-x86_64.tar.gz -C /usr/local/
3
cd /usr/local/kibana-6.5.0-linux-x86_64/
Copied!

修改配置文件

1
vim /usr/local/kibana-6.5.0-linux-x86_64/config/kibana.yml
Copied!
汉化kibana插件下载地址:
anbai-inc - Overview
GitHub
1
git clone https://github.com/anbai-inc/Kibana_Hanization.git
2
cd Kibana_Hanization/old/
3
python main.py /usr/local/kibana-6.5.0-linux-x86_64
Copied!
汉化成功后启动kibana
1
cd /usr/local/kibana-6.5.0-linux-x86_64/bin/
2
nohup ./kibana &
3
ss -ntulp | grep 5601
Copied!
浏览器访问:http://服务器IP:5601/