7 Registro
Puede utilizar Oracle Cloud Infrastructure (OCI) o herramientas externas para configurar el registro persistente para Oracle Blockchain Platform Enterprise Edition.
- Registro persistente con OCI
- Registro persistente con herramientas externas
- Definición del nivel de log para pods de operador
Descripción general
Oracle Blockchain Platform Enterprise Edition se basa en Kubernetes, donde los logs se almacenan localmente en cada pod. Para evitar que se supriman logs cuando se suprime un pod, debe configurar el registro persistente, donde los logs se almacenan en una ubicación central. Hay dos métodos que puede utilizar para el registro persistente. Puede utilizar una herramienta de registro externa, como Fluentd y Elastic Stack. Como alternativa, si se ejecuta en Oracle Kubernetes Engine, puede utilizar la solución de registro centralizado soportada por Oracle Cloud Infrastructure (OCI).
Registro persistente con OCI
Para almacenar logs de forma centralizada mediante OCI, defina grupos de logs y configure agentes para analizar los logs. Los logs se almacenan en el servicio Object Storage. Antes de configurar el registro persistente con OCI, el despliegue debe cumplir los siguientes requisitos.- Grupo dinámico en el compartimento de Kubernetes. Para crear un grupo dinámico, haga clic en Identity & Security en el menú de navegación. En Identidad, haga clic en Dominios y, a continuación, en Crear grupo dinámico. Agregue lo siguiente al grupo dinámico en la sección Reglas de coincidencia, sustituyendo el ID de Oracle Cloud por el compartimento.
Por ejemplo:instance.compartment.id = '<compartment_ocid>'
instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa4ws3242343243244nyb423432rwqsxigt2sia'
- Política que permite al grupo dinámico interactuar con el servicio de registro. Para crear una política, haga clic en Identidad y seguridad en el menú de navegación. En Identidad, haga clic en Políticas y, a continuación, en Crear política.
Por ejemplo:Allow dynamic-group <my-group> to use log-content in compartment <target_compartment_name>
Allow dynamic-group okelogging to use log-content in compartment BlockchainTeam
- Haga clic en el icono de menú de la esquina superior izquierda, busque log y, a continuación, seleccione Logs.
- Crear un grupo de logs. En Registro, seleccione Grupos de logs y, a continuación, haga clic en Crear grupo de logs.
- Cree un log personalizado. En Registro, seleccione Logs y, a continuación, haga clic en Crear log personalizado para abrir el asistente Crear log personalizado. Seleccione el grupo de logs que ha creado anteriormente.
- En la segunda página del asistente Crear log personalizado, cree una configuración de agente para el log personalizado, especificando el compartimento de Kubernetes y el grupo dinámico.
- En la sección Configurar Entradas de Log de la página Configuración de Agente, configure la entrada de log para que el agente utilice la siguiente ruta de archivo, que es el valor por defecto para los contenedores de aplicación. Seleccione Ruta de log en la lista Tipo de entrada. Introduzca la siguiente ruta de acceso para Rutas de acceso de archivo. Esta ruta incluye todos los logs de contenedor, incluidos los contenedores del sistema y de servicio.
/var/log/pods/*/*/*.log
- Espere hasta que se ingieran los logs. Normalmente, los logs se ingieren en 3-5 minutos.
- Seleccione Logs y, a continuación, navegue al log personalizado y haga clic en Explorar log. Puede analizar, analizar y filtrar los logs.
- También puede utilizar OCI para almacenar los logs en el servicio Object Storage.
- Crear Conector. En Registro, seleccione Conectores y, a continuación, haga clic en Crear conector. Seleccione Registro como Origen y Almacenamiento de objetos como Destino.
- Configure el origen y el destino según sea necesario.
- En la sección Activar logs, defina Activar log en Activado para el conector que ha creado. Se muestra el panel Crear log, con un valor por defecto para el tiempo de retención de log.
- Espere hasta que se ingieran los logs. Normalmente, los logs se ingieren en 3-5 minutos. A continuación, puede ver las operaciones de lectura y escritura en los logs del conector. Los logs se están escribiendo en el servicio Object Storage.
Para obtener más información, consulte Supervisión de clusters de Kubernetes y OKE con OCI Logging Analytics.
Registro persistente con herramientas externas
- Cree un espacio de nombres de Kubernetes denominado
fluentd
. - Utilice el siguiente comando para crear un recurso de control de acceso basado en roles.
Utilice el siguiente archivokubectl create -f fluentd-rbac.yaml -n fluentd
fluentd-rbac.yaml
con el comando.apiVersion: v1 kind: ServiceAccount metadata: name: fluentd namespace: fluentd --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentd namespace: fluentd rules: - apiGroups: - "" resources: - pods - namespaces verbs: - get - list - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd roleRef: kind: ClusterRole name: fluentd apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount name: fluentd namespace: fluentd
- Utilice el siguiente comando para crear un objeto
ConfigMap
para Fluentd o Elastic Stack.
Utilice el siguiente archivokubectl create -f fluentd-configmap_removefilter_ascii.yaml -n fluentd
fluentd-configmap_removefilter_ascii.yaml
con el comando.En el siguiente archivo, elimine el signo de número (#) para quitar el comentario de solo una de las siguientes líneas.- Elimine el comentario de
@include file-fluent.conf
si está escribiendo en un archivo en la ruta de acceso/tmp/obp.log
. - Elimine el comentario de
@include elastic-fluent.conf
si está escribiendo en Elasticsearch.
/tmp/obp.log
.apiVersion: v1 kind: ConfigMap metadata: name: fluentd-config namespace: fluentd data: fluent.conf: |- ################################################################ # This source gets all logs from local docker host #@include pods-kind-fluent.conf #@include pods-fluent.conf @include pods-nofilter.conf @include file-fluent.conf #@include elastic-fluent.conf pods-nofilter.conf: |- <source> @type tail path /var/log/containers/*.log format //^(?<time>.+) (?<stream>stdout|stderr) (?<logtag>.)? (?<log>.*)$/ / pos_file /var/log/fluentd-containers.log.pos tag kubernetes.* read_from_head true </source> <filter kubernetes.**> @type kubernetes_metadata </filter> file-fluent.conf: |- <match kubernetes.var.log.containers.**fluentd**.log> @type null </match> <match kubernetes.var.log.containers.**kube-system**.log> @type null </match> <match kubernetes.**> @type file path /tmp/obp.log </match> elastic-fluent.conf: |- <match kubernetes.var.log.containers.**fluentd**.log> @type null </match> <match kubernetes.var.log.containers.**kube-system**.log> @type null </match> <match kubernetes.**> @type elasticsearch host "#{ENV['FLUENT_ELASTICSEARCH_HOST'] || 'elasticsearch.elastic-kibana'}" port "#{ENV['FLUENT_ELASTICSEARCH_PORT'] || '9200'}" index_name fluentd-k8s-3 type_name fluentd include_timestamp true </match>
- Elimine el comentario de
- Utilice el siguiente comando para crear un objeto
DaemonSet
para Fluentd. Este comando crea un pod Fluentd en cada nodo.
Utilice el siguiente archivokubectl create -f fluentd.yaml -n fluentd
fluentd.yaml
con el comando.
Los logs de Oracle Blockchain Platform están disponibles en el directorioapiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: fluentd labels: k8s-app: fluentd-logging version: v1 spec: selector: matchLabels: k8s-app: fluentd-logging version: v1 template: metadata: labels: k8s-app: fluentd-logging version: v1 spec: serviceAccount: fluentd serviceAccountName: fluentd tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule - key: node-role.kubernetes.io/control-plane effect: NoSchedule containers: - name: fluentd1 imagePullPolicy: "Always" image: fluent/fluentd-kubernetes-daemonset:v1.16.2-debian-elasticsearch7-1.1 env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch.elastic-kibana" - name: FLUENT_ELASTICSEARCH_PORT value: "9200" resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: fluentd-config mountPath: /fluentd/etc - name: logs mountPath: /tmp - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: fluentd-config configMap: name: fluentd-config - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: logs hostPath: path: /tmp
/tmp
del pod Fluentd o en el nodo de Kubernetes. - Para enviar los logs a Elastic Stack, cree un espacio de nombres de Kubernetes denominado
elastic-kibana
. - Utilice el siguiente comando para crear un despliegue para Elastic Stack y exponerlo como un servicio.
Utilice el siguiente archivokubectl create -f elastic.yaml -n elastic-kibana
elastic.yaml
con el comando.apiVersion: v1 kind: Namespace metadata: name: elastic-kibana --- apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch namespace: elastic-kibana labels: app: elasticsearch spec: selector: matchLabels: app: elasticsearch replicas: 1 template: metadata: labels: app: elasticsearch spec: initContainers: - name: vm-max-fix image: busybox command: ["sysctl", "-w", "vm.max_map_count=262144"] securityContext: privileged: true containers: - name: elasticsearch image: elasticsearch:7.9.1 imagePullPolicy: IfNotPresent ports: - containerPort: 9200 env: - name: node.name value: "elasticsearch" - name: cluster.initial_master_nodes value: "elasticsearch" - name: bootstrap.memory_lock value: "false" - name: ES_JAVA_OPTS value: "-Xms512m -Xmx512m" --- apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: elastic-kibana labels: app: elasticsearch spec: type: ClusterIP selector: app: elasticsearch ports: - protocol: TCP name: http port: 9200 targetPort: 9200
- A continuación, puede utilizar los siguientes comandos para examinar los datos de log en el índice de Elasticsearch.
curl -X GET "localhost:9200/_cat/indices/fluentd-k8s-*?v=true&s=index&pretty" curl -X GET "localhost:9200/fluentd-k8s-3/_search?pretty=true"
- También puede utilizar Fluentd para almacenar el log en el volumen en bloque local en cada nodo.
- Cree un volumen en bloque para cada nodo, asocie el volumen y cree un directorio denominado
/u01
. - Formatear el volumen en bloque asociado para el sistema de archivos ext4.
- Monte el directorio
/u01
en la ruta del dispositivo. - Cambie el archivo de despliegue de Fluentd (
fluentd.yaml
) para que el volumen de logs sea/u01
, no/tmp
, como se muestra en el siguiente fragmento.- name: logs hostPath: path: /u01
- Ejecute el siguiente comando para aplicar el despliegue de Fluentd.
kubectl apply -f fluentd.yaml -n fluentd
- Los logs ahora están visibles en el directorio /u01 de cada nodo.
- Cree un volumen en bloque para cada nodo, asocie el volumen y cree un directorio denominado
Definición del nivel de log para pods de operador
Puede definir el nivel de log para los pods hlf-operator
y obp-operator
. Los pasos para definir el nivel de log son diferentes en función de si Oracle Blockchain Platform está instalado. Si Oracle Blockchain Platform Enterprise Edition aún no está instalado, realice los siguientes pasos.
- Abra el archivo
deployment.yaml
correspondiente para editar. El archivo para el podhlf-operator
se encuentra en la siguiente ubicación:
El archivo para el poddistribution_package_location/distribution-package/operators/helmcharts/hlf-operator/templates/deployment.yaml
obp-operator
se encuentra en la siguiente ubicación:distribution_package_location/distribution-package/operators/helmcharts/obp-operator/templates/deployment.yaml
- Agregue la siguiente línea al archivo. Como se muestra en el comentario, puede definir el nivel de log en
debug
,info
oerror
. En el siguiente ejemplo, el nivel de log se define eninfo
.--zap-log-level=info # debug, info, error
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, error
Si Oracle Blockchain Platform ya está instalado, complete el siguiente paso.
- Utilice los siguientes comandos para editar las definiciones de despliegue para los pods
hlf-operator
yobp-operator
. Agregue o actualice el argumento que configura el nivel de log para el contenedormanager
en la especificación de plantilla de pod.kubectl edit deployment -n obp-cp obp-operator kubectl edit deployment -n obp-cp hlf-operator-controller-manager
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, error