你居然还去服务器上捞日志,搭个日志收集系统难道不香么!

优采云 发布时间: 2022-05-25 21:37

  你居然还去服务器上捞日志,搭个日志收集系统难道不香么!

  ELK日志收集系统进阶使用,本文主要讲解如何打造一个线上环境真实可用的日志收集系统。有了它,你就可以和去服务器上捞日志说再见了!

  ELK环境安装

  ELK是指Elasticsearch、Kibana、Logstash这三种服务搭建的日志收集系统,具体搭建方式可以参考。这里仅提供最新版本的docker-compose脚本和一些安装要点。

  docker-compose脚本

  version: '3'<br />services:<br />  elasticsearch:<br />    image: elasticsearch:6.4.0<br />    container_name: elasticsearch<br />    environment:<br />      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch<br />      - "discovery.type=single-node" #以单一节点模式启动<br />      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小<br />      - TZ=Asia/Shanghai<br />    volumes:<br />      - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载<br />      - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载<br />    ports:<br />      - 9200:9200<br />      - 9300:9300<br />  kibana:<br />    image: kibana:6.4.0<br />    container_name: kibana<br />    links:<br />      - elasticsearch:es #可以用es这个域名访问elasticsearch服务<br />    depends_on:<br />      - elasticsearch #kibana在elasticsearch启动之后再启动<br />    environment:<br />      - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址<br />      - TZ=Asia/Shanghai<br />    ports:<br />      - 5601:5601<br />  logstash:<br />    image: logstash:6.4.0<br />    container_name: logstash<br />    environment:<br />      - TZ=Asia/Shanghai<br />    volumes:<br />      - /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件<br />    depends_on:<br />      - elasticsearch #kibana在elasticsearch启动之后再启动<br />    links:<br />      - elasticsearch:es #可以用es这个域名访问elasticsearch服务<br />    ports:<br />      - 4560:4560<br />      - 4561:4561<br />      - 4562:4562<br />      - 4563:4563<br />

  安装要点

  docker-compose up -d<br />

  chmod 777 /mydata/elasticsearch/data/<br />

  logstash-plugin install logstash-codec-json_lines<br />

  分场景收集日志

  这里为了方便我们查看日志,提出一个分场景收集日志的概念,把日志分为以下四种。

  Logback配置详解

  要实现上面的分场景收集日志,主要通过Logback的配置来实现,我们先来了解下Logback的配置吧!

  完全配置

  在SpringBoot中,如果我们想要自定义Logback的配置,需要自行编写logback-spring.xml文件,下面是我们这次要使用的完全配置。

  <br /><br /><br />    <br />    <br />    <br />    <br />    <br />    <br />    <br />    <br />    <br />    <br /><br />    <br />    <br />        <br />        <br />            DEBUG<br />        <br />        <br />            <br />            ${FILE_LOG_PATTERN}<br />            UTF-8<br />        <br />        <br />            <br />            ${LOG_FILE_PATH}/debug/${APP_NAME}-%d{yyyy-MM-dd}-%i.log<br />            <br />            ${LOG_FILE_MAX_SIZE:-10MB}<br />            <br />            ${LOG_FILE_MAX_HISTORY:-30}<br />        <br />    <br /><br />    <br />    <br />        <br />        <br />            ERROR<br />            ACCEPT<br />            DENY<br />        <br />        <br />            <br />            ${FILE_LOG_PATTERN}<br />            UTF-8<br />        <br />        <br />            <br />            ${LOG_FILE_PATH}/error/${APP_NAME}-%d{yyyy-MM-dd}-%i.log<br />            <br />            ${LOG_FILE_MAX_SIZE:-10MB}<br />            <br />            ${LOG_FILE_MAX_HISTORY:-30}<br />        <br />    <br /><br />    <br />    <br />        <br />            DEBUG<br />        <br />        ${LOG_STASH_HOST}:4560<br />        <br />            <br />                <br />                    Asia/Shanghai<br />                <br />                <br />                <br />                    <br />                        {<br />                        "project": "mall-tiny",<br />                        "level": "%level",<br />                        "service": "${APP_NAME:-}",<br />                        "pid": "${PID:-}",<br />                        "thread": "%thread",<br />                        "class": "%logger",<br />                        "message": "%message",<br />                        "stack_trace": "%exception{20}"<br />                        }<br />                    <br />                <br />            <br />        <br />        <br />        <br />            <br />                5 minutes<br />            <br />        <br />    <br /><br />    <br />    <br />        <br />            ERROR<br />            ACCEPT<br />            DENY<br />        <br />        ${LOG_STASH_HOST}:4561<br />        <br />            <br />                <br />                    Asia/Shanghai<br />                <br />                <br />                <br />                    <br />                        {<br />                        "project": "mall-tiny",<br />                        "level": "%level",<br />                        "service": "${APP_NAME:-}",<br />                        "pid": "${PID:-}",<br />                        "thread": "%thread",<br />                        "class": "%logger",<br />                        "message": "%message",<br />                        "stack_trace": "%exception{20}"<br />                        }<br />                    <br />                <br />            <br />        <br />        <br />        <br />            <br />                5 minutes<br />            <br />        <br />    <br /><br />    <br />    <br />        ${LOG_STASH_HOST}:4562<br />        <br />            <br />                <br />                    Asia/Shanghai<br />                <br />                <br />                <br />                    <br />                        {<br />                        "project": "mall-tiny",<br />                        "level": "%level",<br />                        "service": "${APP_NAME:-}",<br />                        "pid": "${PID:-}",<br />                        "thread": "%thread",<br />                        "class": "%logger",<br />                        "message": "%message",<br />                        "stack_trace": "%exception{20}"<br />                        }<br />                    <br />                <br />            <br />        <br />        <br />        <br />            <br />                5 minutes<br />            <br />        <br />    <br /><br />    <br />    <br />        ${LOG_STASH_HOST}:4563<br />        <br />            <br />                <br />                    Asia/Shanghai<br />                <br />                <br />                <br />                    <br />                        {<br />                        "project": "mall-tiny",<br />                        "level": "%level",<br />                        "service": "${APP_NAME:-}",<br />                        "class": "%logger",<br />                        "message": "%message"<br />                        }<br />                    <br />                <br />            <br />        <br />        <br />        <br />            <br />                5 minutes<br />            <br />        <br />    <br /><br />    <br />    <br />    <br />    <br />    <br />    <br /><br />    <br />        <br />        <br />        <br />        <br />        <br />    <br /><br />    <br />        <br />    <br /><br />    <br />        <br />    <br /><br />

  配置要点解析使用默认的日志配置

  一般我们不需要自定义控制台输出,可以采用默认配置,具体配置参考console-appender.xml,该文件在spring-boot-${version}.jar下面。

  <br /><br /><br /><br />

  springProperty

  该标签可以从SpringBoot的配置文件中获取配置属性,比如说在不同环境下我们的Logstash服务地址是不一样的,我们就可以把该地址定义在application.yml来使用。

  例如在application-dev.yml中定义了这些属性:

  logstash:<br />  host: localhost<br />

  在logback-spring.xml中就可以直接这样使用:

  <br /><br /><br /><br />

  filter

  在Logback中有两种不同的过滤器,用来过滤日志输出。

  ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志,比如下面的配置将过滤掉所有低于INFO级别的日志。

  <br />    INFO<br /><br />

  LevelFilter:级别过滤器,根据日志级别进行过滤,比如下面的配置将过滤掉所有非ERROR级别的日志。

  <br />    ERROR<br />    ACCEPT<br />    DENY<br /><br />

  appender

  Appender可以用来控制日志的输出形式,主要有下面三种。

  <br /> <br />  ${CONSOLE_LOG_PATTERN}<br /> <br /><br />

  <br /><br />    <br />        <br />        ${LOG_FILE_PATH}/error/${APP_NAME}-%d{yyyy-MM-dd}-%i.log<br />        <br />        ${LOG_FILE_MAX_SIZE:-10MB}<br />        <br />        ${LOG_FILE_MAX_HISTORY:-30}<br />    <br /><br />

  <br /><br />    ${LOG_STASH_HOST}:4561<br />    <br />        <br />            <br />                Asia/Shanghai<br />            <br />            <br />            <br />                <br />                    {<br />                    "project": "mall-tiny",<br />                    "level": "%level",<br />                    "service": "${APP_NAME:-}",<br />                    "pid": "${PID:-}",<br />                    "thread": "%thread",<br />                    "class": "%logger",<br />                    "message": "%message",<br />                    "stack_trace": "%exception{20}"<br />                    }<br />                <br />            <br />        <br />    <br />    <br />    <br />        <br />            5 minutes<br />        <br />    <br /><br />

  logger

  只有配置到logger节点上的appender才会被使用,logger用于配置哪种条件下的日志被打印,root是一种特殊的appender,下面介绍下日志划分的条件。

  控制框架输出日志

  还有一些使用框架内部的日志,DEBUG级别的日志对我们并没有啥用处,都可以设置为了INFO以上级别。

  <br /><br /><br /><br /><br /><br />

  Logstash配置详解

  接下来我们需要配置下Logstash,让它可以分场景收集不同的日志,下面详细介绍下使用到的配置。

  完全配置

  input {<br /> tcp {<br /> mode => "server"<br /> host => "0.0.0.0"<br /> port => 4560<br /> codec => json_lines<br /> type => "debug"<br /> }<br /> tcp {<br /> mode => "server"<br /> host => "0.0.0.0"<br /> port => 4561<br /> codec => json_lines<br /> type => "error"<br /> }<br /> tcp {<br /> mode => "server"<br /> host => "0.0.0.0"<br /> port => 4562<br /> codec => json_lines<br /> type => "business"<br /> }<br /> tcp {<br /> mode => "server"<br /> host => "0.0.0.0"<br /> port => 4563<br /> codec => json_lines<br /> type => "record"<br /> }<br />}<br />filter{<br /> if [type] == "record" {<br /> mutate {<br /> remove_field => "port"<br /> remove_field => "host"<br /> remove_field => "@version"<br /> }<br /> json {<br /> source => "message"<br /> remove_field => ["message"]<br /> }<br /> }<br />}<br />output {<br /> elasticsearch {<br /> hosts => ["es:9200"]<br /> action => "index"<br /> codec => json<br /> index => "mall-tiny-%{type}-%{+YYYY.MM.dd}"<br /> template_name => "mall-tiny"<br /> }<br />}<br />

  配置要点SpringBoot配置

  在SpringBoot中的配置可以直接用来覆盖Logback中的配置,比如logging.level.root就可以覆盖节点中的level配置。

  logstash:<br />  host: localhost<br />logging:<br />  level:<br />    root: debug<br />

  logstash:<br />  host: 192.168.3.101<br />logging:<br />  level:<br />    root: debug<br />

  Kibana进阶使用

  进过上面ELK环境的搭建和配置以后,我们的日志收集系统终于可以用起来了,下面介绍下在Kibana中的使用技巧!

  

  

  

  

  

  

  

  

  项目源码地址

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线