arrow-down
    1. Overview
    2. Core concepts
    3. Using docs
    4. Intro Videos
    5. Tutorials
    1. Intro
    2. GraphQL API
    3. Media API
    4. Extending the API
    5. Component API
    1. Content Studio
      1. Branches
    2. Layers
      1. Lifecycle
      2. Media
      3. Attachments
      4. X-data
        1. Page templates
        2. Fragments
      5. Variants
      6. Permissions
      7. Versions
    3. Sites
      1. Visual editor
    4. Publishing
    1. Introduction
      1. Controllers
      2. Globals
      3. Events
      4. HTTP Request
      5. HTTP Response
      6. Error handler
      7. Filters
      8. Templating
      9. Localization
      10. Websocket
      11. Tasks
      12. Main controller
      13. Java bridge
      1. Admin Lib
      2. Application Lib
      3. Auditlog Lib
      4. Authentication Lib
      5. Cluster Lib
      6. Common Lib
      7. Content Lib
      8. Context Lib
      9. Event Lib
      10. Export Lib
      11. Grid Lib
      12. I18N Lib
      13. IO Lib
      14. Mail Lib
      15. Node Lib
      16. Portal Lib
      17. Project Lib
      18. Repo Lib
      19. Scheduler Lib
      20. Schema Lib
      21. Tasks Lib
      22. Value Lib
      23. VHost Lib
      24. Websocket Lib
    2. Other Libraries
      1. CLI
      2. Sandboxes
      3. Code
      4. Building
      5. Configuration
      6. TypeScript
    3. Building APIs
      1. Mappings
      2. Components
      3. Processors
      4. Contributions
    4. Building Webapps
      1. ID providers
      2. Admin Apps
      3. Admin Widgets
    1. Architecture
      1. TODO
      1. Navigating
      2. Users
      3. Applications
      4. Data management
      5. System info
      6. Audit Logs
      7. Task management
      1. Portal
      2. IDprovider
      3. Management
      4. Statistics
      1. Nodes and repos
      2. Properties
      3. Indexing
      4. Branches
      5. Editors
      1. DSL Queries
      2. NoQL Queries
      3. Filters
      4. Aggregations
      5. Highlighting
      1. ID providers
      2. System ID provider
      3. Users and groups
      4. Roles
      1. Strategies
      2. Distributions
      3. Docker
      4. Kubernetes
      5. Systemd
      6. Vhosts
      7. Configuration
      8. Backup & restore
      9. Clustering
      10. Observability
      1. Notes
      2. Upgrade
      3. Upgrading Apps
        1. Asset service
        2. HTTP service
        3. Image service
    1. Best practice
        1. AttachmentUploader
        2. Checkbox
        3. Combobox
        4. ContentSelector
        5. ContentTypeFilter
        6. CustomSelector
        7. Date
        8. DateTime
        9. Double
        10. GeoPoint
        11. HtmlArea
        12. ImageSelector
        13. Long
        14. MediaSelector
        15. Radiobutton
        16. Tag
        17. TextArea
        18. TextLine
        19. Time
        1. Field set
        2. Item set
        3. Option set
      1. Mixins
      2. Localization
      3. Styles
    2. Content Types
    3. X-data
    4. Macros
      1. Pages
      2. Regions
      3. Part component
      4. Layout component
      5. Text component
      6. Component Filtering
      7. Component Indexing
    1. Marketplace
    2. Market guidelines

Statistics Endpoint

Contents

Monitoring

We provide some basic metric tools for monitoring which are easily accessed in a simple JSON format. To access the monitoring JSON feed you can point to the following url:

GET http://<host>:2609/
<host> equals localhost on the machine with running enonic XP instance

This will give you a list of status-reporters. Each reporter has a name and can be accessed using the following pattern:

GET http://<host>:2609/<name>

Here’s a list of all the status pages and what is shows:

cluster.elasticsearch

Information about the ElasticSearch cluster. Local-node and members.

