How to

Observability on blockchain and the Hyperledger project

Hyperledger Fabric is a blockchain framework by the Linux Foundation that uses some open source projects to build a modular blockchain application. And do you know what? You can monitor your Hyperledger Fabric applications with the Elastic Stack. :)

We are going to assume a specific Hyperledger Fabric setup. With Hyperledger Fabric you can deploy your application using different "blocks" to achieve the same result. For example, you can use a Hyperledger Fabric internal implementation, Kafka, or etcd for consensus operations, and you can use GoLevelDB or CouchDB as database.

The services deployed for this example are:

The result is a very rich dashboard with an overall view of a Hyperledger Fabric network:

Dashboard with overall view

In the screenshot above we see a portion of a dashboard specifically built for Hyperledger Fabric. We can also see Metricbeat, Filebeat, and Heartbeat working in harmony. Each peer inside the Hyperledger Fabric network is monitored by configuring them to expose Prometheus metrics. Heartbeat is also used; in this case, Heartbeat supports ICMP, TCP, and HTTP protocols so we have configured it to monitor all HTTP endpoints that were available.

The network is deployed in Docker so the Metricbeat Docker module has been configured to monitor it. But also, a Filebeat configured with Container as input (previously called Docker input) and with the add_docker_metadata processor allow us to extract and enrich Docker generated logs. Because we are not using any Filebeat module to process Docker log lines, the configuration can’t be simpler:

filebeat.inputs:
  - type: container
    enabled: true
    paths:
      - /path_to_your_docker_logs/*/*.log
    json.keys_under_root: true
output.elasticsearch:
  hosts: ["your_elasticsearch:9200"]
processors:
  - add_host_metadata: ~
  - add_docker_metadata:
      host: "unix:///var/run/docker.sock"

The config above points the container input in Filebeat to the logs path (in this case, they were Docker containers so it points to the Docker logs path). Docker outputs log lines as JSON so we set to true json.keys_under_root so that they are not “stringified.” We configure our Elasticsearch cluster and add two very useful processors: add_host_metadata, which enriches the JSON with useful data coming from the host machine where Filebeat is running; and add_docker_metadata which, in turn, enriches the JSON with useful information about the Docker engine that is running the containers.

JSON enriched with useful Docker data

Apart from the Discover tab, you can also use the Logs UI to have a never-ending stream of logs with customized columns and data:

Logs UI with customized columns and data

Finally, if logs, metrics, and uptime data playing together weren’t enough, you can also use the Infrastructure app. There you can see a different view of the infrastructure; in this case, we grouped the containers by image name to see their CPU usage.

Infrastructure UI with containers grouped by image name

The Elastic Stack for observability is critical for any complex distributed system, but don't forget that you must also instrument your apps with Elastic APM solution to "close the circle" of observability inside your product: logs, metrics, uptime, and tracing.

APM dashboard showing transaction sample

APM dashboard showing transaction graphs

Bonus! Did you know that Kibana now has dark mode? If you want to give it a try, just go to Management - Advanced Settings and activate it! :) Here we can see the Logs UI in dark mode:

Kibana in dark mode

Want to see it in action?

You can start monitoring your Hyperledger Fabric today by signing up for a free trial of the Elasticsearch Service on Elastic Cloud, or you can download it as part of the default distribution of the Elastic Stack. Grab the Metricbeat and Filebeat executables appropriate for your platform and start monitoring!