博客
关于我
ELK快速搭建日志平台
阅读量:426 次
发布时间:2019-03-06

本文共 4157 字,大约阅读时间需要 13 分钟。

抛砖引入

查看日志的方式一直是开发和运维工程师的日常工作。传统的方法主要是通过SSH客户端登录到各个服务器,使用命令如lesstail查看日志文件。这种方式在服务部署多机器的情况下效率极低,需要频繁切换服务器,且对日志时间顺序的判断可能存在困难。此外,搜索日志也比较麻烦,需要熟练掌握viless等命令,容易导致眼睛疲劳。

为了简化日志检索和管理,互联网公司普遍搭建日志管理和监控平台。ELK(Elasticsearch、Logstash、Kibana)组件群就成为了一个高效的解决方案。本文将基于ELK架构,搭建一个适合实际业务需求的日志管理平台。


前言

现状

传统的日志查看方式存在诸多不足:

  • 需要登录多台服务器,增加操作复杂性。
  • 日志时间顺序判断存在不确定性。
  • 搜索功能不够方便,依赖命令行工具。
  • 为了解决这些问题,现代互联网公司普遍采用日志管理平台。无论是自行搭建(如Zabbix)还是使用云服务提供的监控平台(如阿里云),核心需求都是日志的高效采集、存储、检索和分析。因此,本文将基于ELK组件,构建一个完整的日志管理系统。


    日志格式

    我们的日志格式如下:

    2018-08-22 00:34:51.952 [INFO ] [org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1] [com.cjs.handler.MessageHandler][39] - 监听到注册事件消息:

    这个格式包含了:

  • 日期和时间:2018-08-22 00:34:51.952
  • 日志级别:[INFO]
  • 服务名称:org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1
  • 类别:com.cjs.handler.MessageHandler
  • 日志内容:监听到注册事件消息:

  • logback.xml

    logback.xml文件用于配置日志框架,具体设置包括:

    • 日志输出格式
    • 日志级别(debug、info、error等)
    • 日志文件路径

    环境介绍

    在本例中,日志文件位于/data/logs/${projectName},例如/data/logs/oh-coupon/data/logs/oh-promotion

    Filebeat、Logstash、Elasticsearch、Kibana都部署在同一台虚拟机上,且各组件均为单实例,无中间件。
    由于日志每天都会归档,Filebeat只需监控info.logerror.log两个文件即可完成采集任务。


    Filebeat配置

    Filebeat的核心配置文件是filebeat.yml,主要包括以下部分:

  • filebeat.inputs:定义要采集的文件路径和配置。
  • output.logstash:指定Logstash的输出地址和配置。
  • filebeat.inputs:
    - type: log
    enabled: true
    paths:
    - /data/logs/oh-coupon/info.log
    - /data/logs/oh-coupon/error.log
    fields:
    log_source: oh-coupon
    multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}
    multiline.negate: true
    multiline.match: after
    scan_frequency: 5s
    close_inactive: 1h
    ignore_older: 24h
    - type: log
    enabled: true
    paths:
    - /data/logs/oh-promotion/info.log
    - /data/logs/oh-promotion/error.log
    fields:
    log_source: oh-promotion
    multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}
    multiline.negate: true
    multiline.match: after
    scan_frequency: 5s
    close_inactive: 1h
    ignore_older: 24h
    output.logstash:
    hosts: ["localhost:5044"]
    # 可选:SSL配置
    # ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
    # ssl.certificate: "/etc/pki/client/cert.pem"
    # ssl.key: "/etc/pki/client/cert.key"

    Logstash配置

    Logstash的主要配置文件是logstash.yml,包括输入、过滤和输出设置。

    xpack.monitoring.enabled: true
    xpack.monitoring.elasticsearch.username: "logstash_system"
    xpack.monitoring.elasticsearch.password: "123456"
    xpack.monitoring.elasticsearch.url: ["http://localhost:9200"]

    管道配置

    Logstash的管道配置如下:

    input {
    beats {
    port: 5044
    }
    }
    filter {
    grok {
    match: { "message" => "%{TIMESTAMP_ISO8601:log_date}\s+\[%{LOGLEVEL:log_level}" }
    }
    date {
    match: ["log_date", "yyyy-MM-dd HH:mm:ss.SSS"]
    target: "@timestamp"
    }
    }
    output {
    if [log_source] == "oh-coupon" {
    elasticsearch {
    hosts: ["localhost:9200"]
    index: "oh-coupon-%{+YYYY.MM.dd}"
    user: "logstash_internal"
    password: "123456"
    }
    }
    if [log_source] == "oh-promotion" {
    elasticsearch {
    hosts: ["localhost:9200"]
    index: "oh-promotion-%{+YYYY.MM.dd}"
    user: "logstash_internal"
    password: "123456"
    }
    }
    }

    插件

    Logstash提供了丰富的插件用于输入、过滤和输出。常用的插件包括:

    • grok:用于从日志消息中提取结构化字段。
    • date:用于解析日志中的日期字段并转换为@timestamp
    • elasticsearch:用于将日志数据输出到Elasticsearch索引。

    Elasticsearch配置

    Elasticsearch的配置文件是elasticsearch.yml,主要设置包括:

    xpack.security.enabled: true

    其他配置均为默认值。


    Kibana配置

    Kibana的配置文件是kibana.yml,主要包括:

    server.port: 5601
    server.host: "192.168.101.5"
    elasticsearch.url: "http://localhost:9200"
    kibana.index: ".kibana"
    elasticsearch.username: "kibana"
    elasticsearch.password: "123456"
    xpack.security.enabled: true
    xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"

    启动服务

    启动Elasticsearch

    [root@localhost ~]# su - cheng
    [cheng@localhost ~]$ cd $ES_HOME
    [cheng@localhost elasticsearch-6.3.2]$ bin/elasticsearch

    启动Kibana

    [cheng@localhost kibana-6.3.2-linux-x86_64]$ bin/kibana

    启动Logstash

    [root@localhost logstash-6.3.2]# bin/logstash -f second-pipeline.conf --config.test_and_exit
    [root@localhost logstash-6.3.2]# bin/logstash -f second-pipeline.conf --config.reload.automatic

    启动Filebeat

    [root@localhost filebeat-6.3.2-linux-x86_64]# rm -f data/registry
    [root@localhost filebeat-6.3.2-linux-x86_64]# ./filebeat -e -c filebeat.yml -d "publish"

    演示

    完成以上配置和部署后,可以通过浏览器访问Kibana地址(默认为http://localhost:5601)进行日志检索和分析。

    转载地址:http://zwhkz.baihongyu.com/

    你可能感兴趣的文章
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>