cluster.manager

Information about the state of the clusters: elasticsearch

dump.deadlocks

This will try to detect thread deadlocks and show them if any.

dump.threads

Dumps all current thread-states.

http.filter

List of servlet filters registered. It shows class, order and the URL patterns to which it applies.

http.servlet

List of HTTP servlets registered. It shows class, order and the URL patterns to which it applies.

http.threadpool

Status of the the Jetty web server thread pool.

http.webHandler

List of WebHandler instances registered.

index

Shows ElasticSearch index status.

jvm.gc

Information about JVM GC status.

jvm.info

General JVM information (version, vendor, uptime).

jvm.memory

JVM memory information (heap, non-heap, pools).

jvm.os

Information about OS (name, version, architecture).

jvm.threads

JVM thread stats (count, peak, total).

mediaTypes

List of mappings from file extension to media type.

metrics

Shows metrics. The information can be filtered using ?filter=…​.

osgi.bundle

Information about all OSGi bundles.

osgi.component

Information about registered SCR OSGi components.

osgi.service

Shows all OSGi services registered.

server

Information about the server (version, build).

Cluster monitoring

There are multiple tools at your disposal for monitoring the health of the clusters and indices:

Cluster health

GET http://<host>:2609/cluster.manager

To obtain a generic health check of the clusters. It should return you a response similar to:

{
    "state": "OK",
    "clusters": [
        {
            "id": "elasticsearch",
            "enabled": true,
            "healthy": true,
            "numberOfNodesSeen": 3
        }
    ]
}

This view gives a brief overview of the nodes in the cluster.

ElasticSearch cluster health

GET http://<host>:2609/cluster.elasticsearch

Which should return you a response similar to:

{
    "name": "mycluster",
    "localNode": {
        "isMaster": true,
        "id": "WT_gNgZ8SAu7GCJxvynSOg",
        "hostName": "griPortable.local",
        "version": "1.5.2",
        "numberOfNodesSeen": 3
    },
    "members": [
        {
            "isMaster": false,
            "id": "WqknPf3USg2fOnK6xGlWwA",
            "hostName": "griPortable.local",
            "version": "1.5.2",
            "address": "inet[/127.0.0.1:9301]",
            "name": "01bd187e-7cd1-4a8a-ac0a-918d4e09aa64",
            "isDataNode": true,
            "isClientNode": false
        },
        {
            "isMaster": false,
            "id": "xDwdxa37SUy6AHPz6hMZMA",
            "hostName": "griPortable.local",
            "version": "1.5.2",
            "address": "inet[/127.0.0.1:9302]",
            "name": "cf91d280-6111-47f2-8118-7d48664c3530",
            "isDataNode": true,
            "isClientNode": false
        },
        {
            "isMaster": true,
            "id": "WT_gNgZ8SAu7GCJxvynSOg",
            "hostName": "griPortable.local",
            "version": "1.5.2",
            "address": "inet[/127.0.0.1:9300]",
            "name": "af5287fc-663d-40bd-9b05-7cca59f96522",
            "isDataNode": true,
            "isClientNode": false
        }
    ],
    "state": "GREEN"
}

This view gives a brief overview of the nodes in the cluster. For convenience, the current local node to which the request was made has a separate entry in addition to being in the list of members.

The state property is the most important:

  • Green: Cluster is operational and all configured replicas are distributed to a node

  • Yellow: Cluster is operational, but there are replicas that are not distributed to any node

  • Red: Cluster is not operational

To see the details about how the replicas are distributed, let’s continue to the Index stats report:

Index stats

GET http://<host>:2609/index

Which should give you a response like this:

