searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于FileBeats + ELK快速搭建小型日志检索系统

2023-05-29 05:39:12
94
0

日志检索系统目的是方便运维、开发及测试等项目相关人员对日志进行检索、分析等操作,没用一个可视化或者友好的平台时,往往通过一些linux命令进行统计,当应用部署在多个服务器上时,这种方式就有点力不从心了,而ELK为这些日志检索及统计中的问题提供了一套完美的解决方案。

组件介绍

什么是ELK?

三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana。

Elasticsearch

Elasticsearch用来存储各种日志文件,它是基于全文检索引擎的架构(Lucene)的实时的、分布式存储检索引擎,允许用户做全文及结构化检索,用户可以通过RESTful Web接口,通过浏览器与其通信。

Logstash

Logstash用来做数据源搜集,并对数据进行过滤、分析、丰富统一格式等操作,然后将处理过的数据存储到指定的位置

Kibana

kibana为Elasticsearch及Logstash提供了可视化的界面,可以对Elasticsearch中存储的日志数据进行检索、查询、汇总及分析等。

 

FileBeat

既然ELK已经有数据存储与检索、数据采集以及可视化展示的能力,那filebeat是做什么的呢?其实,filebeat与ELK都是elastic公司开发的,可以理解为filebeat替代了logstash的数据采集能力,相比logstash,filebeat更快速、轻量、稳定且低耗,它可以直接对接Elasticsearch或Logstash,Filebeat不能完全取代Logstash,因为后者还具有筛选和过滤能力。

filebeat的架构,可以看到,它是哦那个过spooler可以直接与logstash及Elasticsearch交互。

filebeat.png

 

部署架构

通过上述组件功能描述,不难理解目前一个较为主流的日志采集框架——Filebeat+ELK框架。即filebeat采集日志,然后将采集日志发送到消息队列(redis,kafaka等),logstash去消息队列中获取日志数据,利用自身filter功能进行过滤分析,然后将处理过的数据存储到elasticsearch中,最后在Kibana做查询分析

基于Filebeat+ELK的简单部署架构,选用kafka作消息队列

安装与部署

组件版本的选择说明如下

组件名称

组件版本

组件说明

filebeat filebeat-8.4.3-linux-x86_64 日志收集
logstash logstash-8.4.3-linux-x86_64 日志分析过滤及转发
kafka kafka_3.3.1 消息队列
zookeeper apache-zookeeper-3.8.0-bin 调度
elasticsearch elasticsearch-8.4.3 日志存储
kibana kibana-8.4.3-linux-x86_64 日志展示分析

需要说明的是 Filebeat 和ELK必须部署同样的版本才能保证使用无误

Filebeat安装部署

下载所需版本Filebeat Reference | Elastic并上传到服务器,这里我们选择版本filebeat-8.4.3-linux-x86_64,需要说明的是,filebeat是按照在应用服务器上的

  • 上传版本到应用服务器
  • 解压到目录/user/local/filebeat下
  • 配置修改(filebeat目录下yml文件修改),首先是 inputs,path部分是需要收集日志的目录位置

  • 配置outputs,找到outputs部分,可以看到这里有多种不同的输出系统,这里选择输出到Logstash,配置host之后记得将其他的输出配置给注释掉


    当然,如果filebeat直接对接Elasticsearch的话,那在Elasticsearch Output部分配置相应host即可
  • 使用nohup命令启动
    nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml &
  • 查看filebeat是否启动成功

Logstash安装部署

  • 上传版本到服务器
  • 解压到相应目录
  • 修改相应配置

  • 后台启动 nohup bin/logstash -f first-pipeline.conf &,启动后,日志会默认输出到nohup.out文件中,可以使用如下命令查看
    tail -300f nohup.out

 

Elasticsearch安装部署

  • 前提:安装es要确保已安装jdk,这里不再对jdk安装做详细叙述
  • 上传版本到服务器
  • 解压到相应目录
  • 添加安全组及用户,因为Elasticsearch默认是不允许使用root账号运行的

    • 新建组:groupadd es 

    • 组下新建用户:useradd es -g es 

    • 切换用户:su es

  • 修改配置
  • 启动服务   nohup /opt/elasticsearch-8.4.3/bin/elasticsearch >/dev/null 2>&1 &

Kafka部署方案

