ELK+Filebeat日志收集系统搭建部署

时间:2024-05-19 20:50:46

生产环境ELK日志系统部署搭建指南
一、 搭建背景
1、 分布式系统,日志分散在多台机器,查询日志需要拿到全部日志进行逐一筛选,比较耗时。
2、 一些日志相关的紧急统计,需要临时耗费大量人力做分析汇总。
二、 环境准备
本次搭建环境及软件版本如下:
3台虚拟机配置:
硬件:CPU:4核64位;内存:16GB;
系统:Red Hat6.7;JDK:1.8.0_171;
应用:Filebeat、Elasticsearch、Logstash、Kibana均使用6.3.0版本。ELK官网下载tar包即可,保持组件版本一致。
磁盘:日志最终是存放在Elasticsearch上,此台机器磁盘是500GB。
三、 组件介绍
ELK技术栈目前主流架构图如下:
ELK+Filebeat日志收集系统搭建部署
Filebeat部署在生产服务器,负责收集文本型日志并外发;
Kafka消息队列,负责大并发场景下的日志消息缓存发送,防止数据丢失;
Logstash负责日志的切割,过滤等处理,也可以集群部署;
Elasticsearch负责日志存储,搜索,数据量大时需要集群部署,用空间换时间;
Kibana是elasticsearch的可视化工具,并且提供了强大的图形化展示功能。
本次搭建因为考虑到并发量不大,没有使用kafka,组件也没有做集群部署,后续随着日志量的增大会把elasticsearch做一个集群以提升搜索速度。
四、 搭建部署
1、 环境配置
A、 关闭虚拟机防火墙
# systemctl stop firewalld
# systemctl disable firewalld
B、 调整进程数和线程数
修改/etc/security/limits.d/20-nproc.conf 加入如下配置
soft nofile 65536
hard nofile 131072
soft memlock unlimited
hard memlock unlimited
修改/etc/security/limits.d/20-nproc.conf,加入以下配置
soft nproc 4096
root soft nproc unlimited
C、 创建ELK用户,增加内存数
# groupadd elk
# useradd -g elk elk
切换到root用户,在/etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
再执行这条命令
# sysctl -w vm.max_map_count=262144
2、 组件配置及启动
A、 Filebeat的配置和启动
a) Filebeat是配置在生产服务器上面的。解压filebeat.tar.gz到安装目录。
b) 编辑解压目录下的filebeat.yml文件。主要配置filebeat.inputs和output.logstash项。
output.logstash:
hosts: [“logstashIpAddr: logstashPort”]

filebeat.inputs:
# log_1
- type: log
# 配置是否启用此项配置
enabled: true
# 配置日志路径
paths:

  • /opt/applog/test.log
    #增加一个字段,配置日志源识别信息
    fields:
    log_source: 117_log
    c) 还有一个比较重要的配置是多行匹配。主要用于匹配报错日志等。
    在-type下配置以下3个选项:
    multiline.pattern: ‘^2019’ # 匹配的正则表达式
    multiline.negate: true # 否定参数,一般配置为true
    multiline.match: after # 表示向后匹配
    d) 后台启动命令:
    # nohup ./filebeat -e -c filebeat.yml
    B、 Elasticsearch的配置和启动
    a) 解压elasticsearch.tar.gz包到安装目录,如果不配置集群,使用默认配置即可。
    b) 配置集群:进入解压后的config目录,编辑elasticsearch.yml文件。
    cluster.name: testcluster # 集群的名称
    node.name: master-node # 节点名称
    node.master: true # 意思是该节点为主节点 (主节点设置为true,node节点设置为false)
    node.data: false # 表示这不是数据节点 (主节点设置为false,node节点设置为true)
    network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置一个安全的ip
    http.port: 9200 # es服务的端口号
    discovery.zen.ping.unicast.hosts: [
    “ip1”,
    “ip2”,
    “ip3”
    ]
    # 配置自动发现
    c) 启动:使用后台启动命令
    # nohup bin/elasticsearch &
    C、 Kibana的配置和启动
    a) 解压kibana.tar.gz包到安装目录,进入config目录,编辑kibana.yml文件。
    其中只有elasticsearch.url是必须配置的
    elasticsearch.url: http://1.2.3.4:9200 #配置elasticsearch的访问地址。
    server.port配置端口,默认是5601
    b) 启动:使用后台命令启动
    # nohup bin/kibana &
    D、 Logstash的配置和启动
    a) 解压logstash.tar.gz包到安装目录。
    b) 进入config目录,创建logstash.conf配置文件。具体配置方法见下一章节。这里先启动。
    c) 后台启动命令:
    # nohup bin/logstash -f config/logstash.conf &

五、 日志解析
前面说过,日志解析的工作主要由logstash完成,logstash根据配置文件来解析日志。
启动命令-f参数默认指向一个配置文件,如果要指向多个配置文件,则将多个配置文件放在一个目录下面,-f指向这个目录即可。
Logstash的配置文件使用rube语言编写。核心切割使用独特的grok语法,配合正则表达式完成。
一个logstash配置文件需要包含3个模块:
input{}:此模块是负责收集日志,可以从文件读取、从redis读取或者开启端口让产生日志的业务系统直接写入到logstash

filter{}:此模块是负责过滤收集到的日志,并根据过滤后对日志定义显示字段

output{}:此模块是负责将过滤后的日志输出到elasticsearch或者文件、redis等。
一个最简单的配置如下:
input {
stdin { }
}
filter {
}
output {
stdout {
codec => rubydebug
}
}
表示将标准输入的内容经rubydebug编码后标准输出。
Logstash配置涉及的内容非常多,本文只针对本次搭建的配置逐条解释,不作扩展。
本次搭建配置及解释如下图:
ELK+Filebeat日志收集系统搭建部署
六、 日志搜索
日志搜索是通过kibana来实现的,kibana实现在界面操作elasticsearch.
1、 通过kibana引入logstash创建的索引。
通过5601端口进入kibana首页,点进入Management页面。点击Index Patterns,点击Create Index Pattern创建索引(只有在logstash创建且有日志发送到ela才能在此处搜索并创建),搜索logstash创建的索引名前缀,日期用*代替,然后按提示创建即可。
2、搜索日志
a) 选择Discover页签,到日志展示页面
b) 左上角下拉框选择日志类型
c) 左边字段列表,点击添加message字段
d) 右上角选择日志时间
e) 正上方搜索日志内容,输入订单号等关键字搜索
ELK+Filebeat日志收集系统搭建部署

3、数据图表化还在研究中,后续更新。