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, wobei Logs lokal auf jedem Pod gespeichert werden. Um zu verhindern, dass Logs beim Löschen eines Pods gelöscht werden, müssen Sie das persistente Logging einrichten, bei dem Logs an einem zentralen Speicherort gespeichert werden. Es gibt zwei Methoden, die Sie für das persistente Logging verwenden können. Sie können ein externes Loggingtool 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 ausgeführt werden.
Persistentes Logging mit OCI
Um Logs mit OCI zentral 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 ID auf Domains und dann auf Dynamische Gruppe erstellen. Fügen Sie der dynamischen Gruppe im Abschnitt Abgleichsregeln Folgendes hinzu, indem Sie die Oracle Cloud-ID für Ihr Compartment ersetzen.
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 ID 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.
- Loggruppe erstellen. Wählen Sie unter Logging die Option Loggruppen aus, und klicken Sie auf Loggruppe erstellen.
- Erstellen Sie ein benutzerdefiniertes Log. 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. Dies ist der Standard für Anwendungscontainer. Wählen Sie in der Liste Eingabetyp die Option Logpfad aus. Geben Sie den folgenden Dateipfad für Dateipfade ein. Dieser Pfad enthält alle Containerprotokolle, einschließlich System- und Dienstcontainer.
/var/log/pods/*/*/*.log
- Warten Sie, bis Logs aufgenommen wurden. In der Regel werden Protokolle 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 die Quelle und das 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 Protokolle in 3-5 Minuten aufgenommen. In den Connector-Logs werden dann Lese- und Schreibvorgänge 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 namens
fluentd
. - Mit dem folgenden Befehl können Sie eine rollenbasierte Zugriffskontrollressource erstellen.
Verwenden Sie die folgendekubectl create -f fluentd-rbac.yaml -n fluentd
fluentd-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
- Mit dem folgenden Befehl können Sie ein
ConfigMap
-Objekt für Fluentd oder Elastic Stack erstellen.
Verwenden Sie die folgendekubectl create -f fluentd-configmap_removefilter_ascii.yaml -n fluentd
fluentd-configmap_removefilter_ascii.yaml
-Datei mit dem Befehl.Entfernen Sie in der folgenden Datei das Nummernzeichen (#), um nur eine der folgenden Zeilen zu entfernen.- Entfernen Sie die Kommentarzeichen für
@include file-fluent.conf
, wenn Sie in eine Datei im/tmp/obp.log
-Pfad schreiben. - 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
- Verwenden Sie den folgenden Befehl, um ein
DaemonSet
-Objekt für Fluentd zu erstellen. Mit diesem Befehl wird auf jedem Knoten ein Fluentd-Pod erstellt.
Verwenden Sie die folgendekubectl create -f fluentd.yaml -n fluentd
fluentd.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
/tmp
des Fluentd-Pods oder des Kubernetes-Knotens verfügbar. - Um die Logs an Elastic Stack zu senden, erstellen Sie einen Kubernetes-Namespace namens
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-kibana
elastic.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 das Log auch mit Fluentd auf dem lokalen Block-Volume auf jedem Knoten speichern.
- Erstellen Sie für jeden Knoten ein Block-Volume, hängen Sie das Volume an, und erstellen Sie ein Verzeichnis namens
/u01
. - Formatieren Sie das angehängte Block-Volume für das Dateisystem ext4.
- Hängen Sie das Verzeichnis
/u01
am Gerätepfad ein. - Ändern Sie die Fluentd-Deployment-Datei (
fluentd.yaml
), sodass das Log-Volume/u01
und nicht/tmp
ist, wie im folgenden Snippet gezeigt.- 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 für jeden Knoten ein Block-Volume, hängen Sie das Volume an, und erstellen Sie ein Verzeichnis namens
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 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 in folgendem Verzeichnis:
Die Datei für dendistribution_package_location/distribution-package/operators/helmcharts/hlf-operator/templates/deployment.yaml
obp-operator
-Pod befindet sich in folgendem Verzeichnis:distribution_package_location/distribution-package/operators/helmcharts/obp-operator/templates/deployment.yaml
- Fügen Sie der Datei folgende Zeile hinzu. Wie im Kommentar gezeigt, können Sie die Logebene auf
debug
,info
odererror
setzen. Im folgenden Beispiel wird die Logebene aufinfo
gesetzt.--zap-log-level=info # debug, info, error
containers:
- args:
- --enable-leader-election
- --zap-log-level=info # debug, info, error
Wenn 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-operator
undobp-operator
bearbeiten. Fügen Sie das Argument hinzu, das die Logebene für denmanager
-Container unter 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