Appearance
集群日志集成
使用EFK采集日志
EFK是Elasticsearch + Filebeat + Kafka构建的实时日志采集框架,用于采集微服务架构下各个服务日志,经过kafka后汇总到Elasticsearch,优点是和应用解耦,在k8s环境里面通过filebeat sidecar采集日志。

在气泡鱼平台可以通过添加从容器filebeat来完成日志采集
使用kibana
kibana是Elastic提供的一个分析与可视化平台,可以配合elasticsearch查看实时日志等,
使用longhorn分布式存储采集日志
longhorn是k8s下的分布式存储组件,用于集群中的应用共享存储。
使用longhorn后,需要创建一个多主机读写的PVC, , 所有应用都挂载同一个PVC。 
使用共享存储后需要注意,pod里面的日志文件格式最好是按照Pod Name来生成,以便适配多实例下日志存储。
- Java 类扩展日志输出格式
package gauss.boot.based.config;
import ch.qos.logback.core.PropertyDefinerBase;
import lombok.extern.slf4j.Slf4j;
import java.net.InetAddress;
import java.net.UnknownHostException;
@Slf4j
public class LogbackPropertyDefiner extends PropertyDefinerBase {
@Override
public String getPropertyValue() {
InetAddress inetAddress;
try {
inetAddress = InetAddress.getLocalHost();
return inetAddress.getHostName();
} catch (UnknownHostException e) {
log.error("LogbackPropertyDefiner#getPropertyValue error:{}", e.getMessage(), e);
}
return null;
}
}- 配置日志输出Pod Name/Hostname
xml
<define class="gauss.boot.based.config.LogbackPropertyDefiner" name="hostname"/>
<!-- ff文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>${LOG_HOME}/log.${hostname}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
<!--日志文件最大的大小-->
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</layout>
<charset>UTF-8</charset>
</encoder>
</appender>使用weblog
Weblog是用于下载和查看日志文件的一个应用,可以和longhorn配合使用 
此方案弊端
- 此方案的写入速度远不如本地磁盘,故在大量微服务场景下写入可能会带来性能问题
- Longhorns的share-manager不是高可用的,当share manager发生宕机时,会导致挂载pv的所有POD重启,故该方案存在一定风险。
使用logd集成
logd是k8s上监控主机目录文件变化,然后同步到log collector中,最终集成到气泡鱼。
Logd采用K8S的daemon-set方式部署在每个工作节点,POD通过host path方式挂载的主机目录,一方面可以保证POD的高可用,另外一方面可以通过Logd对容器的日志进行压缩归档,并且将日志的元数据文件上传至气泡鱼平台,从而实现微服务的日志管理。 
