欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ELK Stack日志中心搭建

程序员文章站 2024-03-21 18:15:34
...

环境信息

  1. centos 7
  2. docker + docker-compse
  3. jdk8
  4. elasticesearch 7.1.1
  5. kibana 7.1.1
  6. logstash 7.1.1
  7. filebeat 7.1.1

docker环境安装

参考:官网安装教程

#docker安装
curl -sSL https://get.daocloud.io/docker | sh
 
#docker-compose安装
curl -L \
https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose
 
chmod +x /usr/local/bin/docker-compose
 
#查看安装结果
docker-compose -v

1. 基于 Filebeat 搭建 ELK 集群日志中心

本文主要目的是简化搭建ELK环境的步骤,使用Docker Compose部署ELK 7.1.1分布式集群的日志框架,只需要执行一个init.sh脚本即可搭建好一个ELK Stack日志中心。

整体架构

ELK Stack日志中心搭建

1.1 单台服务器搭建ELK集群日志中心

  • 拉取配置文件

ELK Stack日志中心搭建

# 拉取配置文件
git clone https://github.com/glj381413362/common-plugin.git

目录结构:
ELK Stack日志中心搭建

  • log-plugin:一个日志插件,这里重点关注nodes-stand-alone目录下的配置文件,nodes-stand-alone下是单服务器搭建ELK Stack-搭建日志中心的所有配置文件
    其他模块这里用不到,可以忽略

1.1.1 应用与ELK部署在同一台服务器

由于应用和ELK部署在同一台机器,所以这里只需要修改一下Filebeat配置即可(配置文件参考)

filebeat.inputs:
- type: log
  enabled: true
  paths:
    # 产品的所有.log文件
    - /app/product-webservice/*.log
  document_type: product_log   #设定Elasticsearch输出时的document的type字段,也可以用来给日志进行分类
  fields:
    log_source: PRODUCT
  multiline.pattern: ^\d{4}    # 多行处理,正则表示如果前面几个数字不是4个数字开头,那么就会合并到一行
  multiline.negate: true
  multiline.match: after # 不匹配的正则的行是放在上面一行的前面还是后面

- type: log
  enabled: true
  paths:
    # 订单服务的所有.log文件
    - /app/order-webservice/*.log
  fields:
    log_source: ORDER
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 1

setup.dashboards.enabled: false

setup.kibana:
  host: "http://47.**.**.**:5601"

# 不直接传输至ES
#output.elasticsearch:
# hosts: ["http://47.93.46.12:9200"]
# index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"

output.logstash:
  hosts: ["47.**.**.**:5044"]

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

将paths路径修改为应用日志路径即可,如果需要读取多个目录下的日志,配置多个

  enabled: true
  paths:
    - /app/product-webservice/*.log

即可,可通过配置
fields: fields: log_source: ORDER

区分不同应用的日志。

注意: 参数

 setup.kibana:
  host: "http://47.**.**.**:5601"
  
 output.logstash:
  hosts: ["47.**.**.**:5044"] 

需要修改成相应服务的IP和端口

启动

# 配置文件所在目录 运行./init.sh
./init.sh

ELK Stack日志中心搭建

1.1.2 应用与ELK部署在不同服务器

应用与ELK部署在同一台服务器 步骤相同,需要先把配置和脚本拉取下来,然后运行init.sh脚本,如果ELK所在服务器没有部署应用,也不需要监控日志,则可以把Filebeat服务停掉。
停掉Filebeat服务

# 停止Filebeat服务
docker-compose stop filebeat

1.1.2.1 应用服务器部署Filebeat服务

1、 非容器化部署

  1. 下载安装包
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.1.1-darwin-x86_64.tar.gz
cd filebeat-7.1.1-darwin-x86_64/
  1. 修改Filebeat配置文件
    这里和 应用与ELK部署在同一台服务器 中的Filebeat配置大同小异,需要修改为正确的logstash服务的IP和端口

  2. 启动Filebeat服务

    nohup ./filebeat -e -c filebeat.yml > filebeat.log &

2、 容器化部署

需要应用所在服务器也有docker环境。

  1. 修改Filebeat配置文件
    这里和 应用与ELK部署在同一台服务器 中的Filebeat配置大同小异,需要修改为正确的logstash服务的IP和端口
  2. 启动Filebeat容器服务
# 启动Filebeat服务
docker run \
  -v ~/filebeat.yml:/usr/share/filebeat/filebeat.yml \
  docker.elastic.co/beats/filebeat:7.1.1

1.2 多台服务器搭建ELK集群日志中心

2. 效果

ELK Stack日志中心搭建

ELK Stack日志中心搭建

日志信息很乱,不直观。

3. 配置logstash

  1. 对Java日志做一些信息提炼,也就是使用过滤规则,将date,log-level,log-message等提取出来,添加过滤规则;

    filter {
        grok {
    			match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" }
    		}
    }
    
  2. 修改时间格式

    date {    #改变时间格式
         #         match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
             match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
             remove_field => "timestamp"    #删除原有的时间字段
        }
    

4. 系统指标

  1. 下载并安装 Metricbeat

    curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.1.1-x86_64.rpm
    sudo rpm -vi metricbeat-7.1.1-x86_64.rpm
    
  2. 编辑 Metricbeat 配置

修改 /etc/metricbeat/metricbeat.yml 以设置连接信息:

output.elasticsearch:
  hosts: ["<es_url>"]
  username: "elastic"
  password: "<password>"
setup.kibana:
  host: "<kibana_url>"

其中,<password>elastic 用户的密码,<es_url> 是 Elasticsearch 的 URL,<kibana_url> 是 Kibana 的 URL

  1. 启用和配置 system 模块
sudo metricbeat modules enable system

/etc/metricbeat/modules.d/system.yml 文件中修改设置

  1. 启动 Metricbeat

setup 命令加载 Kibana 仪表板。如果仪表板已设置,请省略此命令。

sudo metricbeat setup
sudo service metricbeat start

ELK Stack日志中心搭建

ELK Stack日志中心搭建

ELK Stack日志中心搭建

5 Docker 指标

  1. 启用和配置 docker 模块
sudo metricbeat modules enable docker

/etc/metricbeat/modules.d/docker.yml 文件中修改设置。

  1. 启动 Metricbeat

    setup 命令加载 Kibana 仪表板。如果仪表板已设置,请省略此命令。

    sudo metricbeat setup
    sudo service metricbeat start
    

    ELK Stack日志中心搭建