开发者学堂课程【Elasticsearch 实战进阶营:实操讲解:微服务运行日志采集(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/899/detail/14319
实操讲解:微服务运行日志采集(一)
Filebeat;微服务运行日志实时采集
在整个 elastic stack 技术站里面,File beat 现在已经成为日志文本采集的一个桥头堡吧,相比原有的 Linux 要清洁很多,而且运行速度快很多,而且,集成的更加优秀,可能在这块也有会遇到想用这个 note 的,本身阿元有事做采集非常好,但是他这个功能复杂,然后运行效率这方面不的这个 go 语言编写的 VB 的,所以现在 Linux 已经成为了这个领域的。
首先之前把日志打印到文本机里面,默认使用 logback.spring.xml
logback.的配置
(?xml version-"1.0" encoding- "UTF-8" ?》
<configuration debug- "true" >
<property name - TApp. Mame" value-”servere1" 12
<contextName>${App_ Name}</contextName>
<springProfile name= "default" >
<property nane-"logging.path" value= "1og-file" />
</springProfile>
<appender name "Info" class-"ch. qos . logback. core .rolling . RollingFileAppender">
<filter class="ch.qos. logback. classic.filter. LevelFilter">
<level>INF0</level>
<onMatch>ACCEPT</onMatch>
4onMi snatch>DENY</ onMi smatch>
</filter>conMatch>ACCEPT</ 配置日志错误通过 arrey 来处理
<File>${logging . path}/${App_ Nane}/info. log</File>
这个
APP-Nane
,就是配了一个属性应用程序名字。
假设我们的服务器上部署这个微服务的时候,那希望把很多日志写在同一个,目录夹是一样的,应用程序名字不一样就可以做一个区分做一个区分。
<rollingPolicy class-"ch. qos。logback . core . roll ing. T imeBasedRollingPolicy">
<FlleNamePattern>${1ogging . path}/${App. Name}/info . log .%d[{yyy -M dd}</FlleNamePattern>
<MaxHistory>7</MaxHistory>
</rollingPolicy>
<encoder class=" ch.qos. logback.classic。encoder. Patt ernL ayout Encoder" >
<pattern>%dy{yyy-M-dd Hh:m:ss.5SS} [%-5leve1] [%thread] %logger{36} 一%nsg%n</pattern>
</encoder>
</ appender>
<appender nane "InfoJson" class="ch . qos. logback . core . rolling ,RollingFileAppender
<filter class- "ch.qos.logback. classic.fllter. LevelFllter">
<level>INFO</level>
conMatch>ACCEPT</onMatchx
<springProf ile name="default" >
<property nane-" logging.path" value="1og-file" 1>
</springProfilex
它都能自动的扩展它的索引结构。
”thread":" %t hread".
”message :° Xmessage"
</ pattern>
</pattern>
</ providers>
</encoder>
</ appender>
<appender name-" Error”class-" ch. qos . logback. core . rolling . RollingF ileAppender >
<filter class="ch.qos .logback . classic,filter.LevelFilter">
<leve1>ERROR</level>
conMatch>ACCEPT</onMatch
<onMi smatch>DENY</onMi smatch>
产生 jenth 不会占太多内存对日志文本采集影响不大,用中心化日志采集不会浪费跟多的资源
</filter>
<File>${logging . path}/${App_ Nane }/error. log</File>
<rollingPolicy class=" ch.qos Jogback . core . rolling,TimeBasedRollingPollcy">
<FlleNamePattern>${logg1ng . path}/${App_ Name}/error . log .x{yyyy -MM-dd}</FlleNamePattern>
<MaxHistory>7</MaxHistory>
如果输出 jenthe 的时候可以直接用(LoggingEventCompostte I sonE ncode r)去替代
</rollingPolicy>
<encoder class= ”ch. qos,logback.classic。encoder . Patternt ayoutEncoder" >
<pattern%yyy-M-dd HH:ms5s555} [%-5level] [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</ appender>
<logger name =”com Bupacedy . springclouddemg" level="info, error">
<appender-ref ref= "Info" />-->
< appender-ref ref- ”Info3son" 1:
< appender-ref ref- ”Error”/)
</logger>
<appender name "Info" class- "ch.qos。logback,core .rolling . RollingF ileAppender">
<filter class="ch.qos. logback .classic.filter.LevelFilter">
<level>INF0</level>
<onMatch>ACCEPT</onMatch>
<onMi smatch>DENY</onMi smatch>
</filter>
<File>${logging .path}/S{App. Nane》/ info. log</File>
<rollingPolicy class="ch. qos . logback . core . rolling,TimeBasedRollingPollcy">
<F ileNamePattern>${1ogging . path}/${App. Nane}/ info. log .%d{yyy - M dd}</FlleNamePattern>
<MaxHistory>7</MaxHistory>
</rollingPolicy>
<encoder class= ”ch. qos . logback .classic . encoder . PatternL ayoutEncoder">
<patetrn%dyyy-M-dd HH:m:ss55S} [%- 5level] [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</ appender>
<appender nane "InfoJson" class="ch . qos. logback . core . rolling ,RollingFileAppender">
<fllter class="ch .qos .1ogback.classic .fllter.LevelFllter">
<level>INFO</1evel>
<onMatch>ACCEPT</onMatch>
configuration》 springProfile
日志采集
格式是标准的微服务格式
@RestController
public class HomeController {
private Logger logger - LoggerFactory .getLogger(this. getClass());
@RequestMapping( "/”)
public ResponseEntity<String> Home() {
ResponseEntity<string> resultEntity=new ResponseEntity<w>( code 200, msg; "ok”, data: "Hello Api");
logger. info(resultEntity . getData());
logger . error( "servere1 error" );
return resultEntity;
日志过多需要一个中性化平台去处理和采集