#kubernetes #google-cloud-platform #fluent #google-kubernetes-engine
#kubernetes #google-облачная платформа #свободно #google-kubernetes-engine
Вопрос:
Я запускаю новые модули своей системы в Google-Container-Engine. Я хотел бы перенести stdout и stderr из них (работающих в модулях) в мой централизованный logstash. Есть ли простой способ пересылать журналы из модулей во внешнюю службу ведения журнала, например, logstash или elasticsearch?
Ответ №1:
Я решил войти непосредственно в elasticsearch, внешнюю виртуальную машину, к которой можно получить доступ elasticsearch.c.my-project.internal
(я на Google-Cloud-Platform). Это довольно просто:
-
Настройте внешний сервис с именем: elasticsearch, который указывает на экземпляр elasticsearch:
apiVersion: v1 kind: Service metadata: name: elasticsearch-logging namespace: kube-system labels: k8s-app: elasticsearch kubernetes.io/name: "elasticsearch" spec: type: ExternalName externalName: elasticsearch.c.my-project.internal ports: - port: 9200 targetPort: 9200
-
Разверните fluentd-elasticsearch как набор деамонов. fluentd-elasticsearch автоматически подключится к службе с именем
elasticsearch-logging
(на основе определения развертывания fluentd-elasticsearch :apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: tier: monitoring app: fluentd-logging k8s-app: fluentd-logging spec: template: metadata: labels: name: fluentd-elasticsearch spec: containers: - name: fluentd-elasticsearch image: gcr.io/google_containers/fluentd-elasticsearch:1.19 volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
Используется kubectl logs fluentd-elasticsearch-...
для проверки, удалось ли вам подключиться к экземпляру elasticsearach.
- Теперь вы можете получить доступ к kibana и просмотреть журналы.
Комментарии:
1. У меня есть внешний экземпляр elsatic, с которым можно связаться по адресу: xxxxxxxxxx.us-central1.gcp.cloud.es.io:9243 пароль: ггггггг есть ли способ настроить службу для входа в указанный выше экземпляр с паролем?
Ответ №2:
вы можете создать приемник для входа в stack-driver
pub-sub
журналы, а затем использовать logstash-input-google_pubsub
плагин, который экспортирует все журналы в elastic, используя logstash-input-Изображение google_pubsub, см. Исходный код
экспорт журналов в pub-sub
-
создайте тему и подписку в pubsub следуйте инструкциям здесь
-
на странице просмотра журналов нажмите
create export
, убедитесь, что вы отфильтрованы по журналам вашего приложения (GKE Container -> cluster-name, app-name), введите имя приемника, выберите Cloud Pubsub в качестве службы приемника, теперь выберите свою тему в пункте назначения приемника.
журналы с этого момента и далее экспортируются в pub-sub
настройка конвейера logstash
вот pubsub-elastic.conf
файл:
input {
google_pubsub {
project_id => "my-gcloud-project-id"
topic => "elastic-pubsub-test"
subscription => "elastic-pubsub-test"
json_key_file => "/etc/logstash/gcloud-service-account-key.json"
}
}
output {
elasticsearch {
hosts => "https://example.us-east-1.aws.found.io:9243"
user => "elastic"
password => "mypassword"
}
}
вот мой файл Docker:
FROM sphereio/logstash-input-google_pubsub
# Logstash config
COPY gcloud-service-account-key.json /etc/logstash/gcloud-service-account-key.json
COPY config /etc/logstash/conf.d
COPY logstash.yml /etc/logstash/logstash.yml
теперь вы должны создать образ и запустить
если вы работаете в kubernetes, используйте следующее:
вот deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: logstash-input-google-pubsub
spec:
replicas: 1
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: logstash-input-google-pubsub
spec:
containers:
- name: logstash-input-google-pubsub
image: us.gcr.io/my-gcloud-project-id/logstash-input-google_pubsub:1.0.0
создайте свой образ и нажмите на реестр
docker build --rm -t us.gcr.io/my-gcloud-project-id/logstash-input-google_pubsub:1.0.0 .
gcloud docker -- push us.gcr.io/my-gcloud-project-id/logstash-input-google_pubsub:1.0.0
теперь создайте экземпляр kubectl create -f deployment.yaml
готово!!
Ответ №3:
начиная с elasticsearch 6.00, вы можете использовать filebeats
см. Блог
Загрузите манифест Filebeat DaemonSet
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.0/deploy/kubernetes/filebeat-kubernetes.yaml
Обновите сведения о подключении к Elasticsearch
- name: ELASTICSEARCH_HOST
value: elasticsearch
- name: ELASTICSEARCH_PORT
value: "9200"
- name: ELASTICSEARCH_USERNAME
value: elastic
- name: ELASTICSEARCH_PASSWORD
value: changeme
Разверните его в Kubernetes
kubectl create -f filebeat-kubernetes.yaml
Ответ №4:
Вы можете попробовать установить следующее дополнение kubernetes: https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
Сам не пробовал, но я также ищу правильное ведение журнала. Ведение журнала GCE каким-то образом ограничено, на мой взгляд.