fluent-bit operator资源介绍
fluent-bit很好的与k8s融合,离不开本身的设计。fluent-bit采用配置插件的方式对输入、过滤、分析、输出进行实现,这使得与k8s集成时,只需要采用configmap(crd中使用的secret)就可以完成原有的功能。
在fluent-bit operator(接下来简称fbo)中并没有直接使用k8s原生配置资源,而是使用了自定义CRD,接下来让我们一一分析。
fbo日志配置资源讲解
Input
每个插件对应一种日志收集功能。
type InputSpec struct {
Alias string json:"alias,omitempty"
Dummy *input.Dummy json:"dummy,omitempty"
Tail *input.Tail json:"tail,omitempty"
Systemd *input.Systemd json:"systemd,omitempty"
}
type Tail struct {
BufferChunkSize string `json:"bufferChunkSize,omitempty"`
BufferMaxSize string `json:"bufferMaxSize,omitempty"`
Path string `json:"path,omitempty"`
ExcludePath string `json:"excludePath,omitempty"`
RefreshIntervalSeconds *int64 `json:"refreshIntervalSeconds,omitempty"`
RotateWaitSeconds *int64 `json:"rotateWaitSeconds,omitempty"`
IgnoreOlder string `json:"ignoredOlder,omitempty"`
SkipLongLines *bool `json:"skipLongLines,omitempty"`
DB string `json:"db,omitempty"`
MemBufLimit string `json:"memBufLimit,omitempty"`
Parser string `json:"parser,omitempty"`
Key string `json:"key,omitempty"`
Tag string `json:"tag,omitempty"`
}
Parser解析器
对input传来的日志记录进行解析格式化。
type Regex struct {
Regex string `json:"regex,omitempty"`
TimeKey string `json:"timeKey,omitempty"`
TimeFormat string `json:"timeFormat,omitempty"`
TimeKeep *bool `json:"timeKeep,omitempty"`
Types string `json:"types,omitempty"`
}
Filter
过滤日志的功能
具体参数
type FilterSpec struct {
Match string `json:"match,omitempty"`
MatchRegex string `json:"matchRegex,omitempty"`
FilterItems []FilterItem `json:"filters,omitempty"`
}
type FilterItem struct {
Kubernetes *filter.Kubernetes
}
type Kubernetes struct {
BufferSize string `json:"bufferSize,omitempty"`
KubeURL string `json:"kubeURL,omitempty"`
KubeCAFile string `json:"kubeCAFile,omitempty"`
KubeCAPath string `json:"kubeCAPath,omitempty"`
KubeTokenFile string `json:"kubeTokenFile,omitempty"`
KubeTagPrefix string `json:"kubeTagPrefix,omitempty"`
MergeLog *bool `json:"mergeLog,omitempty"`
MergeLogKey string `json:"mergeLogKey,omitempty"`
MergeLogTrim *bool `json:"mergeLogTrim,omitempty"`
MergeParser string `json:"mergeParser,omitempty"`
KeepLog *bool `json:"keepLog,omitempty"`
TLSDebug *int32 `json:"tlsDebug,omitempty"`
TLSVerify *bool `json:"tlsVerify,omitempty"`
UseJournal *bool `json:"useJournal,omitempty"`
RegexParser string `json:"regexParser,omitempty"`
K8SLoggingParser *bool `json:"k8sLoggingParser,omitempty"`
K8SLoggingExclude *bool `json:"k8sLoggingExclude,omitempty"`
Labels *bool `json:"labels,omitempty"`
Annotations *bool `json:"annotations,omitempty"`
KubeMetaPreloadCacheDir string `json:"kubeMetaPreloadCacheDir,omitempty"`
}
OutPut
将日志记录输出给指定的存储介质,比如发送给els
type Elasticsearch struct {
Host string `json:"host,omitempty"`
Port *int32 `json:"port,omitempty"`
Path string `json:"path,omitempty"`
BufferSize string `json:"bufferSize,omitempty"`
CloudID string `json:"cloudID,omitempty"`
CloudAuth string `json:"cloudAuth,omitempty"`
HTTPUser *plugins.Secret `json:"httpUser,omitempty"`
HTTPPasswd *plugins.Secret `json:"httpPassword,omitempty"`
Index string `json:"index,omitempty"`
Type string `json:"type,omitempty"`
LogstashFormat *bool `json:"logstashFormat,omitempty"`
LogstashPrefix string `json:"logstashPrefix,omitempty"`
LogstashDateFormat string `json:"logstashDateFormat,omitempty"`
TimeKey string `json:"timeKey,omitempty"`
TimeKeyFormat string `json:"timeKeyFormat,omitempty"`
IncludeTagKey *bool `json:"includeTagKey,omitempty"`
TagKey string `json:"tagKey,omitempty"`
TraceOutput *bool `json:"traceOutput,omitempty"`
`json:"currentTimeIndex,omitempty"`
LogstashPrefixKey string
}
fbo系统资源
FluentBit
部署fbo-Controller与fbo-Watcher(类似于deployment)。
type FluentBitSpec struct {
Image string `json:"image,omitempty"`
Args []string `json:"args,omitempty"`
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
PositionDB corev1.VolumeSource `json:"positionDB,omitempty"`
ContainerLogRealPath string `json:"containerLogRealPath,omitempty"`
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
FluentBitConfigName string `json:"fluentBitConfigName,omitempty"`
}
FluentBitConfig
用于FluentBit系统配置
在FluentBitConfig中,程序会根据InputSelector,FilterSelector,OutputSelector,ParserSelector获取相对应的crd资源,然后根据crd资源创建Secret。
fluentbit通过watcher对本地的input,filter,output,parser进行监听,如果其中有变动,会结束fluentbit程序,然后进行重启来达到热部署工作。
type FluentBitConfigSpec struct {
Service *Service `json:"service,omitempty"`
InputSelector metav1.LabelSelector `json:"inputSelector,omitempty"`
FilterSelector metav1.LabelSelector `json:"filterSelector,omitempty"`
OutputSelector metav1.LabelSelector `json:"outputSelector,omitempty"`
ParserSelector metav1.LabelSelector `json:"parserSelector,omitempty"`
}
type Service struct {
Daemon *bool `json:"daemon,omitempty"`
FlushSeconds *int64 `json:"flushSeconds,omitempty"`
LogFile string `json:"logFile,omitempty"`
LogLevel string `json:"logLevel,omitempty"`
ParsersFile string `json:"parsersFile,omitempty"`
}
|