这里我们主要介绍下集群部署方案

  • 在三台主机173,176,177上面解压kafka
  • 修改配置文件,这里与单机部署不一致的地方是zookeeper.connect参数,要改成监听三台机器,同时,将173,176,177的broker.id分别设置为0,1,2   
    server.properties
    broker.id=0 // 全局唯一,单击可不动
    port=9092 #端口号
    listeners=PLAINTEXT://127.0.0.1:9092
    host.name=xxx.xx.x.xx #服务器IP地址,修改为自己的服务器IP
    log.dirs=/opt/kafka/kafka-logs  #日志存放路径,如果当前账户有权限创建目录,该目录可以不存在,否则必须手动创建的目录
    zookeeper.connect=10.31.81.177:2181,10.31.81.176:2181, 10.31.81.173.2181 #zookeeper地址和端口,集群配置部署,localhost:2181
  • 启动zk,在三台服务器上分别执行下述命令
    nohup ./zookeeper-server-start.sh ../config/zookeeper.properties >> zookeeper.nohup 2>&1 &
  • 启动kafka
    nohup ./kafka-server-start.sh ../config/server.properties >> kafka.nohup 2>&1 &
  • 测试kafka连通性
    # 创建一个topic 例如在173创建,./kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
    # 创建一个producer,在176创建producer  ./kafka-console-producer.sh --topic quickstart-events --bootstrap-server xx.xx.xx.177:9092,xx.xx.xx.176:9092,xx.xx.xx.173:9092
    # 创建多个consumer,例如173, 176, 177  ./kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server xx.xx.xx.177:9092,xx.xx.xx.176:9092,xx.xx.xx.173:9092
  •  

ES添加登录认证

为了提高 ES 集群的数据访问安全,保护我们存在es中的数据,、用户必须通过用户名和密码认证,才被允许访问 ES 集群。无论是通过 Kibana、客户端或者 API 等方式访问集群都需要经过认证。下面我们将认证需要操作的步骤做下简单介绍

  • 操作步骤

    操作步骤
    #es未认证漏洞
    1. 创建证书elastic-stack-ca.p12,创建证书时输入密码,同es用户密码
    .\bin\elasticsearch-certutil ca
      
    2. 生成证书elastic-certificates.p12
    bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
      
    3. 证书放到certs目录下
    cp elastic-certificates.p12 config/certs/
      
    4. ca证书和elasticsearch.p12设置了密码,则执行下述命令,添加上述密码
    bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password  
    bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
      
    5. 修改elasticsearch.yml配置文件
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
      
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
      
    6. 重启es
    ./bin/elasticsearch -d
      
    7. 访问es
    curl http://localhost:9200
  • 测试验证
0条评论
0 / 1000
徐****倩
8文章数
0粉丝数
徐****倩
8 文章 | 0 粉丝
原创

基于FileBeats + ELK快速搭建小型日志检索系统

2023-05-29 05:39:12
94
0

日志检索系统目的是方便运维、开发及测试等项目相关人员对日志进行检索、分析等操作,没用一个可视化或者友好的平台时,往往通过一些linux命令进行统计,当应用部署在多个服务器上时,这种方式就有点力不从心了,而ELK为这些日志检索及统计中的问题提供了一套完美的解决方案。

组件介绍

什么是ELK?

三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana。

Elasticsearch

Elasticsearch用来存储各种日志文件,它是基于全文检索引擎的架构(Lucene)的实时的、分布式存储检索引擎,允许用户做全文及结构化检索,用户可以通过RESTful Web接口,通过浏览器与其通信。

Logstash

Logstash用来做数据源搜集,并对数据进行过滤、分析、丰富统一格式等操作,然后将处理过的数据存储到指定的位置

Kibana

kibana为Elasticsearch及Logstash提供了可视化的界面,可以对Elasticsearch中存储的日志数据进行检索、查询、汇总及分析等。

 

FileBeat

既然ELK已经有数据存储与检索、数据采集以及可视化展示的能力,那filebeat是做什么的呢?其实,filebeat与ELK都是elastic公司开发的,可以理解为filebeat替代了logstash的数据采集能力,相比logstash,filebeat更快速、轻量、稳定且低耗,它可以直接对接Elasticsearch或Logstash,Filebeat不能完全取代Logstash,因为后者还具有筛选和过滤能力。

filebeat的架构,可以看到,它是哦那个过spooler可以直接与logstash及Elasticsearch交互。

filebeat.png

 

部署架构

通过上述组件功能描述,不难理解目前一个较为主流的日志采集框架——Filebeat+ELK框架。即filebeat采集日志,然后将采集日志发送到消息队列(redis,kafaka等),logstash去消息队列中获取日志数据,利用自身filter功能进行过滤分析,然后将处理过的数据存储到elasticsearch中,最后在Kibana做查询分析

基于Filebeat+ELK的简单部署架构,选用kafka作消息队列

安装与部署

组件版本的选择说明如下

组件名称

组件版本

组件说明

