Журналы контейнера Istio Mixer, вызывающие много места на диске - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть кластер EKS с поддержкой Istio, и на моих узлах постоянно не хватает места на диске.

Расчет общего использования диска приводит меня к контейнеру istio-mixer, в котором есть журнал файл с использованием более 50 ГБ дискового пространства всего за 12 дней времени безотказной работы:

[root@ip-some-ip containers]# pwd
/var/lib/docker/containers

[root@ip-some-ip containers]# du -schx .[!.]* * | sort -h | tail -n 10
66M 8bf5e8ee5a03096c589ad8f53b9e1a3d3088ca67b0064f3796e406f00336b532
73M 657eca261461d10c5b1b81ab3078d2058b931a357395903808b0145b617c1662
101M    bb338296ff06ef42ae6177c8a88e63438c26c398a457dc3f5301ffcb4ef2682b
127M    21f2da86055ad76882730abf65d4465386bb85598f797f451e7ad66726243613
134M    9c2be24e8b9345659b6f208c9f2d4650bb1ece11e0c4b0793aa01fdfebadb44e
383M    5d5fdbe6813ddc3ff2f6eb96f62f8317bd73e24730e2f44ebc537367d9987142
419M    475f8dfc74c3df2bc95c47df56e37d1dfb9181fae9aa783dafabba8283023115
592M    9193c50e586e0c7ecaeb87cecd8be13714a5d6ccd6ea63557c034ef56b07772f
52G 9c6b3e4f26603471d0aa9b6a61b3da5a69001e6b9be34432ffa62d577738c149
54G total

[root@ip-192-168-228-194 containers]# du -hs 9c6b3e4*/*.log
52G 9c6b3e4f26603471d0aa9b6a61b3da5a69001e6b9be34432ffa62d577738c149-json.log

[root@ip-ip-some-ip containers]# docker ps -a | grep 9c6b3e4f2660
9c6b3e4f2660        d559bdcd7a88                                                       "/usr/local/bin/mi..."   12 days ago         Up 12 days                                     k8s_mixer_istio-telemetry-6b5579595f-fvm5x_istio-system_6324c262-f3b5-11e8-b615-0eccb0bb4724_0

Мои вопросы:

  • Ожидается ли такой объем вывода журнала?
  • Можно ли уменьшить уровень записи в микшере?Как?Изменение его влияет на мои показатели телеметрии?
  • Есть ли способ настроить журнал "срок хранения"?

Дополнительная информация:

  • Istio v1.0.2 (развернуто с официальными диаграммами управления; нет пользовательских настроек)
  • k8s v1.10.11-eks
  • В кластере работает около 20 модулей, работающих в пространствах имен с поддержкой Istio

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Вот как я решил проблему и некоторую полезную информацию для новых версий Istio.

Istio v1.0.2:

Огромное количество журналов генерировалось Stdioадаптер :

Адаптер stdio позволяет Istio выводить журналы и метрики на локальный компьютер.Журналы и метрики могут быть направлены в стандартный выходной поток микшера, стандартный поток ошибок или в любой локально достижимый файл.

В Istio v1.0.2 этот адаптер был включен по умолчанию ,потоковая передача логов в контейнер Mixer stderr.Чтобы временно решить эту проблему, я удалил следующие правила :

kubectl delete rule stdio --namespace=istio-system
kubectl delete rule stdio-tcp --namespace=istio-system

Удаление этих правил не влияет на метрики Прометея (которые обрабатываются другим адаптером ).

Istio v1.1.0 +:

В этой версии Istio представил опции установки шлема от mixer.adapters.stdio.enabled до , , отключив адаптер stdio по умолчанию , включая следующий комментарий :

# stdio - это адаптер отладки в istio-telemetry, он не рекомендуется для производственного использования.

Изменения были внесены в следующие PR:

0 голосов
/ 13 декабря 2018

Значением по умолчанию для уровня ведения журнала в Mixer является информация.И логи, предоставленные вами, подтверждают, что у вас есть эти настройки.Поэтому в журналах собирается много избыточной информации, и для некоторых источников можно уменьшить уровень ведения журнала.

