acidborn60
(Konstantin)
December 20, 2018, 2:48pm
1
Здравствуйте!
Развернул filebeat (6.5.2) в кластере kubernetes, логи благополучно отправляются в elasticsearch. Появилось желание поменять название индекса, чтобы в названии был namespace. Внёс изменение в секцию:
output.elasticsearch.index: "%{[kubernetes.namespace]:filebeat}-%{[beat.version]}-%{+yyyy.MM.dd}"
Переразвернул и получил вот такую ошибку:
exiting: setup.template.name and setup.template.pattern have to be set if index name is modified.
добавил вот такую конструкцию в эту же секцию:
setup.template.name: "filebeat-namespace"
setup.template.pattern: "%{[kubernetes.namespace]:filebeat}-%{[beat.version]}-*"
setup.template.enabled: true
Однако легче не стало, тоже сообщение:
Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified.
Под естественно в состоянии Back-off restarting failed container
Подскажите, как задать кастомное название индекса.
Igor_Motov
(Igor Motov)
December 20, 2018, 3:03pm
2
To ecть у вас есть несколько разных kubernetes.namespace
и каждый из них будет переписывать filebeat-namespace
в кластере со своими установками? Я что-то не очень понимаю идею тут.
acidborn60
(Konstantin)
December 20, 2018, 3:18pm
3
Нет, как раз идея в том, чтобы у каждого namespace был свой индекс.
Igor_Motov
(Igor Motov)
December 20, 2018, 4:56pm
4
Это я понимаю - только у вас имя темплейта одно и тоже во всех namespace-ах, а pattern разный. Может, сделать как-нибудь так, чтобы можно было только один template использовать:
output.elasticsearch.index: "%{[kubernetes.namespace]}-filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "filebeat-namespace"
setup.template.pattern: "*-filebeat-%{[beat.version]}-*"
setup.template.enabled: true
acidborn60
(Konstantin)
December 21, 2018, 7:44am
5
Спасибо! Да, можно и так, но проблема сейчас в том, что я не могу развернуть pod в kubernetes. Как только я меняю название индекса и обновляю daemonsets с filebeat, то pod'ы уходят в состояние Back-off restarting failed container, а в логах получаю ошибку:
2018-12-21T07:35:50.690Z ERROR instance/beat.go:800 Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified.
Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified.
Igor_Motov
(Igor Motov)
December 21, 2018, 2:46pm
6
Я не могу это воспроизвести. Поменял установки:
#==================== Elasticsearch template setting ==========================
setup.template:
settings:
index.number_of_shards: 3
name: "filebeat-namespace"
pattern: "*-filebeat-%{[beat.version]}-*"
enabled: true
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
index: "blah-filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
Все прекрастно стартует. Вы не могли бы ваш файл конфигурации прислать?
acidborn60
(Konstantin)
December 21, 2018, 2:54pm
7
Да, пожалуйста:
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: mynamespace
labels:
k8s-app: filebeat
data:
filebeat.yml: |-
filebeat.config:
inputs:
# Mounted `filebeat-inputs` configmap:
path: ${path.config}/inputs.d/*.yml
# Reload inputs configs as they change:
reload.enabled: false
modules:
path: ${path.config}/modules.d/*.yml
# Reload module configs as they change:
reload.enabled: false
# To enable hints based autodiscover, remove `filebeat.config.inputs` configuration and uncomment this:
#filebeat.autodiscover:
# providers:
# - type: kubernetes
# hints.enabled: true
processors:
- add_cloud_metadata:
#cloud.id: ${ELASTIC_CLOUD_ID}
#cloud.auth: ${ELASTIC_CLOUD_AUTH}
output.elasticsearch:
hosts: ["172.22.16.71:9200", "172.22.16.72:9200"]
protocol: https
ssl.certificate_authorities: ["/etc/ssl/certs/root-ca.pem"]
ssl.certificate: "/etc/ssl/certs/project.pem"
ssl.key: "/etc/ssl/certs/project.key"
index: "%{[kubernetes.namespace]}-filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "filebeat-namespace"
setup.template.pattern: "*-filebeat-%{[beat.version]}-*"
setup.template.enabled: true
compression_level: 9
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-inputs
namespace: mynamespace
labels:
k8s-app: filebeat
data:
kubernetes.yml: |-
- type: docker
containers.ids:
- "*"
processors:
- add_kubernetes_metadata:
in_cluster: true
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: filebeat
namespace: mynamespace
labels:
k8s-app: filebeat
spec:
template:
metadata:
labels:
k8s-app: filebeat
spec:
serviceAccountName: filebeat
terminationGracePeriodSeconds: 30
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:6.5.2
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
env:
- name: ELASTICSEARCH_HOST
value: nohave
- name: ELASTICSEARCH_PORT
value: "9200"
- name: ELASTICSEARCH_USERNAME
value: elastic
- name: ELASTICSEARCH_PASSWORD
value: changeme
- name: ELASTIC_CLOUD_ID
value: nohave
- name: ELASTIC_CLOUD_AUTH
value: nohave
securityContext:
runAsUser: 0
# If using Red Hat OpenShift uncomment this:
#privileged: true
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- name: config
mountPath: /etc/filebeat.yml
readOnly: true
subPath: filebeat.yml
- name: inputs
mountPath: /usr/share/filebeat/inputs.d
readOnly: true
- name: data
mountPath: /usr/share/filebeat/data
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumeMounts:
- name: cert
mountPath: /etc/ssl/certs
volumes:
- name: config
configMap:
defaultMode: 0600
name: filebeat-config
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
- name: inputs
configMap:
defaultMode: 0600
name: filebeat-inputs
# data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart
- name: data
hostPath:
path: /var/lib/filebeat-data
type: DirectoryOrCreate
- name: cert
secret:
secretName: elastic-cert
defaultMode: 0600
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: filebeat
subjects:
- kind: ServiceAccount
name: filebeat
namespace: mynamespace
roleRef:
kind: ClusterRole
name: filebeat
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: filebeat
labels:
k8s-app: filebeat
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- namespaces
- pods
verbs:
- get
- watch
- list
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: mynamespace
labels:
k8s-app: filebeat
Igor_Motov
(Igor Motov)
December 21, 2018, 3:02pm
8
output.elasticsearch:
hosts: ["172.22.16.71:9200", "172.22.16.72:9200"]
protocol: https
ssl.certificate_authorities: ["/etc/ssl/certs/root-ca.pem"]
ssl.certificate: "/etc/ssl/certs/project.pem"
ssl.key: "/etc/ssl/certs/project.key"
index: "%{[kubernetes.namespace]}-filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "filebeat-namespace"
setup.template.pattern: "*-filebeat-%{[beat.version]}-*"
setup.template.enabled: true
compression_level: 9
У вас нет пареметра setup.template.name
вы вместо него output.elasticsearch.setup.template.name
добавили. Другими словами, setup.template:
должен быть не в output.elasticsearch
а не том же уровне, как в моем примере.
acidborn60
(Konstantin)
December 21, 2018, 3:22pm
9
Игорь, огромное спасибо! Заработало всё.
system
(system)
Closed
January 18, 2019, 3:22pm
10
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.