elk分布式日志管理系统搭建
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
ELK简介
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Filebeat隶属于Beats。目前Beats包含四种工具:
-
- Packetbeat(搜集网络流量数据)
- Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat(搜集文件数据)
- Winlogbeat(搜集 Windows 事件日志数据)
ELK架构图
ELK流程图
日志生产
;
服务通过日志框架输出的日志,Nginx产生的日志;也可以是任何形式输出的日志文件。日志抓取(filebeat)
;
通过配置,监控抓取符合规则的日志文件,并将抓取到的每条数据发送给kafkakafka
;
主要起到削峰填谷,ELK高可用的关键作用;当流量过大,kafka可以起到很好的缓冲作用,降低下游的压力;当下游的logstash或ES故障,也可以很好保证数据的完整性logstash
;
消费kafka的数据,并将数据持久化到ES或者其他持久化框架Elasticsearch
;
持久化数据,并提供分布式检索功能Kibana
;
展示ES中的数据xpack watch
;
监控异常通知模块
;
将监控到的告警通知给相关责任人
搭建
本次搭建原则 架构为: filebeat - kafka -logstash -es -kibana
Kafka 集群本次不做说明,需要自行安装:https://blog.csdn.net/uhb6577/article/details/120227131?spm=1001.2014.3001.5501
es 使用单节点安装
相关启动方式使用最简单启动命令,后台启动可在前面加 nohup
1.kafka 集群搭建启动
启动kafka集群
2.filebeat 安装使用
官网下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
选择版本:filebeat-6.6.0-linux-x86_64.tar.gz
##上传解压
[hadoop@hadoop102 software]$ tar -zxvf filebeat-6.6.0-linux-x86_64.tar.gz -C /opt/module/
## 新建配置应用文件 (配置日志输入地址和 输出地址:按照架构图输出到kafka)
[hadoop@hadoop102 filebeat-6.6.0-linux-x86_64]$ vi filebeat_kafka.yml
filebeat.inputs:
- type: log
enabled: true
paths:
##监控输入日志地址
- /opt/log/*.log
## 定义输出的方式
output.kafka:
enabled: true # 启动
hosts: ["192.168.56.102:9092","192.168.56.103:9092","192.168.56.104:9092"] #kafka的ip和port
topic: 'log4jdemo' #指定输出到的topicname 也就是上面定义的变量
partition.hash: # 分区规则 hash
reachable_only: true
compression: gzip # 数据压缩
max_message_bytes: 1000000 # 最大的消息字节数
required_acks: 1 # kafka ack的方式
logging.to_files: true
## 启动
[hadoop@hadoop102 filebeat-6.6.0-linux-x86_64]$ ./filebeat -e -c filebeat_kafka.yml -d "publish"
3.ElasticSearch 安装
官网下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
[hadoop@hadoop102 software]$ tar -zxvf elasticsearch-6.8.9.tar.gz -C /opt/module/
[hadoop@hadoop102 module]$ xsync elasticsearch-6.8.9/
[hadoop@hadoop102 elasticsearch-7.4.0]$ vi config/elasticsearch.yml
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1:
##启动
[hadoop@hadoop102 elasticsearch-7.4.0]$ ./bin/elasticsearch
4.logstash 安装使用
官网下载地址 :https://www.elastic.co/cn/downloads/logstash
## 上传解压
[hadoop@hadoop102 software]$ tar -zxvf logstash-7.15.2-linux-x86_64.tar.gz -C /opt/module/
## 在logstash-7.15.2-linux-x86_64/config 下新建配置文件,输入为kafka 输出为 es
[hadoop@hadoop102 config]$ vi kafka-logstash-es-test.conf
input {
kafka {
bootstrap_servers => ["192.168.56.102:9092,192.168.56.103:9092,192.168.56.104:9092"]
topics => "log4jdemo"
group_id => "log4jdemogroup"
}
}
output {
elasticsearch {
hosts => ["192.168.56.102:9200"]
index => "log4jdemo"
#user => "elastic"
#password => "changeme"
}
}
## 启动
[hadoop@hadoop102 bin]$ ./logstash -f ../config/kafka-logstash-es-test.conf --config.reload.automatic
5.Kibana 安装使用
官网下载地址:
https://www.elastic.co/cn/downloads/kibana
注意:es 和 kibana 版本最好对应,不能相差太大,否则启动会报错
## 下载解压
[hadoop@hadoop102 root]$ tar -zxvf kibana-7.4.0-linux-x86_64.tar.gz -C /opt/module/
## 修改配置文件
[hadoop@hadoop102 kibana-7.4.0-linux-x86_64]$ ls
bin config LICENSE.txt node_modules optimize plugins src x-pack
built_assets data node NOTICE.txt package.json README.txt webpackShims
[hadoop@hadoop102 kibana-7.4.0-linux-x86_64]$ cd config/
[hadoop@hadoop102 config]$ ls
kibana.yml
[hadoop@hadoop102 config]$ vi kibana.yml
##允许远程访问的地址配置:属性名为:server.host默认为本机,如果我们需要把Kibana服务给远程主机访问,只需要在这个配置中填写远程的那台主机的ip地址,那如果我们希望所有的远程主机都能访问,那就填写0.0.0.0
server.host: "0000"
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
i18n.locale: "zh-CN"
## 启动
[hadoop@hadoop102 bin]$ ./kibana
使用截图: