elasticsearch stack 主要是是由 elasticsearch + beats + logstash + kibana 四个组件组成。
组件名称 | 作用 |
---|---|
elasticsearch | 负责核心存储和检索引擎(比如beats或logstash采集的日志就可以存储在es中)。 |
beats | 有很多种类的beat,比如filebeat主要用于采集日志文件,metricbeat主要用于采集服务性能指标(比如操作系统性能指标,NGINX性能指标,MySQL性能指标,Redis性能指标等),packetbeat主要用于采集网络流量指标等。beat采集的日志一般有两种流向,一是可以直接存储到elasticsearch中,二是可以流向logstash中,经过logstash的一些过滤,切分等处理后再流向elasticsearch中进行存储。 |
logstash | 也可以用于采集数据,但是logstash可以对采集的数据做一定的处理(比如切割,过滤,提取关键词等),然后传递给下游存储系统。 |
kibana | 主要用于将数据进行可视化呈现,支持将数据按客户要求进行呈现(比如:柱形图,饼状图,折线图等)。方便用户查看日志。 |
一般来说,常见的组合流程有如下两种:
组合一、
组合二、
本次采用上面的组合二的方式来进行搭建!
es的搭建流程见我的上篇!!!https://blog.csdn.net/Hellowenpan/article/details/116497143?spm=1001.2014.3001.5501
- 一共使用三台服务器,分别是yuanping-host,hezhen-host,wenpan-host
- 三台服务器都部署es
- yuanping-host部署filebeat、logstash
- hezhen-host部署kibana
- 使用echo 命令向app-1.log和app-2.log文件写日志,模拟两个不同应用服务的日志
yuanping-host | hezhen-host | wenpan-host | |
---|---|---|---|
Filebeat | √ | ||
Logstash | √ | ||
Es | √ | √ | √ |
kibana | √ | ||
模拟的应用服务 | 使用echo命令向app-1.log、app-2.log写入数据 |
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
# 将filebeat解压到指定的目录 tar -zxvf filebeat-6.5.4-linux-x86_64.tar.gz -C /opt/module/beats/
在filebeat安装目录新建一个config目录,用于存放我们自己编写的配置文件。在config目录下新建一个配置文件wenpan-filebeat-app-test.yml(名字随便取,启动filebeat的时候指定该配置文件即可),写入如下内容:
# 设置filebeat的输入为文件输入 filebeat.inputs: # 这里可以配置多个path,采集不同应用服务的日志,然后在logstash中按照应用服务名为index保存到es中 - type: log enabled: true # 采集指定目录的日志(模拟采集第一个应用服务的日志) paths: - /opt/module/data/logs/app-1.log # 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引 fields: appname: test-app01-log # 将属性放到根下 比如 appname 属性,在其他地方访问直接 [appname] 即可访问,不开启的话需要 [fields][appname]才能访问 #fields_under_root: true - type: log enabled: true # 采集指定目录的日志(模拟采集第二个应用服务的日志) paths: - /opt/module/data/logs/app-2.log # 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引 fields: appname: test-app02-log #fields_under_root: true # 指定索引的分区数 setup.template.settings: index.number_of_shards: 3 #指定logstash的配置,日志采集后输出到logstash中 output.logstash: hosts: ["yuanping-host:5044"]
# 执行如下命令启动filebeat ./filebeat -e -c wenpan-filebeat-app-test.yml -d "publish" #参数说明 -e: 输出到标准输出,默认输出到syslog和logs下 -c: 指定配置文件 -d: 输出debug信息
下载地址:https://www.elastic.co/cn/downloads/logstash
或使用wget获取:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz
# 解压到指定目录 tar -zxvf logstash-6.5.4.tar.gz -C /opt/module/logstash/
在config目录下创建一个配置文件wenpan-pipeline-app-test.conf(名字随便取,启动filebeat的时候指定该配置文件即可),写入如下内容:
# 从filebeat中输入 input { beats { port => "5044" } } filter { # 设置按照 | 拆分日志 mutate { split => {"message"=>"|"} } # 获取拆分后的日志的第1、2、3个字段并为他们指定字段名(非必须) mutate { add_field => { "userId" => "%{message[1]}" "visit" => "%{message[2]}" "date" => "%{message[3]}" } } # 将上面拿到的字段进行类型转换(非必须) mutate { convert => { "userId" => "integer" "visit" => "string" "date" => "string" } } } # 输出到es中 output { # 匹配filebeat里面定义的type,以便于一个logstash可以收集多个日志 if [fields][appname] == "test-app-log" { elasticsearch { hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"] # 刷新频率 #flush_size => 1000 # es中创建索引的名称(注意 index里面不能存在大写字符) index => "%{[fields][appname]}-%{+YYYY.MM.dd}" document_type => "log" } } # 匹配filebeat里面定义的type,以便于一个logstash可以收集多个日志 if [fields][appname] == "product-app-log" { elasticsearch { hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"] # 刷新频率 #flush_size => 1000 # es中创建索引的名称(注意 index里面不能存在大写字符) index => "%{[fields][appname]}-%{+YYYY.MM.dd}" document_type => "log" } } # ======================上面的写法也可以直接写成如下格式,二选一即可====================== # 推荐下面这种写法,比较简洁 #elasticsearch { #hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"] # 刷新频率 #flush_size => 1000 # es中创建索引的名称(注意 index里面不能存在大写字符) #index => "%{[fields][appname]}-%{+YYYY.MM.dd}" #document_type => "log" #} }
# 用指定的配置文件启动logstash,后台启动 nohup ./bin/logstash -f ./wenpan-pipeline-app-test.conf &
下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana
# 解压到指定目录 tar -xvf kibana-6.5.4-linux-x86_64.tar.gz -C /opt/module/kibana
vim config/kibana.yml # 对外暴露服务的地址,如果是阿里云,公网想要访问到的话这里需要配置成0.0.0.0 server.host: "xx.xx.xx.xx" # 配置Elasticsearch elasticsearch.url: "http://es的IP:9200"
# 后台启动kibana nohup ./bin/kibana &
启动报错 FATAL Error: listen EADDRNOTAVAIL xx.xx.xx.xx:5601
**解决方法:**修改server.host为