Elasticsearch+Filebeat+Kibana搭建过程(单节点)

Elasticsearch+Filebeat+Kibana搭建过程


传统查看日志的形式都是通过连接服务器查看服务器日志完成,这种方式会有以下弊端:

  1. 效率太慢,需要不停的连接服务器
  2. 日志文件本身对条件筛选并不友好
  3. 需要查看日志的人员对linux系统有些许熟悉
  4. 如果涉及分布式服务系统,需要同时查看多个服务的日志才能找到对应一条请求的整体日志
  5. 日志无法做整体的统计

日志收集系统介绍(Elasticsearch+Filebeat+Kibana)

ElasticSearch(https://www.elastic.co/cn/elasticsearch/) 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Filebeat(https://www.elastic.co/cn/beats/) 是一个完全开源的工具,属于Beats中的一种,具体介绍可以从官网中查看,它可以对你的日志进行收集、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索),server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去,Filebeat对比Logstash更为轻量,但是如果要实现过滤等功能需要用到ES中pipeline技术。

Kibana(https://www.elastic.co/cn/kibana) 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Filebeat 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。


单节点EFK搭建

使用版本:Elasticsearch6.3.2,Filebeat6.3.2,Kibana6.3.2
因为官网下载速度太慢,可以使用以下链接下载:

  • Elasticsearch6.3.2: https://pan.baidu.com/s/1i-dbRzQshpro8RQqM9cqeQ 提取码:1234
  • Filebeat6.3.2: https://pan.baidu.com/s/1xiQtZe6IVtaPBnjcJTALnA 提取码:1234
  • Kibana6.3.2: https://pan.baidu.com/s/1JC8WeMqLsxtIELI4wx_MDw 提取码:1234
Elasticsearch
#将下载的文件上传到服务器

#解压文件
tar -zxvf elasticsearch-6.3.2.tar.gz -C /usr/local/elk/
#更改解压后文件夹名称
mv /usr/local/elk/elasticsearch-6.3.2 /usr/local/elk/es

es不能用root用户启动,因为es可以接收用户输入的脚本并且执行,为了系统安全考虑,需要重新创建用户。

useradd es_user

切换root用户将刚刚解压的es文件夹设置为所有人可读可写

su root
chmod -R 777 /usr/local/elk/es/

因为es对当前用户的内存和可打开的文件数有最小限制,我们需要修改普通用户的最大内存和最大可打开文件数,如果服务器本身没有这么多内存,可以修改es启动变量来减少使用的内存大小,具体操作自行查询

#内存修改
vi /etc/sysctl.conf
#添加以下配置:
vm.max_map_count=262144 #具体大小可以查看es最小内存配置
#执行以下命令生效
sysctl -p
#最大可打开的文件数
vi /etc/security/limits.conf
#添加以下配置
es_user soft nofile 65535
es_user hard nofile 65535
#查询是否变化,如果没变化重新连接服务器 open files
ulimit -a

设置配置文件elasticsearch.yml,这里我只用了部分配置,具体配置详解:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules.html

vi /usr/local/elk/es/config/elasticsearch.yml
#配置内容
cluster.name: es
node.name: node-1
node.master: true
node.data: true
path.data: /usr/local/elk/es/data
path.logs: /usr/local/elk/es/logs
network.host: 0.0.0.0
http.port: 9200

启动es,并且查看

#切换用户
su es_user
cd /usr/local/elk/es/
#后台启动es,不输出日志
nohup bin/elasticsearch >/dev/null 2>&1 &
#后台启动es,输出日志es_nohup.log
nohup bin/elasticsearch >es_nohup.log 2>&1 &

验证启动是否成功

http://ip:9200/

停止es

netstat -tunlp | grep 9200
kill -9 PID
Kibana
#将下载的文件上传到服务器

#解压文件
tar -zxvf kibana.tar -C /usr/local/elk/

修改配置文件kibana.yml

vi /usr/local/elk/kibana/config/kibana.yml
#配置内容
server.port: 5601
server.host: "0.0.0.0"
#ip 是elasticsearch所在服务器的IP
elasticsearch.url: "http://ip:9200"

启动kibana

cd /usr/local/elk/kibana
#后台启动kibana,不输出日志
nohup config/kibana >/dev/null 2>&1 &
#后台启动kibana,输出日志 kibana_nohup.log
nohup config/kibana >kibana_nohup.log 2>&1 &

停止kibana

netstat -tunlp | grep 5601
kill -9 PID
Filebeat
#将下载的文件上传到服务器

#解压文件
tar xzvf filebeat-6.3.2-linux-x86_64.tar.gz -C /usr/local/elk/
#更改解压后文件夹名称
mv /usr/local/elk/filebeat-6.3.2-linux-x86_64 /usr/local/elk/filebeat

修改配置文件filebeat.yml,可以配置多个配置文件,在启动时选择,filebeat配置详细: https://www.elastic.co/guide/en/beats/filebeat/6.3/filebeat-configuration.html

filebeat.inputs:
- type: log
  #启用
  enabled: true
  #扫描路径
  paths:
    - /home/levi/project_1/logs/log_error.log
    - /home/levi/project_1/logs/log_warn.log
    - /home/levi/project_1/logs/log_info.log
  include_lines: ['INFO', 'WARN', 'ERROR']
  #忽略12个小时之前更新的文件
  ignore_older: 12h
  #自定义字段
  fields:
    log_source: project_1
  #多行日志配置
  multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
  multiline.negate: true
  multiline.match: after
  #每隔 scan_frequency 时间读取一次文件内容。对于关闭的文件,如果后续有更新,则经过 scan_frequency 时间后,Filebeat 将重新打开该文件,读取新增加的内容
  scan_frequency: 10s
  #生命周期持续时间
  close_inactive: 2h

- type: log
  enabled: true
  paths:
    - /home/levi/project_2/logs/log_error.log
    - /home/levi/project_2/logs/log_warn.log
  include_lines: ['INFO', 'WARN', 'ERROR']
  ignore_older: 12h
  fields:
    log_source: project_2
  multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
  multiline.negate: true
  multiline.match: after
  scan_frequency: 10s
  close_inactive: 2h

- type: log
  enabled: true
  paths:
    - /home/levi/project_3/logs/*.log
  include_lines: ['INFO', 'WARN', 'ERROR']
  ignore_older: 12h
  fields:
    log_source: project_3
  multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
  multiline.negate: true
  multiline.match: after
  scan_frequency: 10s
  close_inactive: 2h

- type: log
  enabled: true
  paths:
    - /home/levi/project_4/logs/*.log
  include_lines: ['INFO', 'WARN', 'ERROR']
  ignore_older: 12h
  fields:
    log_source: project_4
  multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
  multiline.negate: true
  multiline.match: after
  scan_frequency: 10s
  close_inactive: 2h

#==================== Elasticsearch template setting ==========================

setup.template.settings:
  #索引分片数量配置
  index.number_of_shards: 5

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  #es 对应服务器ip
  hosts: ["ip:9200"]
  #自定义索引名称
  index: "levi-%{[fields.log_source]}"
  #es中实现的过滤pipeline绑定
  pipeline: "levi-elk-pipeline"
setup:
  #es的filebeat模板,用来设置在Elasticsearch中的映射,如果模板加载是启用的(默认的),Filebeat在成功连接到Elasticsearch后自动加载索引模板
  template:
    enabled: true
    name: "levi"
    pattern: "levi-*"
    overwrite: true

启动filebeat之前需要初始化es中的pipeline ,pipeline详解: https://www.elastic.co/guide/en/elasticsearch/reference/6.3/pipeline.html

PUT _ingest/pipeline/levi-elk-pipeline
{
    "description": "levi elk pipeline",
    "processors": [
      {
        "grok": {
          "field": "message",
          "patterns": [
            """(?<timestamp>(?:%{YEAR}-%{MONTHNUM}-%{MONTHDAY})%{SPACE}(?:%{HOUR}:%{MINUTE}:%{SECOND}.\d{3}))(?<thread>(?:%{SPACE}\[.*?\]%{SPACE}))%{LOGLEVEL:level}(?<class>(?:%{SPACE}(\w+(\.)+)+\w*%{SPACE}))"""
          ]
        }
      },
      {
        "gsub": {
          "field": "thread",
          "pattern": """\s\[""",
          "replacement": ""
        }
      },
      {
        "gsub": {
          "field": "thread",
          "pattern": """\]\s""",
          "replacement": ""
        }
      },
      {
        "gsub": {
          "field": "class",
          "pattern": "\\s",
          "replacement": ""
        }
      },
      {
        "date": {
          "field": "timestamp",
          "formats": [
            "yyyy-MM-dd HH:mm:ss.SSS"
          ],
          "timezone": "Asia/Shanghai"
        },
        "remove": {
          "field": "timestamp"
        }
      }
    ]
  }

启动filebeat

cd /usr/local/elk/filebeat
#后台启动filebeat 且不输出启动日志
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
#后台启动filebeat 输出启动日志 filebeat_nohup.log
nohup ./filebeat -e -c filebeat.yml >filebeat_nohup.log 2>&1 &

停止filebeat

ps -ef|grep filebeat
kill -9 PID
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值