Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New component: BMC Helix Exporter #36773

Closed
NassimBtk opened this issue Dec 10, 2024 · 8 comments · Fixed by #36964, #37350 or #37752
Closed

New component: BMC Helix Exporter #36773

NassimBtk opened this issue Dec 10, 2024 · 8 comments · Fixed by #36964, #37350 or #37752
Labels
Accepted Component New component has been sponsored

Comments

@NassimBtk
Copy link
Contributor

NassimBtk commented Dec 10, 2024

The purpose and use-cases of the new component

The BMC Helix Exporter will transmit metrics from the OpenTelemetry Collector to BMC Helix Operations Management platform. It is designed to meet BMC Helix’s specific requirements on how data (metrics) is sent through the BMC Helix REST API and entity mapping standards.

Use Cases:

  1. Metrics Integration:
    Organizations using BMC Helix Operations Management would be able to integrate metrics received by the OpenTelemetry Collector.

  2. Attributes to BMC Helix Mapping:
    The exporter should dynamically map attributes (e.g., host.name, service.name, name, id) to BMC Helix's labels. The exporter should not implement any logic to determine the values for the mandatory labels (attributes required by BMC Helix) entityName or entityTypeId; it should only ensure that these two labels are available for a given metric. This guarantees that the payload is accepted by BMC Helix and avoids rejection due to missing fields.
    BMC Helix Metrics payload example:

     [
      {
        "labels": {
          "isDeviceMappingEnabled": true,
          "entityId": "OTEL:server1:battery_cont:battery_container",
          "entityName": "battery_container",
          "entityTypeId": "battery_container",
          "hostType": "server",
          "hostname": "server1",
          "metricName": "identity",
          "source": "OTEL"
        },
        "samples": []
        },
        {
        "labels": {
          "isDeviceMappingEnabled": true,
          "entityId": "OTEL:server1:battery:battery1",
          "entityName": "battery1",
          "entityTypeId": "battery",
          "parentEntityName": "battery_container",
          "parentEntityTypeId": "battery_container",
          "hostType": "server",
          "hostname": "server1",
          "metricName": "hw.status.ok",
          "instanceName": "Battery 1",
          "source": "OTEL"
        },
        "samples": [{ "value": 1, "timestamp": 1733133695000 }]
      },
      {
        "labels": {
          "isDeviceMappingEnabled": true,
          "entityId": "OTEL:server1:battery:battery2",
          "entityName": "battery2",
          "entityTypeId": "battery",
          "parentEntityName": "battery_container",
          "parentEntityTypeId": "battery_container",
          "hostType": "server",
          "hostname": "server1",
          "metricName": "hw.status.ok",
          "instanceName": "Battery 2",
          "source": "OTEL"
        },
        "samples": [{ "value": 1, "timestamp": 1733133695000 }]
      }
    ]
  3. Customization and Flexibility:

    • Users would have the ability to customize metric transformations using OpenTelemetry Transformation Language (OTTL) via the transformprocessor, for instance, to manage the mandatory labels entityName and entityTypeId.
    • The exporter would support optional retry mechanisms and timeout settings to ensure reliability in metric delivery.

Example configuration for the component

