ELK Stack日志中心搭建

环境信息

  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日志中心。

整体架构

image-20200106135141300

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

  • 拉取配置文件

在这里插入图片描述

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

目录结构:
在这里插入图片描述

  • 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路径修改为应用日志路径即可,如果需要读取多个目录下的日志,配置多个

“`- type: log
enabled: true
paths:
– /app/product-webservice/*.log

<pre><code class="line-numbers"><br /> 即可,可通过配置
“`fields:
fields:
log_source: ORDER
“`

区分不同应用的日志。

***注意:*** 参数

“`output.logstash:
setup.kibana:
host: “http://47.**.**.**:5601”

output.logstash:
hosts: [“47.**.**.**:5044”]

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

启动

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

在这里插入图片描述

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. 效果

image-20200105194606827

image-20200106135524220

日志信息很乱,不直观。

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

image-20200107113714169

image-20200107113810612

image-20200107114342406

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
    

    image-20200107144947845

发表评论

邮箱地址不会被公开。 必填项已用*标注