filebeat filebeat-8.4.3-linux-x86_64 日志收集
logstash logstash-8.4.3-linux-x86_64 日志分析过滤及转发
kafka kafka_3.3.1 消息队列
zookeeper apache-zookeeper-3.8.0-bin 调度
elasticsearch elasticsearch-8.4.3 日志存储
kibana kibana-8.4.3-linux-x86_64 日志展示分析

需要说明的是 Filebeat 和ELK必须部署同样的版本才能保证使用无误

Filebeat安装部署

下载所需版本Filebeat Reference | Elastic并上传到服务器,这里我们选择版本filebeat-8.4.3-linux-x86_64,需要说明的是,filebeat是按照在应用服务器上的

  • 上传版本到应用服务器
  • 解压到目录/user/local/filebeat下
  • 配置修改(filebeat目录下yml文件修改),首先是 inputs,path部分是需要收集日志的目录位置

  • 配置outputs,找到outputs部分,可以看到这里有多种不同的输出系统,这里选择输出到Logstash,配置host之后记得将其他的输出配置给注释掉


    当然,如果filebeat直接对接Elasticsearch的话,那在Elasticsearch Output部分配置相应host即可
  • 使用nohup命令启动
    nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml &
  • 查看filebeat是否启动成功

Logstash安装部署

  • 上传版本到服务器
  • 解压到相应目录
  • 修改相应配置

  • 后台启动 nohup bin/logstash -f first-pipeline.conf &,启动后,日志会默认输出到nohup.out文件中,可以使用如下命令查看
    tail -300f nohup.out

 

Elasticsearch安装部署

  • 前提:安装es要确保已安装jdk,这里不再对jdk安装做详细叙述
  • 上传版本到服务器
  • 解压到相应目录
  • 添加安全组及用户,因为Elasticsearch默认是不允许使用root账号运行的

    • 新建组:groupadd es 

    • 组下新建用户:useradd es -g es 

    • 切换用户:su es

  • 修改配置
  • 启动服务   nohup /opt/elasticsearch-8.4.3/bin/elasticsearch >/dev/null 2>&1 &

Kafka部署方案

这里我们主要介绍下集群部署方案

  • 在三台主机173,176,177上面解压kafka
  • 修改配置文件,这里与单机部署不一致的地方是zookeeper.connect参数,要改成监听三台机器,同时,将173,176,177的broker.id分别设置为0,1,2   
    server.properties
    broker.id=0 // 全局唯一,单击可不动
    port=9092 #端口号
    listeners=PLAINTEXT://127.0.0.1:9092
    host.name=xxx.xx.x.xx #服务器IP地址,修改为自己的服务器IP
    log.dirs=/opt/kafka/kafka-logs  #日志存放路径,如果当前账户有权限创建目录,该目录可以不存在,否则必须手动创建的目录
    zookeeper.connect=10.31.81.177:2181,10.31.81.176:2181, 10.31.81.173.2181 #zookeeper地址和端口,集群配置部署,localhost:2181
  • 启动zk,在三台服务器上分别执行下述命令
    nohup ./zookeeper-server-start.sh ../config/zookeeper.properties >> zookeeper.nohup 2>&1 &
  • 启动kafka
    nohup ./kafka-server-start.sh ../config/server.properties >> kafka.nohup 2>&1 &
  • 测试kafka连通性
    # 创建一个topic 例如在173创建,./kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
    # 创建一个producer,在176创建producer  ./kafka-console-producer.sh --topic quickstart-events --bootstrap-server xx.xx.xx.177:9092,xx.xx.xx.176:9092,xx.xx.xx.173:9092
    # 创建多个consumer,例如173, 176, 177  ./kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server xx.xx.xx.177:9092,xx.xx.xx.176:9092,xx.xx.xx.173:9092
  •  

ES添加登录认证

为了提高 ES 集群的数据访问安全,保护我们存在es中的数据,、用户必须通过用户名和密码认证,才被允许访问 ES 集群。无论是通过 Kibana、客户端或者 API 等方式访问集群都需要经过认证。下面我们将认证需要操作的步骤做下简单介绍

  • 操作步骤

    操作步骤
    #es未认证漏洞
    1. 创建证书elastic-stack-ca.p12,创建证书时输入密码,同es用户密码
    .\bin\elasticsearch-certutil ca
      
    2. 生成证书elastic-certificates.p12
    bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
      
    3. 证书放到certs目录下
    cp elastic-certificates.p12 config/certs/
      
    4. ca证书和elasticsearch.p12设置了密码,则执行下述命令,添加上述密码
    bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password  
    bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
      
    5. 修改elasticsearch.yml配置文件
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
      
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
      
    6. 重启es
    ./bin/elasticsearch -d
      
    7. 访问es
    curl http://localhost:9200
  • 测试验证
文章来自个人专栏
徐倩的专栏
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1