The following settings are required:

  • endpoint: is the URL of your BMC Helix environment, at onbmc.com (e.g., https://company.onbmc.com).
  • api_key: API key to authenticate the exporter. Connect to BMC Helix Operations Management, go to the Administration > Repository page, and click on the Copy API Key button to get your API Key.

Example:

exporters:
  bmchelix/helix1:
    endpoint: https://company.onbmc.com
    api_key: <api-key>

Optional Settings

The following settings can be optionally configured:

  • timeout: (default = 10s) Timeout for requests made to the BMC Helix.
  • retry_on_failure:
    • enabled (default = false): Enables retries for failed requests.
    • initial_interval (default = 5s): The time to wait after the first failure before retrying.
    • randomization_factor (default = 0.5): Random factor used to calculate next backoffs.
    • multiplier (default = 1.5): The value multiplied by the backoff interval bounds.
    • max_interval (default = 30s): The upper bound on backoff interval.
    • max_elapsed_time (default = 5m): The maximum amount of time (including retries) spent trying to send a request.

Example:

exporters:
  bmchelix/helix2:
    endpoint: https://company.onbmc.com
    api_key: <api-key>
    timeout: 20s
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      randomization_factor: 0.5
      multiplier: 8.0
      max_interval: 1m
      max_elapsed_time: 8m

Telemetry data types supported

  • Metrics (to BMC Helix Operations Management)
  • Logs (to BMC Helix Logs Analytics) [FUTURE]
  • Traces (to BMC Netreo Stackify) [FUTURE]

Code Owner(s)

@bertysentry, @NassimBtk

Sponsor (optional)

Additional context

  • The exporter will handle the supported metric types: MetricTypeSum and MetricTypeGauge.
  • It will use an HTTP client to connect to the BMC Helix REST API.
  • Sentry Software specializes in developing software that integrates with BMC Helix. Therefore, the necessary tools and expertise are available to test and validate the exporter within a BMC Helix environment.
@NassimBtk NassimBtk added needs triage New item requiring triage Sponsor Needed New component seeking sponsor labels Dec 10, 2024
@bertysentry
Copy link
Contributor

Signals that should be supported:

  1. Metrics (to BMC Helix Operations Management)
  2. Logs (to BMC Helix Logs Analytics) [FUTURE]
  3. Traces (to BMC Netreo Stackigy) [FUTURE]

@bertysentry
Copy link
Contributor

Asking for sponsors, please! @Aneurysm9 @dashpole @trask @atoulme @MovieStoreGuy @jmacd Would you be okay to be a "sponsor" for this new component of the Collector?

This exporter will send metrics to BMC Helix a leading vendor in the observability market (at least it's worth mentioning by Gartner in their magic quadrant). I think it's a good addition to OpenTelemetry Collector.

@NassimBtk and I will be maintaining this. It will be a pretty simple exporter that simply needs to push the Otel metrics through a dedicated REST API endpoint on BMC Helix.

Later on we will add support for logs and traces. Thank you!

@atoulme
Copy link
Contributor

atoulme commented Dec 16, 2024

@NassimBtk needs to be a member of the OpenTelemetry community to be a codeowner of this component. See https://github.com/open-telemetry/community/issues/new?assignees=&labels=area%2Fgithub-membership&projects=&template=membership.md&title=REQUEST%3A+New+membership+for+%3Cyour-GH-handle%3E to get started

@MovieStoreGuy
Copy link
Contributor

I am happy to sponsor this,

Are you representing BMC Helix as part of the contribution? or is this a community funded component?

@MovieStoreGuy MovieStoreGuy added Accepted Component New component has been sponsored and removed Sponsor Needed New component seeking sponsor needs triage New item requiring triage labels Dec 16, 2024
@bertysentry
Copy link
Contributor

Sentry Software is a tech partner of BMC Helix and we have tons of contacts there, with R&D, product management, support, etc. but we don't represent them, per se. So it's more of a "community funded" component, where the community has strong ties with vendor. If there is any change in the interfaces, APIs, or any new requirements, we have the right contacts to handle the situation and ensure the quality of the components of the foreseeable future.

Thank you for the sponsorship, @MovieStoreGuy! 😊

@NassimBtk
Copy link
Contributor Author

Thank you, @atoulme! I’ve created open-telemetry/community#2493 to join the OpenTelemetry community as a member.

@fatsheep9146
Copy link
Contributor

fatsheep9146 commented Dec 22, 2024

I am happy to sponsor this

@bertysentry
Copy link
Contributor

Thank you @fatsheep9146 and @MovieStoreGuy! 😊

chengchuanpeng pushed a commit to chengchuanpeng/opentelemetry-collector-contrib that referenced this issue Jan 26, 2025
…#36964)

#### Description
This pull request introduces a new component for exporting metrics to
BMC Helix. The changes include adding the new component to various
configuration files, creating necessary documentation, and implementing
the component's configuration and factory logic.

Key changes include:

##### New Component Addition:
* Added a new changelog entry for the BMC Helix exporter in
`.chloggen/bmchelixexporter-new-component.yaml`.
* Updated `.github/CODEOWNERS` to include the new BMC Helix exporter.

##### Documentation:
* Created `README.md` for the BMC Helix exporter with detailed setup
instructions and examples.

##### Configuration and Factory Implementation:
* Implemented configuration struct and validation logic in `config.go`.
* Created tests for the configuration in `config_test.go`.
* Added factory methods for creating the exporter in `factory.go`.
* Created tests for the factory methods in `factory_test.go`.

##### Miscellaneous:
* Included the common Makefile in `exporter/bmchelixexporter/Makefile`.
* Added package documentation in `doc.go`.

#### Link to tracking issue
Fixes open-telemetry#36773

---------

Co-authored-by: Bertrand Martin <[email protected]>
MovieStoreGuy pushed a commit that referenced this issue Feb 4, 2025
…37350)

* Implemented core functionality in `exporter.go` to handle metric
transformation and payload dispatch to BMC Helix.
* Added `metrics_client.go` with HTTP client configuration.
* Added `metrics_producer.go` to produce BMC Helix-compatible payloads.
* Added unit tests.

<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description
This pull request introduces the BMC Helix Exporter, which is
responsible for exporting metrics to BMC Helix Operations Management.
The most important changes include the implementation of the exporter,
configuration adjustments, and the addition of unit tests.

##### Implementation of BMC Helix Exporter:

*
[`exporter/bmchelixexporter/exporter.go`](diffhunk://#diff-4a430330ea5f9e90bc37821ca52351bc66219d4da8a1da11299b049cd4864214R1-R84):
Introduced `BmcHelixExporter` class with methods to start the exporter
and push metrics to BMC Helix.
* Developed `metrics_producer.go` to build the BMC Helix Operations
Management expected metric payloads.
*
[`exporter/bmchelixexporter/metrics_client.go`](diffhunk://#diff-9a8d71b75da3d5cc679440769fae03014ae601d122e65e5797ea9866cb9cf341R1-R93):
Added `MetricsClient` class responsible for sending metrics payloads to
BMC Helix.

##### Configuration Adjustments:

*
[`exporter/bmchelixexporter/config.go`](diffhunk://#diff-4b576c9fd2cd87cecaf1fd1182f88283e38a6e2f4c6c28549f98f22ad60949dcL8-L17):
Replaced `Endpoint` and `Timeout` fields with `confighttp.ClientConfig`
to handle HTTP client configuration.
*
[`exporter/bmchelixexporter/factory.go`](diffhunk://#diff-f69eea4d007085533aa8bb35cc91f6c41f1783a87998eaa3ddefd1730ea2d0fbR30-R54):
Updated `createDefaultConfig` to use `confighttp.NewDefaultClientConfig`
and adjusted the `createMetricsExporter` function to initialize the
exporter properly.

##### Unit Tests:

*
[`exporter/bmchelixexporter/config_test.go`](diffhunk://#diff-b79eedb9dda64716aecd4902019fc29dc3ade40d26b5b32081d60d5c43d6fd4bL34-L45):
Modified tests to accommodate changes in configuration structure and
added helper function `createDefaultClientConfig`.
*
[`exporter/bmchelixexporter/exporter_test.go`](diffhunk://#diff-ed008fa0f26264e77c8516b3334f98fdc7f9bbac4fd7bc09719033c57331ad5fR1-R28):
Added unit tests for `newBmcHelixExporter` function to ensure proper
initialization.
* `exporter/bmchelixexporter/metrics_producer.go`:  Added unit tests.
* `exporter/bmchelixexporter/metrics_client.go`:  Added unit tests.

##### Changelog Entry:

*
[`.chloggen/bmchelixexporter-metrics-implementation.yaml`](diffhunk://#diff-e86aa08891f9688ad1995e82d398c481bedbbdea3903847c853585869c2feb65R1-R27):
Added a new changelog entry for the BMC Helix Exporter metrics
implementation.
<!-- Issue number (e.g. #1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Fixes #36773

<!--Describe what testing was performed and which tests were added.
#### Testing-->

<!--Describe the documentation added.-
#### Documentation->

<!--Please delete paragraphs that you did not use before submitting.-->
chengchuanpeng pushed a commit to chengchuanpeng/opentelemetry-collector-contrib that referenced this issue Feb 8, 2025
…pen-telemetry#37350)

* Implemented core functionality in `exporter.go` to handle metric
transformation and payload dispatch to BMC Helix.
* Added `metrics_client.go` with HTTP client configuration.
* Added `metrics_producer.go` to produce BMC Helix-compatible payloads.
* Added unit tests.

<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description
This pull request introduces the BMC Helix Exporter, which is
responsible for exporting metrics to BMC Helix Operations Management.
The most important changes include the implementation of the exporter,
configuration adjustments, and the addition of unit tests.

##### Implementation of BMC Helix Exporter:

*
[`exporter/bmchelixexporter/exporter.go`](diffhunk://#diff-4a430330ea5f9e90bc37821ca52351bc66219d4da8a1da11299b049cd4864214R1-R84):
Introduced `BmcHelixExporter` class with methods to start the exporter
and push metrics to BMC Helix.
* Developed `metrics_producer.go` to build the BMC Helix Operations
Management expected metric payloads.
*
[`exporter/bmchelixexporter/metrics_client.go`](diffhunk://#diff-9a8d71b75da3d5cc679440769fae03014ae601d122e65e5797ea9866cb9cf341R1-R93):
Added `MetricsClient` class responsible for sending metrics payloads to
BMC Helix.

##### Configuration Adjustments:

*
[`exporter/bmchelixexporter/config.go`](diffhunk://#diff-4b576c9fd2cd87cecaf1fd1182f88283e38a6e2f4c6c28549f98f22ad60949dcL8-L17):
Replaced `Endpoint` and `Timeout` fields with `confighttp.ClientConfig`
to handle HTTP client configuration.
*
[`exporter/bmchelixexporter/factory.go`](diffhunk://#diff-f69eea4d007085533aa8bb35cc91f6c41f1783a87998eaa3ddefd1730ea2d0fbR30-R54):
Updated `createDefaultConfig` to use `confighttp.NewDefaultClientConfig`
and adjusted the `createMetricsExporter` function to initialize the
exporter properly.

##### Unit Tests:

*
[`exporter/bmchelixexporter/config_test.go`](diffhunk://#diff-b79eedb9dda64716aecd4902019fc29dc3ade40d26b5b32081d60d5c43d6fd4bL34-L45):
Modified tests to accommodate changes in configuration structure and
added helper function `createDefaultClientConfig`.
*
[`exporter/bmchelixexporter/exporter_test.go`](diffhunk://#diff-ed008fa0f26264e77c8516b3334f98fdc7f9bbac4fd7bc09719033c57331ad5fR1-R28):
Added unit tests for `newBmcHelixExporter` function to ensure proper
initialization.
* `exporter/bmchelixexporter/metrics_producer.go`:  Added unit tests.
* `exporter/bmchelixexporter/metrics_client.go`:  Added unit tests.

##### Changelog Entry:

*
[`.chloggen/bmchelixexporter-metrics-implementation.yaml`](diffhunk://#diff-e86aa08891f9688ad1995e82d398c481bedbbdea3903847c853585869c2feb65R1-R27):
Added a new changelog entry for the BMC Helix Exporter metrics
implementation.
<!-- Issue number (e.g. open-telemetry#1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Fixes open-telemetry#36773

<!--Describe what testing was performed and which tests were added.
#### Testing-->

<!--Describe the documentation added.-
#### Documentation->

<!--Please delete paragraphs that you did not use before submitting.-->
MovieStoreGuy pushed a commit that referenced this issue Feb 11, 2025
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description
This pull request introduces the BMC Helix exporter as a new component
and marks it as Alpha. The changes include adding the BMC Helix exporter
to various configuration files and updating its stability status.

### Addition of BMC Helix Exporter:

*
[`.chloggen/add-bmchelix-to-build.yaml`](diffhunk://#diff-73f91bea722874de9aa8f64da379018915873458021d431b0e4534ac141affb3R1-R27):
Added a changelog template entry to mark the BMC Helix exporter as
Alpha.
*
[`cmd/otelcontribcol/builder-config.yaml`](diffhunk://#diff-e544ba2c49af711a5eb01b4c980e3bef42daa2088f140d79de23fc79b10f1369R68):
Included the `bmchelixexporter` in the list of exporters.
*
[`reports/distributions/contrib.yaml`](diffhunk://#diff-3ec0bc3053ed4dee6375471a38ee1b586e8335565c8ced2c072d2f885e63b376R27):
Added `bmchelix` to the list of components in the contrib distribution.

### Stability Update:

*
[`exporter/bmchelixexporter/README.md`](diffhunk://#diff-a6513cb9bece579c6c0c3cfff40bdeac127fe06983e068319c0907ea86bca0edL6-R12):
Updated the stability status from development to Alpha and specified the
distribution as contrib.
*
[`exporter/bmchelixexporter/internal/metadata/generated_status.go`](diffhunk://#diff-f1ffa219036a11de849517010dd941abf177ddf334041974dc7032e8993c3257L15-R15):
Changed the `MetricsStability` constant to Alpha.
*
[`exporter/bmchelixexporter/metadata.yaml`](diffhunk://#diff-5798995bb6b49e70bf0f62c0a2875569921869a8a300a3eceb9bf5c93ad5e474L6-R7):
Updated the stability status to Alpha and added the contrib
distribution.
<!-- Issue number (e.g. #1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Fixes #36773

<!--Please delete paragraphs that you did not use before submitting.-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment