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下载网站:

OpenJDK安装文档网站:

yum -y install java-1.8.0-openjdk  wget lrzsz vim net-tools coreutils npm
yum groupinstall 'Development Tools'

检查一下JAVA环境及版本

java -version

关闭防火墙和配置SELinux

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

ELK官方下载网站:

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.2 安装步骤

安装elasticsearch

tar -zvxf 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。

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

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

3.3 程序运行成功状态检查

ES插件的使用

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

安装node

由于head插件本质上还是一个node.js的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)

官网下载对应版本的node:

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

使用下面的命令取消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

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

具体配置参考官方文档

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

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"

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

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

Cerebro下载网站:

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
nohup ./bin/cerebro -Dhttp.port=[定义启动的端口] -Dhttp.address=[定义启动IP] &

查看启动并访问节点

http://10.88.216.26:9000

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 &    #指定启动端口,并后台启动

查看启动并访问节点

访问并连接节点查看

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

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

官方参考文档:

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

Logstash安装部署

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

汉化kibana插件下载地址:

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

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

最后更新于