目录
ELKB是什么
ELKB是目前比较流行的日志系统解决方案,是通过一套组件集合成的解决方案。这套组件分别为ElasticSearch,LogStash,Kibana,FileBeat。
各组件的作用如下:
ElasticSearch(简称es):基于Apache Lucene构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。
LogStatsh:数据收集额外处理和数据引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。
Kibanna:数据分析和可视化平台。通常与ElasticSearch配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。
FileBeat:在需要采集日志数据的server上安装Filebeat,指定日志目录或日志文件后,Filebeat就能读取数据,发送到Logstash进行解析,也可以选择直接发送到ElasticSearch进行集中式存储和分析。 其中FileBeat只是Beat系列中常用的一种,其余的beat还有Packetbeat(搜集网络流量数据);Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);Filebeat(搜集文件数据);Winlogbeat(搜集 Windows 事件日志数据)
ELKB基础版架构
各模块架构优化
- 对ElasticSearch做集群化
- 将上述各个模块部署在不同的服务器上,LogStash选择计算能力强的,CPU和内存比较丰满的;ElasticSearch选择磁盘容量大的,同时CPU和内存比较丰满。
搭建ELKB系统
es依赖于JDK,同时已经内置JDK,但是如果本地配置了JAVA_HOME,则会使用配置的JDK,此时需要考虑到版本依赖,对应的版本依赖可以在https://www.elastic.co/cn/support/matrix#matrix_jvm进行查看;
目前ELKB已经实现版本同步化,所以在进行搭建时,选好一个版本,所有的组件都使用此版本即可。
在这里,选择7.6.2
的版本进行搭建,对应的jdk版本是11,所以需要首先安装jdk11
,jdk11
的安装步骤这里不做演示。同时,由于只是测试环境,所有不再进行模块优化,只在一台机器上,选择基础架构进行搭建。
1:下载组件
官方下载网站是https://elasticsearch.cn/download,但是由于某些神奇的力量,直接上官网下载是很慢的,所以可以找一些镜像网站进行下载。
华为镜像网站直通车(推荐加入你们的收藏夹)
在服务器上下载对应的组件:
# 切换至下载目录
cd /tmp
# 下载es
wget https://mirrors.huaweicloud.com/elasticsearch/7.6.2/elasticsearch-7.6.2-linux-x86_64.tar.gz
# 下载logstash
wget https://mirrors.huaweicloud.com/logstash/7.6.2/logstash-7.6.2.tar.gz
# 下载kibana
wget https://mirrors.huaweicloud.com/kibana/7.6.2/kibana-7.6.2-linux-x86_64.tar.gz
# 下载filebeat
wget https://mirrors.huaweicloud.com/filebeat/7.6.2/filebeat-7.6.2-linux-x86_64.tar.gz
2:解压
# 解压es
tar -zxvf elasticsearch-7.6.2-darwin-x86_64.tar.gz -C /home/elkb
# 解压logstash
tar -zxvf logstash-7.6.2.tar.gz -C /home/elkb
# 解压kibana
tar -zxvf kibana-7.6.2-darwin-x86_64.tar.gz -C /home/elkb
# 解压filebeat
tar zxvf filebeat-7.6.2-darwin-x86_64.tar.gz -C /home/elkb
3:配置各个组件,启动
首先创建用户,后续用这个用户进行操作
# 创建启动用户elkb(不能以roog启动)
useradd elkb
# 修改密码
passwd elkb
chown -R elkb:elkb /home/elkb
配置es
在es的安装目录下创建data目录
cd /home/elkb/elasticsearch-7.6.2
mkdir data
修改配置文件
cd config
vim elasticsearch.yml
修改其中以下选项
# 集群名称
cluster.name: elkb
# 节点名称
node.name: elkb-node-1
# master节点,此处单台,直接用节点名称即可
cluster.initial_master_nodes: elkb-node-1
# es的数据存储目录,默认在es_home/data目录下
path.data: /home/elkb/elasticsearch-7.6.2/data
# 日志存储目录,默认在es_home/logs目录下
path.logs: /home/elkb/elasticsearch-7.6.2/logs
# 锁定物理内存地址,防止elasticsearch内存被交换出去,也就是免es使用swap交换分区
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
# 允许访问的ip地址
network.host: 0.0.0.0
# 对外端口
http.port: 9200
# 是否允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
# 自动创建索引的设置 -是禁止自动创建,+是允许创建,多个索引以“,”号隔开
action.auto_create_index: +log*,+.watches*,+.triggered_watches,+.watcher-history-*,+.kibana*,+.monitoring*,+logstash*
配置本机文件
修要修改linux的一些文件配置,否则会出现如下类似的错误。
vi /etc/security/limits.conf
# 添加如下设置
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
# centos 7 为 20-nproc.conf centos 6 为 90-nproc.conf
vi /etc/security/limits.d/20-nproc.conf
#修改为
* soft nproc 4096
vi /etc/sysctl.conf
# 添加下面配置:
vm.max_map_count=655360
# 让内核参数生效
sysctl -p
启动es
cd /home/elkb/elasticsearch-7.6.2/
nohup /home/elkb/elasticsearch-7.6.2/bin/elasticsearch &
如果出现This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false]
错误
在配置文件上加上以下配置:
# 禁用X-Pack机器学习功能
xpack.ml.enabled: false
验证es
curl http://192.168.0.137:9200
配置kibana
修改配置文件
cd /home/elkb/kibana-7.6.2-linux-x86_64/config/
vi kibana.yml
# 修改以下配置
# Kibana端口
server.port: 5601
# kibana地址
server.host: "192.168.0.137"
server.name: "192.168.0.137"
# es地址
elasticsearch.hosts: ["http://192.168.0.137:9200"]
# 把kibanna的搜索作为es的一个index
kibana.index: ".kibana"
启动kibana
nohup /home/elkb/kibana-7.6.2-linux-x86_64/bin/kibana &
验证
访问http://192.168.0.137:5601/
展示kibana首页
配置logstash
logstash的语法是区段 input {},filter {},output {}。
流程是搜集=》过滤=》处理。
修改配置文件
# 复制基础配置文件
cd /home/elkb/logstash-7.6.2/config
cp logstash-sample.conf logstash-log.conf
# 修改配置文件如下
vi logstash-log.conf
# ==================开始===================
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
grok {
match => {
"message" => "\[%{DATA:app}\] \[%{DATA:timestamp}\] \[%{DATA:thread}\] \[%{LOGLEVEL:level}\] \[%{DATA:class}\] (?<msg>(.|\r|\n)*)"
}
}
date {
match => ["createtime", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
}
mutate{
remove_field => ["beat.name"]
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.137:9200"]
index => "log-%{+YYYY.MM.dd}"
document_type => "log"
#host => "%{[@host][beat]}"
#user => "elastic"
#password => "changeme"
}
}
# ==================结束===================
以上配置是监听本地5044端口,经过filter过滤器,输出到指定的output。
启动logstash
cd /home/elkb/logstash-7.6.2/
nohup bin/logstash -f config/logstash-log.conf --config.reload.automatic &
配置filebeat
修改配置文件
# 复制基础配置文件
cd /home/elkb/filebeat-7.6.2-linux-x86_64
cp filebeat.yml filebeat-log.yml
vi filebeat-log.yml
#=========================== Filebeat inputs =============================
# 开启配置 一定要记得开 一定要记得开
enabled: true
# 设置读取文件路径
paths:
- /home/ad/logs/*/all.log
#开启排除文件
exclude_files: ['.gz$']
# 添加额外的自定义字段
fields
host: 192.168.0.137
# 配置 Multiline 匹配多行消息
multiline.pattern: ^\[
multiline.negate: true
multiline.match: after
#============================= Logstash output ===============================
#输出设置
output.logstash:
# The Logstash hosts
hosts: ["192.168.0.137:5044"]
#=========================== 调优 =============================
## 调优 避免 占用内存过大
## 是否因为通配符的原因,造成同时监控数量巨大的文件
## 是否文件的单行内容巨大,日志记录不规范
## 是否output经常阻塞,event queue里面总是一直缓存event
max_procs: 1
queue.mem.events: 256
queue.mem.flush.min_events: 128
可以配置多个input。
启动filebeat
# 文件必须需要属于root
chown -R root /home/elkb/filebeat-7.6.2-linux-x86_64
# 查看启用或者禁用的模块列表
./filebeat modules list
# 启用logstash模块
./filebeat modules enable logstash
# 检查配置文件是否正确
./filebeat test config
## 启动 filebeat
cd /home/elkb/filebeat-7.6.2-linux-x86_64/
nohup ./filebeat -e -c filebeat-log.yml &
# 如果是调试
nohup ./filebeat -e -c filebeat-log.yml -d "*" &
测试
filbebeat监听的是/home/ad/logs/*/all.log
,所以对该文件进行修改,模拟实时日志。
- 按照logstash中grok的格式进行修改该文件
[consumer-log] [2020-04-30 18:47:42,710] [org.springframework.kafka.KafkaListenerEndpointContainer#4-0-C-1] [INFO] [com.consumer.log.consumer.LogKafkaConsumer.listenerCommonLog(LogKafkaConsumer.java:272)] 公共日志处理开始:1588243662710
- 查看es是否同步创建索引,
# 获取指定日期index log-YYYY.MM.dd
curl http://192.168.0.137:9200/log-2020.05.01?pretty
- kibana配置好index Patterns之后,能否查看到对应的信息
在kibana中的management->kibana->Index Patterns中选择create index patterns,根据提示创建新的面板信息。
创好之后,在discovery上查看对应的索引信息。
搭建过程中需要注意的问题
- elasticsearc相关文件不能属于root
- filebeat只能用root进行启动
- logstash的filter中的grok一定要配置正确,否则会出现
connection reset by peer
,即filbeat传给logstash之后无法同步到es,grok语法传送门
来源:oschina
链接:https://my.oschina.net/u/4390196/blog/4267501