我已将 filebeat 设置为 kubernetes 中的守护进程,以将日志从 docker 容器转发到 ES + kibana。(通过引用https://www.elastic.co/guide/en/beats/filebeat/master/running-on-kubernetes.html)并且日志成功转发。
问题是当有多行日志时,它们作为单独的日志行转发到 ES。
这是我在 filebeat-kuberneted.yaml 中配置多行过滤器的部分
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-prospectors
namespace: kube-system
labels:
k8s-app: filebeat
kubernetes.io/cluster-service: "true"
data:
kubernetes.yml: |-
- type: docker
containers.ids:
- "${data.kubernetes.container.id}"
processors:
- add_kubernetes_metadata:
in_cluster: true
multiline:
pattern: '^[[:space:]]'
negate: false
match: after
---
Run Code Online (Sandbox Code Playgroud)
这是我的完整 filebeat-kuberneted.yaml 文件
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: kube-system
labels:
k8s-app: filebeat
kubernetes.io/cluster-service: "true"
data:
filebeat.yml: |-
filebeat.config:
prospectors:
# Mounted `filebeat-prospectors` …
Run Code Online (Sandbox Code Playgroud) 将List转换为varargs以在"builder(String ... s)"方法下调用的更好方法是什么.
builder( stringList.toArray( new String[stringList.size()] ) );//with pre-difined array size
Run Code Online (Sandbox Code Playgroud)
要么
builder( stringList.toArray( new String[0] ) );//without predifined size
Run Code Online (Sandbox Code Playgroud)
例如
void test() {
List<String> stringList = new ArrayList<>();
builder( stringList.toArray( new String[stringList.size()] ) );//call builder method with pre-difining array size
builder( stringList.toArray( new String[0] ) );//call builder method with array size 0
}
void builder( String... s )
{
}
Run Code Online (Sandbox Code Playgroud)
我在评论中遇到了这个问题,我被认为builder( stringList.toArray( new String[0] ) )
比使用更有效builder( stringList.toArray( new String[stringList.size()] ) )
.
这两者之间有显着差异吗?谢谢