解决方案:你居然还去服务器上捞日志,搭个日志收集系统难道不香么!
优采云 发布时间: 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。