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

优采云 发布时间: 2022-10-19 17:23

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

  ELK日志采集系统进阶使用,本文主要讲解如何创建一个在线环境下真正可用的日志采集系统。有了它,你就可以告别服务器上的日志清理了!

  ELK环境安装

  ELK是指由Elasticsearch、Kibana和Logstash三个服务构建的日志采集系统。具体施工方法请参考。此处仅提供最新版本的 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 />

  配置 gist 解析以使用默认日志记录配置

  一般我们不需要自定义控制台输出,使用默认配置即可。具体配置请参考spring-boot-${version}.jar下的console-appender.xml。

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

  弹簧属性

  

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

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

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

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

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

  筛选

  Logback 中有两个不同的过滤器用于过滤日志输出。

  ThresholdFilter:阈值过滤器,过滤掉低于指定阈值的日志。例如,下面的配置会过滤掉 INFO 级别以下的所有日志。

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

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

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

  附加器

  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 用于配置在何种条件下打印日志。Root 是一个特殊的附加程序。下面介绍日志划分的条件。

  控制框架输出日志

  还有一些使用该框架的日志。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 可以覆盖节点中的级别配置。

  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 />

  logstash:<br />  host: logstash-prod<br />logging:<br />  level:<br />    root: info<br />

  Kibana 的高级使用

  进入上面ELK环境的搭建和配置之后,我们的日志采集系统终于可以使用了。下面来介绍一下 Kibana 中的使用技巧吧!

  项目源码地址

  采集自动组合 厉害:偷偷让机器人帮我干活,被领导发现了,然后……

  据说办公机器人已经问世,是真的吗?

  不,它目前还没有那么聪明。它是一款软件机器人,可以帮助人们完成繁琐重复的计算机操作!

  如:重复查询、复制、粘贴、输入、报表等手工操作软件工作。

  一个自动输入数据的机器人,长这样:

  众所周知,日常工作往往伴随着繁琐重复的电脑操作,将我们变成了工作“机器”。

  人工智能时代来临,怕被机器人取代?

  小编认为,不如敞开心扉,利用新鲜事物,找个机器人助手来帮你工作,让你有更多的空闲时间。

  于是,我悄悄地使用了小邦软件机器人。

  小邦能为我做什么(这里是快板)?

  数据录入、自动下载、定时查询、自动开票、自动对账、监控预警、定时存储……

  直到手变软才需要点击鼠标,减少了很多人工重复的软件操作。小邦软件机器人每天帮我顺利上报数据(见视频)。

  

  直到我变大。

  小邦软件机器人运行,自动上报数据,自动下载报表,自动打印...

  领导来了,我睡着了……

  什么?你问结局?

  猜开头,而不是结尾。

  因为我的数据写完了,报表写完了,文件打印出来了……

  完美运行!领导无话可说。

  领导们还使用了小邦软件机器人。毕竟,没有人愿意浪费时间做乏味和重复性的工作。

  小邦软件机器人能做什么?

  1.重复数据录入

  

  登录系统后,自动获取Excel中的数据,将信息一一录入系统。

  2.数据批处理采集

  网页或系统中的数据无法下载,必须手动一一获取。小邦自动采集指定数据,整理汇总成Excel表格。

  3. 自动开票

  获取开票申请表,自动采集开票所需数据,写入开票系统,完成自动打印。

  4.自动数据监控

  根据预设规则,监控信息更新、变化、异常等情况,并及时提醒。

  5.自动下载文件

  定期自动登录各系统,下载指定期间的所有报表文件(如银行收据),并按要求存储。

  6、其他操作

  打印、自动存储、自动关机、点击菜单等繁琐的电脑操作。

  上面的操作也可以组合起来,比如数据从软件A采集后,写入软件B。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线