博客作者:联系请
点击 ,搬运不易,希望请作者喝咖啡,可以点击联系
博客作者 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:分布式的搜索引擎和数据分析引擎
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环境及版本
关闭防火墙和配置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查看版本
使用下面的命令取消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。
修改 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
数组: match => ["datetime","UNIX"]
哈希: options => {key1 => "value1",key2 => "value2"}
路径: file_path => "/tmp/filename"
条件判断 :
创建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
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/