7 Logging
Sie können Oracle Cloud Infrastructure (OCI) oder externe Tools verwenden, um das persistente Logging für Oracle Blockchain Platform Enterprise Edition zu konfigurieren.
- Persistentes Logging mit OCI
- Persistentes Logging mit externen Tools
- Logebene für Operatorpods festlegen
Überblick
Oracle Blockchain Platform Enterprise Edition basiert auf Kubernetes, in dem Logs lokal auf jedem Pod gespeichert werden. Um zu verhindern, dass Logs gelöscht werden, wenn ein Pod gelöscht wird, müssen Sie persistentes Logging einrichten, in dem Logs an einem zentralen Speicherort gespeichert werden. Es gibt zwei Methoden für das persistente Logging. Sie können ein externes Logging-Tool wie Fluentd und Elastic Stack verwenden. Alternativ können Sie die zentralisierte Logginglösung verwenden, die von Oracle Cloud Infrastructure (OCI) unterstützt wird, wenn Sie auf Oracle Kubernetes Engine ausführen.
Persistentes Logging mit OCI
Um Logs zentral mit OCI zu speichern, definieren Sie Loggruppen und konfigurieren Agents zum Parsen der Logs. Die Logs werden im Object Storage-Service gespeichert. Bevor Sie das persistente Logging mit OCI konfigurieren, muss Ihr Deployment die folgenden Anforderungen erfüllen.- Eine dynamische Gruppe im Kubernetes-Compartment. Um eine dynamische Gruppe zu erstellen, klicken Sie im Navigationsmenü auf Identität und Sicherheit. Klicken Sie unter Identität auf Domains und dann auf Dynamische Gruppe erstellen. Fügen Sie der dynamischen Gruppe im Abschnitt Abgleichsregeln Folgendes hinzu, und ersetzen Sie die Oracle Cloud-ID für Ihr Compartment.
Beispiel:instance.compartment.id = '<compartment_ocid>'instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa4ws3242343243244nyb423432rwqsxigt2sia' - Eine Policy, mit der die dynamische Gruppe mit dem Logging-Service interagieren kann. Um eine Policy zu erstellen, klicken Sie im Navigationsmenü auf Identität und Sicherheit. Klicken Sie unter Identität auf Policys und dann auf Policy erstellen.
Beispiel: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
- Klicken Sie auf das Menüsymbol in der oberen linken Ecke, suchen Sie nach log, und wählen Sie Logs aus.
- Erstellen Sie eine Loggruppe. Wählen Sie unter Logging die Option Loggruppen aus, und klicken Sie auf Loggruppe erstellen.
- Benutzerdefiniertes Log erstellen. Wählen Sie unter Logging die Option Logs aus, und klicken Sie auf Benutzerdefiniertes Log erstellen, um den Assistenten Benutzerdefiniertes Log erstellen zu öffnen. Wählen Sie die zuvor erstellte Loggruppe aus.
- Erstellen Sie auf der zweiten Seite des Assistenten Benutzerdefiniertes Log erstellen eine Agent-Konfiguration für das benutzerdefinierte Log, und geben Sie das Kubernetes-Compartment und die dynamische Gruppe an.
- Konfigurieren Sie im Abschnitt Logeingaben konfigurieren der Seite Agent-Konfiguration die Logeingabe für den Agent so, dass der folgende Dateipfad verwendet wird, der standardmäßig für Anwendungscontainer verwendet wird. Wählen Sie Logpfad aus der Liste Eingabetyp. Geben Sie den folgenden Dateipfad für Dateipfade ein. Dieser Pfad umfasst alle Containerprotokolle, einschließlich System- und Servicecontainer.
/var/log/pods/*/*/*.log - Warten Sie, bis Logs aufgenommen wurden. In der Regel werden Logs in 3-5 Minuten aufgenommen.
- Wählen Sie Logs aus, navigieren Sie zum benutzerdefinierten Log, und klicken Sie auf Log explorieren. Sie können die Logs analysieren, parsen und filtern.
- Sie können die Logs auch mit OCI im Object Storage-Service speichern.
- Connector erstellen. Wählen Sie unter Logging die Option Connectors aus, und klicken Sie auf Connector erstellen. Wählen Sie Logging als Quelle und Object Storage als Ziel aus.
- Konfigurieren Sie Quelle und Ziel nach Bedarf.
- Setzen Sie im Abschnitt Logs aktivieren für den erstellten Connector die Option Log aktivieren auf Aktiviert. Der Bereich Log erstellen wird mit einem Standardwert für die Logaufbewahrungszeit angezeigt.
- Warten Sie, bis Logs aufgenommen wurden. In der Regel werden Logs in 3-5 Minuten aufgenommen. Anschließend werden die Lese- und Schreibvorgänge in den Connector-Logs angezeigt. Logs werden jetzt in den Object Storage-Service geschrieben.
Weitere Informationen finden Sie unter Kubernetes- und OKE-Cluster mit OCI Logging Analytics überwachen.
Persistentes Logging mit externen Tools
- Erstellen Sie einen Kubernetes-Namespace mit dem Namen
fluentd. - Mit dem folgenden Befehl können Sie eine rollenbasierte Zugriffskontrollressource erstellen.
Verwenden Sie die folgendekubectl create -f fluentd-rbac.yaml -n fluentdfluentd-rbac.yaml-Datei mit dem Befehl.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 - Verwenden Sie den folgenden Befehl, um ein
ConfigMap-Objekt für Fluentd oder Elastic Stack zu erstellen.
Verwenden Sie die folgendekubectl create -f fluentd-configmap_removefilter_ascii.yaml -n fluentdfluentd-configmap_removefilter_ascii.yaml-Datei mit dem Befehl.Entfernen Sie in der folgenden Datei das Nummernzeichen (#), um die Kommentarzeichen nur für eine der folgenden Zeilen aufzuheben.- Entfernen Sie die Kommentarzeichen für
@include file-fluent.conf, wenn Sie in eine Datei im Pfad/tmp/obp.logschreiben. - Entfernen Sie die Kommentarzeichen für
@include elastic-fluent.conf, wenn Sie an Elasticsearch schreiben.
/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> - Entfernen Sie die Kommentarzeichen für
- Mit dem folgenden Befehl können Sie ein
DaemonSet-Objekt für Fluentd erstellen. Mit diesem Befehl wird ein Fluentd-Pod auf jedem Knoten erstellt.
Verwenden Sie die folgendekubectl create -f fluentd.yaml -n fluentdfluentd.yaml-Datei mit dem Befehl.
Die Oracle Blockchain Platform-Logs sind im VerzeichnisapiVersion: 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/tmpdes Fluentd-Pods oder des Kubernetes-Knotens verfügbar. - Um die Logs an Elastic Stack zu senden, erstellen Sie einen Kubernetes-Namespace mit dem Namen
elastic-kibana. - Mit dem folgenden Befehl können Sie ein Deployment für Elastic Stack erstellen und als Service bereitstellen.
Verwenden Sie die folgendekubectl create -f elastic.yaml -n elastic-kibanaelastic.yaml-Datei mit dem Befehl.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 - Anschließend können Sie die Logdaten im Elasticsearch-Index mit den folgenden Befehlen prüfen.
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" - Sie können Fluentd auch verwenden, um das Log auf dem lokalen Block-Volume auf jedem Knoten zu speichern.
- Erstellen Sie ein Block-Volume für jeden Knoten, hängen Sie das Volume an, und erstellen Sie ein Verzeichnis mit dem Namen
/u01. - Formatieren Sie das angehängte Block-Volume für das Dateisystem ext4.
- Mounten Sie das Verzeichnis
/u01im Gerätepfad. - Ändern Sie die Fluentd-Deployment-Datei (
fluentd.yaml), sodass das Log-Volume/u01und nicht/tmplautet, wie im folgenden Snippet dargestellt.- name: logs hostPath: path: /u01 - Führen Sie den folgenden Befehl aus, um das Fluentd-Deployment anzuwenden.
kubectl apply -f fluentd.yaml -n fluentd - Die Logs sind jetzt im Verzeichnis /u01 auf jedem Knoten sichtbar.
- Erstellen Sie ein Block-Volume für jeden Knoten, hängen Sie das Volume an, und erstellen Sie ein Verzeichnis mit dem Namen
Logebene für Operatorpods festlegen
Sie können die Logebene für die Pods hlf-operator und obp-operator festlegen. Die Schritte zum Festlegen der Logebene unterscheiden sich je nachdem, ob Oracle Blockchain Platform installiert ist. Wenn die Oracle Blockchain Platform Enterprise Edition noch nicht installiert ist, führen Sie die folgenden Schritte aus.
- Öffnen Sie die entsprechende
deployment.yaml-Datei zur Bearbeitung. Die Datei für denhlf-operator-Pod befindet sich im folgenden Speicherort:
Die Datei für dendistribution_package_location/distribution-package/operators/helmcharts/hlf-operator/templates/deployment.yamlobp-operator-Pod befindet sich im folgenden Speicherort:distribution_package_location/distribution-package/operators/helmcharts/obp-operator/templates/deployment.yaml - Fügen Sie der Datei die folgende Zeile hinzu. Wie im Kommentar dargestellt, können Sie die Logebene auf
debug,infoodererrorsetzen. Im folgenden Beispiel wird die Logebene aufinfogesetzt.--zap-log-level=info # debug, info, error
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, errorWenn Oracle Blockchain Platform bereits installiert ist, führen Sie den folgenden Schritt aus.
- Mit den folgenden Befehlen können Sie die Deployment-Definitionen für die Pods
hlf-operatorundobp-operatorbearbeiten. Fügen Sie das Argument hinzu, das die Logebene für den Containermanagerunter der Podvorlagenspezifikation konfiguriert, oder aktualisieren Sie es.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