Вы можете изменить его двумя способами:

  1. На рабочем модуле без перезапуска.

    В ваших журналах вы найдете следующую строку:

    2018-12-12T17:54:55.461261Z info    ControlZ available at 192.168.87.249:9876
    

    Это означает, что в контейнере микшера на порту 9876 вы можете найти IstioВеб-интерфейс ControlZ.Чтобы получить к нему доступ с компьютера с установленным kubectl, необходимо выполнить следующую команду:

    kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l istio=mixer,istio-mixer-type=telemetry -o jsonpath='{.items[0].metadata.name}') 9876:9876 &
    

    После этого в браузере перейдите по ссылке http://localhost:9876/scopez/, и выпоявится следующая панель инструментов, где вы можете изменить уровни журнала:

    enter image description here

  2. Добавьте --log_output_level флаг кistio-telemetry развертывание для контейнера mixer.

    Вот описание флага из документации микшера:

    - log_output_level string
    Минимальный уровень ведения журнала для каждой области, разделенный запятыми, для вывода сообщений в виде:,:, ... где область может быть одним из [адаптеров, API, атрибутов, по умолчанию, grpcAdapter, loadhedding] и уровняможет быть одним из [debug, info, warn, error, none] (по умолчанию «default: info»)

    Обратите внимание, что для ключа --log_output_level attributes:warn,api:error в файле yaml вам необходимо использовать один изследующие:

    • значение - --log_output_level=attributes:warn,api:error или
    • значения - --log_output_level и - attributes:warn,api:error на разных строках

    Пример развертывания:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
      labels:
        chart: mixer-1.0.4
        istio: mixer
        release: istio
      name: istio-telemetry
      namespace: istio-system
    spec:
      progressDeadlineSeconds: 600
      replicas: 2
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: telemetry
          istio: mixer
          istio-mixer-type: telemetry
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
        type: RollingUpdate
      template:
        metadata:
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
            sidecar.istio.io/inject: "false"
          creationTimestamp: null
          labels:
            app: telemetry
            istio: mixer
            istio-mixer-type: telemetry
        spec:
          containers:
          - args:                                                #Flags for the Mixer process
            - --address                                          #Flag on two different lines
            - unix:///sock/mixer.socket
            - --configStoreURL=k8s://                            #Flag with '='
            - --configDefaultNamespace=istio-system
            - --trace_zipkin_url=http://zipkin:9411/api/v1/spans
            - --log_output_level=attributes:warn,api:error       # <------ THIS LINE IS WHAT YOU ARE LOOKING FOR
            env:
            - name: GODEBUG
              value: gctrace=2
            image: docker.io/istio/mixer:1.0.4
            imagePullPolicy: IfNotPresent
            livenessProbe:
              failureThreshold: 3
              httpGet:
                path: /version
                port: 9093
                scheme: HTTP
              initialDelaySeconds: 5
              periodSeconds: 5
              successThreshold: 1
              timeoutSeconds: 1
            name: mixer
            ports:
            - containerPort: 9093
              protocol: TCP
            - containerPort: 42422
              protocol: TCP
            resources:
              requests:
                cpu: 10m
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /sock
              name: uds-socket
          - args:
            - proxy
            - --serviceCluster
            - istio-telemetry
            - --templateFile
            - /etc/istio/proxy/envoy_telemetry.yaml.tmpl
            - --controlPlaneAuthPolicy
            - MUTUAL_TLS
            env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: INSTANCE_IP
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: status.podIP
            image: docker.io/istio/proxyv2:1.0.4
            imagePullPolicy: IfNotPresent
            name: istio-proxy
            ports:
            - containerPort: 15090
              name: http-envoy-prom
              protocol: TCP
            resources:
              requests:
                cpu: 10m
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /etc/certs
              name: istio-certs
              readOnly: true
            - mountPath: /sock
              name: uds-socket
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          serviceAccount: istio-mixer-service-account
          serviceAccountName: istio-mixer-service-account
          terminationGracePeriodSeconds: 30
          volumes:
          - name: istio-certs
            secret:
              defaultMode: 420
              optional: true
              secretName: istio.istio-mixer-service-account
          - emptyDir: {}
            name: uds-socket
    

Кроме того, вы можете настроить ротацию журналов для процесса микширования, используя следующие флаги:

- log_rotate string Путь к необязательному вращающемуся файлу журнала

- log_rotate_max_age int Максимальный возраст в днях файла журнала, после которого файл поворачивается (0 означает отсутствие ограничения) (по умолчанию 30)

- log_rotate_max_backups int Максимальное количество резервных копий файлов журнала, которые должны храниться до удаления более старых файлов (0 означает отсутствие ограничения) (по умолчанию 1000)

- log_rotate_max_size int Максимальный размер в мегабайтахфайл журнала, после которого файл поворачивается (по умолчанию 104857600)

Однако у меня нет возможности создать огромное количество таких журналов и проверить, как это работает.

Ссылки:

К сожалению, официальная документация не очень хороша, но, возможно, она как-то помогает.

И в качестве бонуса здесь это список всехфлаги микшерного сервера.

...