Alfred Inflow leverages Micrometer, an application metrics facade that supports numerous monitoring systems, to expose application metrics for monitoring purposes.
management.endpoints.web.exposure.exclude=*
Alfred Inflow consists of a standalone application (“the client”) and a
module that should be installed in Alfresco (“the backend”). To expose
metrics in the Alfresco module, Inflow depends on Alfred
Telemetry. The metrics
exposed by the backend module can be recognized by the inflow.backend
prefix. If Alfred Telemetry is not installed in the target Alfresco,
none of these metrics are available.
For a detailed overview on how to expose metrics with via Alfred Telemetry to various monitoring systems, have a look at the documentation of that project.
The supported monitoring systems and
their configuration discussed in the next section are part of the client
application. The supported metrics are exposed by
the client, unless their name starts with inflow.backend.
A practical example: to monitor the full set of metrics with e.g. prometheus, we should configure prometheus to scrape both the
{inflow-server}:{management.server.port}/actuator/prometheusand the{alfresco-server}/alfresco/s/alfred/telemetry/prometheusendpoint.
Although Micrometer supports a wide range of monitoring systems, Alfred Inflow only supports the ones mentioned in this section. For each monitoring system, the exporting of metrics can be enabled or disabled via the corresponding control property.
Control Property: management.endpoint.prometheus.enabled
(default: enabled)
Prometheus expects to
scrape or poll individual app instances for metrics. Alfred Inflow
provides an endpoint available at /actuator/prometheus
to present a Prometheus scrape with the
appropriate format.
If metrics are disabled globally or exporting metrics to prometheus is disabled, requests to the endpoint will result in a HTTP Status code 404
Alfred Inflow includes several timers that record the duration of specific parts of the ingestion process. The Micrometer documentations contains some specific information on graphing such timers when using Prometheus.
Control Property: management.health.jms.enabled (default:
disabled)
Micrometer provides a hierarchical mapping to JMX, primarily as a cheap and portable way to view metrics locally. By default, metrics are exported to the metrics JMX domain.
Micrometer provides a default HierarchicalNameMapper that governs how a dimensional meter id is mapped to flat hierarchical names.
Following metrics relate to Inflow jobs and / or have a job-name tag
that makes it possible to inspect them for each job individually.
inflow.client.jobs.countINACTIVE or ACTIVE).management.endpoint.job-service.enabled
(default: enabled)inflow.client.jobs.fs.input.countmanagement.endpoint.job-service.fs.enabled
(default: disabled)inflow.client.processed.countINPUTQUEUE, OK or FAILED)inflow.client.available-reportsUNKNOWN.inflow.client.remaining-capacityUNKNOWN.Next to job related metrics, Inflow also exposes metrics that can give insight in the general load off the ingestion process. These metrics can make it possible to discover certain performance bottlenecks.
Inflow client: storing reports
inflow.client.store-reportsinflow.client.store-reports.countInflow client: connection to Alfresco
The client application communicates to the backend module via HTTP requests. Following metrics give insight in these requests and their throughput.
httpcomponents.httpclient.request.sent.byteshttpcomponents.httpclient.request.received.byteshttpcomponents.httpclient.requestAll these metrics relate to a specific logical operation Inflow performs
as part of the communication process between client and backend. The
logical operation (e.g. CREATE_JOB, UPLOAD_DOCUMENTS, GET_REPORTS,
…) is added as the uri tag to the metric.
Inflow backend: storing content
Related to a specific step of the ingestion process: storing the physical content to the Alfresco content store.
inflow.backend.store-contentinflow.backend.store-content.sizeInflow backend: create, update or delete nodes
Related to a specific step of the ingestion process: creating, updating or deleting nodes in the Alfresco database.
Most metrics contain two units: documents or packages. A package is a
number of documents that should always be uploaded or modified together
in Alfresco. For more information, have a look at the enable packaging
configuration option in the user guide.
As a performance optimization, Inflow always tries to upload or modify a batch of packages in a single Alfresco transaction. This decreases the total overhead caused by the transaction itself. If this batch uploads fails, each package is retried in an individual transaction. For both operations (“batched” vs “retry”) metrics are available. If too much retries are necessary, this is detrimental for the performance and it is worth investigating what causes the original operation to fail.
inflow.backend.create-packagesinflow.backend.create-packages.packages.counterinflow.backend.create-packages.documents.counterinflow.backend.retry-create-packageinflow.backend.retry-create-package.packages.counterinflow.backend.retry-create-package.documents.counterInflow backend: find existing nodes
Related to a specific step of the ingestion process: matching existing
Alfresco nodes to the new upload. The amount of time spent in this
operation should be as close as possible to zero. However it is possible
to extend this logic by providing custom NodeLocatorService
implementations and therefore it is good to have insight on the impact
of these implementations. Please consult the developer documentation for
more information.
inflow.backend.find-existing-nodeInflow backend: buffer monitoring
Certain operations of the Inflow backend can be seen as processing buffers. Inflow provides metrics to get an insight in these buffers through following counters:
inflow.backend.documents.in.counterinflow.backend.documents.out.counterinflow.backend.packages.in.counterinflow.backend.packages.out.counterAll these counters have an operation tag to with one of these values:
allin) or
processed (out) by the backend. The difference between those the
out and in counter gives an idea of the current amount of
documents / packages the backend is processing.create-ancestorscreate-nodevalidate-nodeThere are multiple metrics related to the Java Virtual Machine and the rest of the system, which can be disabled or enabled individually.
Uptime metrics
The uptime metrics bindings will provide system uptime metrics.
Metrics provided
process.uptimeprocess.start.timeJvm Memory metrics
Metrics provided
jvm.buffer.countjvm.buffer.memory.usedjvm.buffer.total.capacityjvm.memory.committedjvm.memory.maxjvm.memory.usedJvm heap pressure metrics
Metrics provided
jvm.memory.usage.after.gcjvm.gc.overheadJvm GC metrics
Metrics provided
jvm.gc.max.data.sizejvm.gc.live.data.sizejvm.gc.memory.promotedjvm.gc.memory.allocatedjvm.gc.concurrent.phase.timejvm.gc.pauseJvm thread metrics
Metrics provided
jvm.threads.peakjvm.threads.daemonjvm.threads.livejvm.threads.statesProcess threads
Metrics provided
process.threadsClass loader metrics
Metrics provided
jvm.classes.loadedjvm.classes.unloadedProcessor metrics
The processor metrics bindings will provide system processor metrics.
Metrics provided
system.cpu.countsystem.load.average.1msystem.cpu.usageprocess.cpu.usageFile Descriptor metrics
The file descriptor metrics bindings will provide system file descriptor metrics.
Metrics provided
process.files.openprocess.files.max