{
    "summary": {
        "total": 8,
        "started": 8,
        "unassigned": 0,
        "relocating": 0,
        "initializing": 0
    },
    "shards": {
        "started": [
            {
                "id": "search-cms-repo(0)",
                "nodeId": "xDwdxa37SUy6AHPz6hMZMA",
                "nodeAddress": "192.168.1.5",
                "type": "REPLICA"
            },
            {
                "id": "search-cms-repo(0)",
                "nodeId": "WT_gNgZ8SAu7GCJxvynSOg",
                "nodeAddress": "192.168.1.5",
                "type": "PRIMARY"
            },
            {
                "id": "search-system-repo(0)",
                "nodeId": "xDwdxa37SUy6AHPz6hMZMA",
                "nodeAddress": "192.168.1.5",
                "type": "PRIMARY"
            },
            {
                "id": "search-system-repo(0)",
                "nodeId": "WqknPf3USg2fOnK6xGlWwA",
                "nodeAddress": "192.168.1.5",
                "type": "REPLICA"
            },
            {
                "id": "storage-system-repo(0)",
                "nodeId": "WT_gNgZ8SAu7GCJxvynSOg",
                "nodeAddress": "192.168.1.5",
                "type": "REPLICA"
            },
            {
                "id": "storage-system-repo(0)",
                "nodeId": "WqknPf3USg2fOnK6xGlWwA",
                "nodeAddress": "192.168.1.5",
                "type": "PRIMARY"
            },
            {
                "id": "storage-cms-repo(0)",
                "nodeId": "WT_gNgZ8SAu7GCJxvynSOg",
                "nodeAddress": "192.168.1.5",
                "type": "PRIMARY"
            },
            {
                "id": "storage-cms-repo(0)",
                "nodeId": "WqknPf3USg2fOnK6xGlWwA",
                "nodeAddress": "192.168.1.5",
                "type": "REPLICA"
            }
        ],
        "unassigned": [],
        "relocating": [],
        "initializing": []
    }
}

This gives an overview of how the indices are distributed and what state the index parts (shards) are currently in. A shard could be either PRIMARY or REPLICA (copy of a primary shard). These are the possible states:

  • total: Total number of index parts (e.g two repositories with two indices with one replica for each index)

  • started: Shards that are currently assigned to a node

  • unassigned: Shards waiting to be distributed to a node. Typically a setup with a number of replicas where one or more nodes are not running

  • relocating: Shards that are currently moving from one node to another

  • initializing: Shards that are currently being recovered from disk at startup.

The shards section gives a more detailed overview on the shard distribution.

Hazelcast cluster health

XP 7.4.0

GET http://<host>:2609/cluster.hazelcast

Which should return you a response similar to:

{
  "clusterState": "ACTIVE",
  "clusterTime": 1599748536909,
  "clusterVersion": "3.12",
  "members": [
    {
      "uuid": "d7b9b75e-aacf-444b-bff9-af5c786843c2",
      "address": "192.168.1.1",
      "port": 5701,
      "liteMember": false,
      "version": "3.12.7"
    },
    {
      "uuid": "899920a2-d9bd-4add-8b1a-133bf27af9a0",
      "address": "192.168.1.2",
      "port": 5702,
      "liteMember": false,
      "version": "3.12.7"
    }
  ]
}

This view gives a brief overview of the nodes in the Hazelcast cluster. Check Hazelcast documentation for more details.

Health check

XP 7.13.0

GET http://<host>:2609/health

Health check validates that essential data services are available and ready to serve requests.

Successful validation will return an empty response with 200 status code. Failed validation will return 503 status code with the list of errors:

{
    "errors": [
      "org.elasticsearch.client.Client service is not available"
    ]
}

Readiness check

XP 7.13.0

GET http://<host>:2609/ready

Readiness check validates that all services needed for the instance to be fully operational are available and ready to serve requests.

Successful validation will return an empty response with 200 status code. Failed validation will return 503 status code with the list of errors:

{
    "errors": [
      "com.enonic.xp.portal.websocket.WebSocketManager service is not available",
      "com.enonic.xp.mail.MailService service is not available"
    ]
}

Contents

Contents

AI-powered search

Juke AI