diff --git a/.gitignore b/.gitignore index 86742633..e64b8288 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ test/functional/logs/ test/functional/*_harness_file.json test/artifacts/ # misc +.misc/ .vscode/ **/.DS_Store # generated schema & docs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 69ccaf23..037560f2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,7 +18,7 @@ include: # adds atg_shared_checks_result job to test stage - project: automation-toolchain/atg-shared-templates file: security/base.gitlab-ci.yml - ref: v1.1.3 + ref: v1.1.7 ############################################################## diff --git a/CHANGELOG.md b/CHANGELOG.md index 2357fd7e..e2bc647d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # Changelog Changes to this project are documented in this file. More detail and links can be found in the Telemetry Streaming [Document Revision History](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/revision-history.html). +## 1.32.0 +### Added +### Fixed +### Changed +- TS-691: DataDog: forward metric data additionally to the logs endpoint +- TS-699: Removed Beacon from documentation +### Removed + ## 1.31.0 ### Added - TS-676: Add gRPC exporter to OpenTelemetry_Exporter (experimental feature) diff --git a/README.md b/README.md index 171ee1c1..bfe932a9 100644 --- a/README.md +++ b/README.md @@ -6,30 +6,30 @@ ## Introduction -Telemetry Streaming (TS) is an iControl LX Extension delivered as a TMOS-independent RPM file. Installing the TS Extension on BIG-IP enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application by POSTing a single TS JSON declaration to TS’s declarative REST API endpoint. +F5 BIG-IP Telemetry Streaming (BIG-IP TS) is an iControl LX Extension delivered as a TMOS-independent RPM file. Installing the BIG-IP TS Extension on BIG-IP enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application by POSTing a single BIG-IP TS JSON declaration to BIG-IP TS’s declarative REST API endpoint. -**IMPORTANT** Beginning with TS 1.7.0, the RPM and checksum files will no longer be located in the **/dist** directory in this repository. These files can be found on the [Release page](https://github.com/F5Networks/f5-telemetry-streaming/releases), as **Assets**. You can find historical files on GitHub by using the **Branch** drop-down, clicking the **Tags** tab, and then selecting the appropriate release. +**IMPORTANT** Beginning with BIG-IP TS 1.7.0, the RPM and checksum files will no longer be located in the **/dist** directory in this repository. These files can be found on the [Release page](https://github.com/F5Networks/f5-telemetry-streaming/releases), as **Assets**. You can find historical files on GitHub by using the **Branch** drop-down, clicking the **Tags** tab, and then selecting the appropriate release. ## Documentation -For the documentation on Telemetry Streaming, including download, installation, and usage instructions, see the Telemetry Streaming User guide at [http://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/](http://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/). +For the documentation on BIG-IP Telemetry Streaming, including download, installation, and usage instructions, see the BIG-IP Telemetry Streaming User guide at [http://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/](http://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/). ### Example Telemetry Streaming declarations -The Telemetry Streaming documentation contains a variety of example declarations you can use directly or modify to suit your needs. See the [Consumers](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/setting-up-consumer.html) and [Example Declarations](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/declarations.html) pages. +The BIG-IP Telemetry Streaming documentation contains a variety of example declarations you can use directly or modify to suit your needs. See the [Consumers](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/setting-up-consumer.html) and [Example Declarations](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/declarations.html) pages. ## Filing Issues and Getting Help -If you come across a bug or other issue when using Telemetry Streaming, use [GitHub Issues](https://github.com/f5networks/f5-telemetry-streaming/issues) to submit an issue for our team. You can also see the current known issues on that page, which are tagged with a purple Known Issue label. +If you come across a bug or other issue when using BIG-IP Telemetry Streaming, use [GitHub Issues](https://github.com/f5networks/f5-telemetry-streaming/issues) to submit an issue for our team. You can also see the current known issues on that page, which are tagged with a purple Known Issue label. **Important**: Github Issues are consistently monitored by F5 staff, but should be considered as best effort only and you should not expect to receive the same level of response as provided by F5 Support. Please open a case as described below with F5 if this is a critical issue. -Because Telemetry Streaming has been created and fully tested by F5 Networks, it is fully supported by F5. This means you can get assistance if necessary from [F5 Technical Support](https://support.f5.com/csp/article/K25327565). +Because BIG-IP Telemetry Streaming has been created and fully tested by F5 Networks, it is fully supported by F5. This means you can get assistance if necessary from [F5 Technical Support](https://support.f5.com/csp/article/K25327565). -Be sure to see the [Support page](SUPPORT.md) in this repo for more details and supported versions of Telemetry Streaming. +Be sure to see the [Support page](SUPPORT.md) in this repo for more details and supported versions of BIG-IP Telemetry Streaming. ### Community Help -We encourage you to use our [Slack channel](https://f5cloudsolutions.herokuapp.com) for discussion and assistance on Telemetry Streaming (click the **telemetry-streaming** channel). There are F5 employees who are members of this community who typically monitor the channel Monday-Friday 9-5 PST and will offer best-effort assistance. See the [Slack Channel Statement](slack-channel-statement.md) for guidelines on using this channel. +We encourage you to use our [Slack channel](https://f5cloudsolutions.herokuapp.com) for discussion and assistance on BIG-IP Telemetry Streaming (click the **telemetry-streaming** channel). There are F5 employees who are members of this community who typically monitor the channel Monday-Friday 9-5 PST and will offer best-effort assistance. See the [Slack Channel Statement](slack-channel-statement.md) for guidelines on using this channel. ## Copyright diff --git a/SUPPORT.md b/SUPPORT.md index 9cf78cce..b69d83dc 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -18,9 +18,9 @@ Currently supported versions: | Software Version | Release Type | First Customer Ship | End of Support | |------------------|---------------|---------------------|-----------------| | TS 1.27.1 | LTS | 19-Apr-2022 | 19-Apr-2023 | -| TS 1.29.0 | Feature | 31-May-2022 | 31-Aug-2022 | | TS 1.30.0 | Feature | 15-Jul-2022 | 15-Oct-2022 | | TS 1.31.0 | Feature | 23-Aug-2022 | 23-Nov-2022 | +| TS 1.32.0 | Feature | 04-Oct-2022 | 04-Jan-2023 | Versions no longer supported: @@ -55,5 +55,6 @@ Versions no longer supported: | TS 1.26.0 | Feature | 25-Jan-2022 | 25-Apr-2022 | | TS 1.27.0 | Feature | 08-Mar-2022 | 08-Jun-2022 | | TS 1.28.0 | Feature | 19-Apr-2022 | 19-Jul-2022 | +| TS 1.29.0 | Feature | 31-May-2022 | 31-Aug-2022 | See the [Release notes](https://github.com/F5Networks/f5-telemetry-streaming/releases) and [Telemetry Streaming documentation](https://clouddocs.f5.com/products/extensions/f5-telemetry-streaming/latest/revision-history.html) for new features and issues resolved for each release. diff --git a/contributing/README.md b/contributing/README.md index 10049907..97e8c0c8 100644 --- a/contributing/README.md +++ b/contributing/README.md @@ -108,7 +108,7 @@ How does the project handle a typical `POST` request? "trace": false, "format": "default" }, - "schemaVersion": "1.31.0" + "schemaVersion": "1.32.0" } } ``` diff --git a/contributing/process_release.md b/contributing/process_release.md index 41f0a62b..c71affc7 100644 --- a/contributing/process_release.md +++ b/contributing/process_release.md @@ -67,6 +67,7 @@ * 1.29.0 - 17.8 MB * 1.30.0 - 16.0 MB * 1.31.0 - 20.5 MB (NOTE: inclusion of OpenTelemetry and grpc-js libraries) + * 1.32.0 - 20.5 MB * Install build to BIG-IP, navigate to folder `/var/config/rest/iapps/f5-telemetry/` and check following: * Run `du -sh` and check that folder's size (shouldn't be much greater than previous versions): * 1.4.0 - 65 MB @@ -97,6 +98,7 @@ * 1.29.0 - 129 MB * 1.30.0 - 116 MB * 1.31.0 - 153 MB (NOTE: inclusion of OpenTelemetry and grpc-js libraries) + * 1.31.0 - 154 MB * Check `node_modules` folder - if you see `eslint`, `mocha` or something else from [package.json](package.json) `devDependencies` section - something wrong with build process. Probably some `npm` flags are work as not expected and it MUST BE FIXED before publishing. * Ensure that all tests (unit tests and functional tests passed) * Optional: Ensure that your local tags match remote. If not, remove all and re-fetch: diff --git a/docs/advanced-options.rst b/docs/advanced-options.rst index 2eb89d88..32701e7c 100644 --- a/docs/advanced-options.rst +++ b/docs/advanced-options.rst @@ -1,7 +1,7 @@ Advanced Options ---------------- -This section describes additional options that you may want to configure once you comfortable to using Telemetry Streaming. +This section describes additional options you may want to use for configuring, once you are comfortable using F5 BIG-IP Telemetry Streaming. +-----------------------------+--------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/avr.rst b/docs/avr.rst index a97f78f2..b62411d5 100644 --- a/docs/avr.rst +++ b/docs/avr.rst @@ -2,11 +2,11 @@ Exporting data from AVR ======================= -This section shows how you can export data from the Application Visibility and Reporting (AVR) module to Telemetry Streaming. To see more information on AVR, see the |analytics|. +This section shows how you can export data from the Application Visibility and Reporting (AVR) module to BIG-IP Telemetry Streaming. To see more information on AVR, see the |analytics|. -.. NOTE:: The configuration on this page was modified to use an existing Telemetry Streaming *Log Publisher* as opposed to a static IP address. There is also a new, optional section for TS and AVR in a fanout configuration. This documentation change was made in Telemetry Streaming 1.16, but the configuration can be used with any TS version. +.. NOTE:: The configuration on this page was modified to use an existing BIG-IP Telemetry Streaming *Log Publisher* as opposed to a static IP address. There is also a new, optional section for BIG-IP TS and AVR in a fanout configuration. This documentation change was made in BIG-IP Telemetry Streaming 1.16, but the configuration can be used with any BIG-IP TS version. -The prerequisites for using TS with AVR include: +The prerequisites for using BIG-IP TS with AVR include: - The AVR module must be provisioned - You must have an Event Listener, including an existing Log Publisher (see :ref:`eventlistener-ref` for instructions) @@ -14,13 +14,13 @@ The prerequisites for using TS with AVR include: .. _avr-note: -.. IMPORTANT:: It is currently not possible to configure AVR to publish data to both Telemetry Streaming and BIG-IQ concurrently. Additionally, if a BIG-IP is managed by a BIG-IQ, and has Statistics Collection enabled, the entire AVR configuration of the BIG-IP will be overwritten to publish only to the BIG-IQ. +.. IMPORTANT:: It is currently not possible to configure AVR to publish data to both BIG-IP Telemetry Streaming and BIG-IQ concurrently. Additionally, if a BIG-IP is managed by a BIG-IQ, and has Statistics Collection enabled, the entire AVR configuration of the BIG-IP will be overwritten to publish only to the BIG-IQ. | Modifying AVR configuration to use the Log Publisher ---------------------------------------------------- -To use AVR with Telemetry Streaming, you must modify the AVR logging configuration to point to the existing Log Publisher. If you do not have an existing log publisher, see :ref:`logsrc-ref` for guidance on creating one. +To use AVR with BIG-IP Telemetry Streaming, you must modify the AVR logging configuration to point to the existing Log Publisher. If you do not have an existing log publisher, see :ref:`logsrc-ref` for guidance on creating one. Use the following TMSH command, but be sure to change **telemetry_publisher** to the name of your Log Publisher if your publisher has a different name. @@ -40,11 +40,11 @@ Example output of AVR basic data: | -Optional: Configuring AVR and Telemetry Streaming in a fanout scenario -`````````````````````````````````````````````````````````````````````` -If you want to configure AVR and Telemetry Streaming in a fanout configuration (where AVR can send to multiple destinations using the TS Log Publisher), you can add new Log Destinations to the existing Log Publisher. For more information, see |hsldocs| in the AVR documentation. This includes configuration instructions using the BIG-IP Configuration utility. Note the Log Destination type must be **Remote High-Speed Log**. The TS :ref:`Event Listener page` shows how to configure Log Destinations with AS3 and TMSH. +Optional: Configuring AVR and BIG-IP Telemetry Streaming in a fanout scenario +````````````````````````````````````````````````````````````````````````````` +If you want to configure AVR and BIG-IP Telemetry Streaming in a fanout configuration (where AVR can send to multiple destinations using the BIG-IP TS Log Publisher), you can add new Log Destinations to the existing Log Publisher. For more information, see |hsldocs| in the AVR documentation. This includes configuration instructions using the BIG-IP Configuration utility. Note the Log Destination type must be **Remote High-Speed Log**. The BIG-IP TS :ref:`Event Listener page` shows how to configure Log Destinations with BIG-IP AS3 and TMSH. -If you need to add a Log Destination to an existing AS3 declaration (see :ref:`as3logging-ref`), you can simply add the new destination to the existing Log Publisher's **Destination** array (named **telemetry_publisher** in our example), and the AS3 declaration. +If you need to add a Log Destination to an existing BIG-IP AS3 declaration (see :ref:`as3logging-ref`), you can simply add the new destination to the existing Log Publisher's **Destination** array (named **telemetry_publisher** in our example), and the BIG-IP AS3 declaration. | diff --git a/docs/conf.py b/docs/conf.py index 0a7624fc..e6fd9a55 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -68,7 +68,7 @@ master_doc = 'index' # General information about the project. -project = u'Telemetry Streaming' +project = u'F5 BIG-IP Telemetry Streaming' copyright = u'2022 F5 Networks Inc' author = u'F5 Networks' @@ -79,7 +79,7 @@ # The short X.Y version. version = u'' # The full version, including alpha/beta/rc tags. -release = u'1.31.0' +release = u'1.32.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/custom-endpoints.rst b/docs/custom-endpoints.rst index 11bd10c2..29293fd2 100644 --- a/docs/custom-endpoints.rst +++ b/docs/custom-endpoints.rst @@ -1,6 +1,6 @@ Configuring Custom Endpoints ---------------------------- -Telemetry Streaming v1.10 and later allows you to define a list of Custom Endpoints that reference iControlRequest paths in a new **Telemetry_Endpoints** class. +F5 BIG-IP Telemetry Streaming v1.10 and later allows you to define a list of Custom Endpoints that reference iControlRequest paths in a new **Telemetry_Endpoints** class. The Custom Endpoints defined within a Telemetry Streaming declaration must then be attached to a Telemetry Streaming System Poller, where the System Poller will query the defined endpoints. .. NOTE:: Custom Endpoints *replace* the endpoints that a Telemetry Streaming System Poller queries by default - once a System Poller references a collection of Custom Endpoints, that System Poller will *only* query the Custom Endpoints. @@ -152,7 +152,7 @@ The following snippet demonstrates how Custom Endpoint(s) can be attached to Sys Example declaration for using custom Endpoints with specific pollers -------------------------------------------------------------------- -The following example contains an example declaration for Telemetry Streaming, which includes the snippets in the examples above. +The following example contains an example declaration for F5 BIG-IP Telemetry Streaming, which includes the snippets in the examples above. **Note:** The example below does not define a Telemetry Consumer, and a consumer of your choice must be added to the example declaration in order to receive the Telemetry Streaming data. .. literalinclude:: ../examples/declarations/system_custom_endpoints.json diff --git a/docs/customizing-data.rst b/docs/customizing-data.rst index e85bb3e0..07513b26 100644 --- a/docs/customizing-data.rst +++ b/docs/customizing-data.rst @@ -1,11 +1,11 @@ .. _customize-data: -Customizing the Telemetry Streaming payload -------------------------------------------- +Customizing the F5 BIG-IP Telemetry Streaming payload +----------------------------------------------------- -Telemetry Streaming 1.20 introduced a feature that allows you to restructure the data coming out of the Telemetry Streaming Generic HTTP consumer so it fits the format of 3rd party systems. This is useful when you want the Telemetry Streaming payload in the format of a system that does not have a specific Telemetry Streaming consumer. It also helps when trying to get log data into any kind of HTTP API. +F5 BIG-IP Telemetry Streaming 1.20 introduced a feature that allows you to restructure the data coming out of the Telemetry Streaming Generic HTTP consumer so it fits the format of 3rd party systems. This is useful when you want the Telemetry Streaming payload in the format of a system that does not have a specific Telemetry Streaming consumer. It also helps when trying to get log data into any kind of HTTP API. -This feature is enabled as a JMESPath expression (using a JMESPath library) in the Telemetry Consumer class as an **action** for the Generic HTTP consumer. TS takes the JMESPath expression with the string that you provide, and applies the expression to the data received by the consumer. +This feature is enabled as a JMESPath expression (using a JMESPath library) in the Telemetry Consumer class as an **action** for the Generic HTTP consumer. BIG-IP TS takes the JMESPath expression with the string that you provide, and applies the expression to the data received by the consumer. For information on JMESPath, including the JMESPath specification, additional examples, and an interactive query tool, see https://jmespath.org/. diff --git a/docs/data-modification.rst b/docs/data-modification.rst index 9d12f323..b485f297 100644 --- a/docs/data-modification.rst +++ b/docs/data-modification.rst @@ -1,6 +1,6 @@ Data Modification ================= -This section details how you can manipulate the data to better meet your Telemetry goals. This includes the new :ref:`Actions Chain`, which can contain the :ref:`includeData` and :ref:`excludeData` options introduced in Telemetry Streaming 1.8.0, and the previously introduced :ref:`setTag` property. +This section details how you can manipulate the data to better meet your Telemetry goals. This includes the new :ref:`Actions Chain`, which can contain the :ref:`includeData` and :ref:`excludeData` options introduced in F5 BIG-IP Telemetry Streaming 1.8.0, and the previously introduced :ref:`setTag` property. .. _actions: @@ -8,9 +8,9 @@ Actions chain ------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for **Actions chain** is available in TS 1.8.0 and later. + Support for **Actions chain** is available in BIG-IP TS 1.8.0 and later. -This section describes Telemetry Streaming Action chains, and how to use them. Action chains can be thought of as a pipeline of actions for data post-processing (and :ref:`pre-processing` for System Poller only). +This section describes BIG-IP Telemetry Streaming Action chains, and how to use them. Action chains can be thought of as a pipeline of actions for data post-processing (and :ref:`pre-processing` for System Poller only). These actions use the :ref:`setTag`, :ref:`includeData`, and :ref:`excludeData` options described in detail later on this page. See each section for details on the individual properties. @@ -52,9 +52,9 @@ The following is an example of an Action chain with a description after the exam -1. First Telemetry Streaming will exclude **system**. -2. Next Telemetry Streaming will apply **vsInfo** tag to known locations (if the **locations** property is not specified, then the tag is applied to **virtualServers**, **pools** etc.) -3. Finally Telemetry Streaming keeps all **virtualServers** data with properties defined in **locations** only. +1. First BIG-IP Telemetry Streaming will exclude **system**. +2. Next BIG-IP Telemetry Streaming will apply **vsInfo** tag to known locations (if the **locations** property is not specified, then the tag is applied to **virtualServers**, **pools** etc.) +3. Finally BIG-IP Telemetry Streaming keeps all **virtualServers** data with properties defined in **locations** only. As result of execution output will look like: @@ -117,7 +117,7 @@ This is because 1. First action **includeData** will keep only **system**. 2. Second action **setTag** will try to assign tag to known locations (if the 'locations' property is not specified, then the tag is applied to 'virtualServers', 'pools' etc.) -3. Third action **includeData** should keep only **virtualServers**, but after execution of action #1 only the **system** property was left in the output - so, Telemetry Streaming removed from the output everything that not matched **virtualServers** and as result the output is empty object. +3. Third action **includeData** should keep only **virtualServers**, but after execution of action #1 only the **system** property was left in the output - so, BIG-IP Telemetry Streaming removed from the output everything that not matched **virtualServers** and as result the output is empty object. | @@ -126,7 +126,7 @@ This is because Pre-optimization (System Poller only) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Telemetry System tries to analyze the actions chain before fetching data from the BIG-IP in order to reduce number of requests to BIG-IP. +BIG-IP Telemetry System tries to analyze the actions chain before fetching data from the BIG-IP in order to reduce number of requests to BIG-IP. Example 1: @@ -163,7 +163,7 @@ Example 1: } -The Telemetry System sees that first action is **includeData** and it should include only **system**. So, as result of the Actions chain analysis, the Telemetry System will fetch only **system** data and not **virtualServers**. +The BIG-IP Telemetry System sees that first action is **includeData** and it should include only **system**. So, as result of the Actions chain analysis, the BIG-IP Telemetry System will fetch only **system** data and not **virtualServers**. Example 2: @@ -223,9 +223,9 @@ Value-based matching -------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for value-based matching is available in TS v1.10.0 and later + Support for value-based matching is available in BIG-IP TS v1.10.0 and later -Telemetry Streaming v1.10 adds the **ifAnyMatch** functionality to the existing value-based matching logic. Value-based matching means that TS can filter based on the value of **ifAnyMatch** instead of just the presence of the field. You can provide multiple values, and the *Action* (**includeData, excludeData or setTag**, described in detail in the section starting with :ref:`include`) is triggered if any of the blocks in the array evaluate to true. +F5 BIG-IP BIG-IP Telemetry Streaming v1.10 adds the **ifAnyMatch** functionality to the existing value-based matching logic. Value-based matching means that BIG-IP TS can filter based on the value of **ifAnyMatch** instead of just the presence of the field. You can provide multiple values, and the *Action* (**includeData, excludeData or setTag**, described in detail in the section starting with :ref:`include`) is triggered if any of the blocks in the array evaluate to true. The following example snippet uses the **includeData** action, so if any of the virtual servers in the **test** tenant are either enabled or disabled (and have a state of **available**), then *only* the virtualServer data is included. And because it uses **includeData**, the action must evaluate to true to occur, so if none of the virtualServers have a state of available, then ALL data is included. @@ -269,7 +269,7 @@ For a complete declaration with value-based matching, see :ref:`value`. Tag property ------------ -Beginning in Telemetry Streaming 1.6.0, tagging is an actions array (the :ref:`old Tag property` is still available). Inside this actions array, you can add tagging objects. +Beginning in F5 BIG-IP Telemetry Streaming 1.6.0, tagging is an actions array (the :ref:`old Tag property` is still available). Inside this actions array, you can add tagging objects. This table shows the parameters available for the Tag property. @@ -281,7 +281,7 @@ This table shows the parameters available for the Tag property. +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | enable | false | Boolean | This value is used to enable an action. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ifAllMatch | false | Object | This property contains conditions you specify for the tag. If you use this property, Telemetry Streaming verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for tagging to be performed. If you do not use this property, then the system tags everything in the **locations** property. | +| ifAllMatch | false | Object | This property contains conditions you specify for the tag. If you use this property, TS verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for tagging to be performed. If you do not use this property, then the system tags everything in the **locations** property. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | locations | false | Object | This property is used to specify where the tags should be applied. If you used ifAllMatch, and all of the conditions inside ifAllMatch pass, then the locations are where the tags are applied (or to default objects if no locations are provided). If you do not use this property, the following locations are used by default: virtualServers, pools, ltmPolicies, httpProfiles, clientSslProfiles, serverSslProfiles, networkTunnels, deviceGroups, and iRules. If you use this property with an empty array, no tagging occurs. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -325,7 +325,7 @@ Example declaration using setTag The following is an example declaration using the tagging action. In this example: -- Telemetry Streaming tags all **virtualServers** with the two tags in **setTag** if the conditions in **ifAllMatch** pass. +- BIG-IP Telemetry Streaming tags all **virtualServers** with the two tags in **setTag** if the conditions in **ifAllMatch** pass. - For the conditions in **ifAllMatch** to match, all **virtualServers** that match the regular expression ``.*``, must have the property that matches ``serverside.bits.*``. - If all the conditions pass, the two tags are applied. @@ -390,10 +390,10 @@ Note that you can still use ```A``` and ```T``` as tag values. For example: .. _oldtagproperty: -Tag property for TS versions prior to 1.6.0 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Tag property for BIG-IP TS versions prior to 1.6.0 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -For Telemetry streaming versions 1.5.0 and earlier, the **tag** property provides a way to add additional properties (key:value) to the output. If not provided, the property will default to: +For F5 BIG-IP Telemetry Streaming versions 1.5.0 and earlier, the **tag** property provides a way to add additional properties (key:value) to the output. If not provided, the property will default to: .. code-block:: json @@ -412,7 +412,7 @@ Using the includeData property ------------------------------ .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for **includeData** is available in TS 1.8.0 and later. + Support for **includeData** is available in BIG-IP TS 1.8.0 and later. You can use the **includeData** property to output only the data you specify, and exclude everything else. @@ -426,7 +426,7 @@ The following table shows the possible parameters for includeData. After the ta +======================+==========+==================+=========================================================================================================================================================================================================================================================================================+ | enable | false | Boolean | This value is used to enable an action. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ifAllMatch | false | Object | This property contains the conditions you specify for the includeData. If you use this property, Telemetry Streaming verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for includeData to be performed. | +| ifAllMatch | false | Object | This property contains the conditions you specify for the includeData. If you use this property, TS verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for includeData to be performed. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | locations | false | Object | This property is used to specify what data should be included. If you used ifAllMatch, and all of the conditions inside ifAllMatch pass, then the locations will be included. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -579,7 +579,7 @@ Using the excludeData property ------------------------------ .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for **excludeData** is available in TS 1.8.0 and later. + Support for **excludeData** is available in BIG-IP TS 1.8.0 and later. You can use the **excludeData** property to exclude only the data you specify, and include everything else. @@ -593,7 +593,7 @@ The following table shows the possible parameters for excludeData. After the ta +======================+==========+==================+=========================================================================================================================================================================================================================================================================================+ | enable | false | Boolean | This value is used to enable an action. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ifAllMatch | false | Object | This property contains the conditions you specify for the excludeData. If you use this property, Telemetry Streaming verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for excludeData to be performed. | +| ifAllMatch | false | Object | This property contains the conditions you specify for the excludeData. If you use this property, TS verifies the conditions inside ifAllMatch and checks against the data. All conditions inside this property must match the data for excludeData to be performed. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | locations | false | Object | This property is used to specify what data should be excluded. If you used ifAllMatch, and all of the conditions inside ifAllMatch pass, then the locations will be excluded. | +----------------------+----------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -690,7 +690,7 @@ And this is an example of the output from the Action definition. Example 2b ^^^^^^^^^^ -This example highlights how Telemetry Streaming treats a non-exact match as a regular expression (this example uses the same example without using excludeData). +This example highlights how BIG-IP Telemetry Streaming treats a non-exact match as a regular expression (this example uses the same example without using excludeData). This is an example of an excludeData Action definition: diff --git a/docs/declarations.rst b/docs/declarations.rst index 6d2a1c15..18a427da 100644 --- a/docs/declarations.rst +++ b/docs/declarations.rst @@ -2,7 +2,7 @@ Example Declarations ==================== -This section contains example Telemetry Streaming declarations. Use the index on the right to go directly to a specific declaration. +This section contains example F5 BIG-IP Telemetry Streaming declarations. Use the index on the right to go directly to a specific declaration. Base Declaration @@ -111,7 +111,7 @@ See :ref:`valuebased` for more information on this feature. Generic HTTP with multiple passphrases -------------------------------------- -If you require multiple secrets for the Generic HTTP consumer, TS supports defining an additional secret within ``Shared`` and referencing it using pointers as shown in this example. +If you require multiple secrets for the Generic HTTP consumer, BIG-IP TS supports defining an additional secret within ``Shared`` and referencing it using pointers as shown in this example. For more details about pointers see the section on :ref:`pointersyntax`. @@ -124,7 +124,7 @@ For more details about pointers see the section on :ref:`pointersyntax`. Specifying fallback hosts for Generic HTTP consumers ---------------------------------------------------- -Configuring fallback hosts for Generic HTTP consumers is supported as of TS 1.23 (was experimental in 1.14-1.22). +Configuring fallback hosts for Generic HTTP consumers is supported as of BIG-IP TS 1.23 (was experimental in 1.14-1.22). This example shows how you can use the **fallbackHosts** property to specify fallback IP address(es) for a consumer. @@ -139,13 +139,13 @@ Specifying proxy settings for Generic HTTP consumers ---------------------------------------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for configuring proxy settings is available in TS v1.17 and later + Support for configuring proxy settings is available in BIG-IP TS v1.17 and later -This example shows how you can configure proxy settings for Generic HTTP consumers (including :ref:`F5 Beacon`) in TS 1.17 and later. This allows you to send Telemetry Streaming data through a proxy. +This example shows how you can configure proxy settings for Generic HTTP consumers in BIG-IP TS 1.17 and later. This allows you to send Telemetry Streaming data through a proxy. For usage options, see |proxy| in the Schema Reference. -The following example also uses :doc:`Telemetry Streaming Namespaces`. The proxy lines are highlighted in the example. +The following example also uses :doc:`BIG-IP Telemetry Streaming Namespaces`. The proxy lines are highlighted in the example. .. literalinclude:: ../examples/declarations/generic_http_proxy.json @@ -163,11 +163,11 @@ Specifying proxy settings for Splunk consumers Support for configuring Splunk proxy settings is available in TS v1.17 and later -This example shows how you can configure proxy settings for :ref:`Splunk consumers` in TS 1.17 and later. This allows you to send Telemetry Streaming data through a proxy. +This example shows how you can configure proxy settings for :ref:`Splunk consumers` in BIG-IP TS 1.17 and later. This allows you to send BIG-IP Telemetry Streaming data through a proxy. For usage options, see |proxy| in the Schema Reference. -The following example also uses :doc:`Telemetry Streaming Namespaces`. The proxy lines are highlighted in the example. +The following example also uses :doc:`BIG-IP Telemetry Streaming Namespaces`. The proxy lines are highlighted in the example. .. literalinclude:: ../examples/declarations/splunk_proxy.json @@ -184,9 +184,9 @@ Generic HTTP consumer with TLS Client Authentication ---------------------------------------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for TLS client authentication with the Generic HTTP consumer is available in TS v1.18 and later + Support for TLS client authentication with the Generic HTTP consumer is available in BIG-IP TS v1.18 and later -This example shows how you can configure TLS client authentication for :ref:`Generic HTTP consumers` in a Telemetry Streaming declaration using version 1.18 and later. +This example shows how you can configure TLS client authentication for :ref:`Generic HTTP consumers` in a BIG-IP Telemetry Streaming declaration using version 1.18 and later. .. literalinclude:: ../examples/declarations/generic_http_tls_client_auth.json @@ -237,7 +237,7 @@ Customizing the Generic HTTP consumer payload Using the addTags property for the StatsD consumer -------------------------------------------------- -.. IMPORTANT:: The addTags property is available in TS v1.21.0 and later. See :ref:`StatsD addTags` for more information on this feature. +.. IMPORTANT:: The addTags property is available in BIG-IP TS v1.21.0 and later. See :ref:`StatsD addTags` for more information on this feature. The following example shows a declaration with a systemPoller, a Listener, and a StatsD consumer with **addTags** using the **sibling** method. @@ -353,10 +353,10 @@ Querying SNMP using a custom endpoint ------------------------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for SNMP for custom endpoints is available in TS v1.29 and later + Support for SNMP for custom endpoints is available in BIG-IP TS v1.29 and later -This example shows how you can query SNMP using a custom endpoint in a Telemetry Streaming declaration using version 1.29 and later. +This example shows how you can query SNMP using a custom endpoint in a BIG-IP Telemetry Streaming declaration using version 1.29 and later. See :doc:`custom-endpoints` for more information on this feature. diff --git a/docs/deleting-ts-config.rst b/docs/deleting-ts-config.rst index 2c7994e0..d6c9cf56 100644 --- a/docs/deleting-ts-config.rst +++ b/docs/deleting-ts-config.rst @@ -1,8 +1,8 @@ .. _delete-ts: -Deleting the Telemetry Streaming configuration ----------------------------------------------- -If you want to delete the TS configuration, simply send a POST request to **/telemetry/declare** with the following in the Body of the request: +Deleting the F5 BIG-IP Telemetry Streaming configuration +-------------------------------------------------------- +If you want to delete the BIG-IP TS configuration, simply send a POST request to **/telemetry/declare** with the following in the Body of the request: .. code-block:: json @@ -11,4 +11,4 @@ If you want to delete the TS configuration, simply send a POST request to **/tel } -The configuration produced by Telemetry Streaming will be deleted. \ No newline at end of file +The configuration produced by BIG-IP Telemetry Streaming will be deleted. \ No newline at end of file diff --git a/docs/event-listener.rst b/docs/event-listener.rst index 1df988f9..76eb7ea1 100644 --- a/docs/event-listener.rst +++ b/docs/event-listener.rst @@ -3,14 +3,14 @@ Event Listener class ==================== -The Telemetry Streaming Event Listener collects event logs it receives on the specified port from configured BIG-IP sources, including LTM, ASM, AFM, APM, and AVR. +The BIG-IP Telemetry Streaming Event Listener collects event logs it receives on the specified port from configured BIG-IP sources, including LTM, ASM, AFM, APM, and AVR. .. NOTE:: Each **Telemetry_Event_Listener** opens 3 ports: TCP (dual stack - IPv4 and IPv6), UDPv4, and UDPv6 |br| If two or more Event Listeners use same port, all of them receive same events, but you can still use filters for each listener individually. To use the Event Listener, you must: -1. Configure the sources of log/event data. You can do this by either POSTing a single AS3 declaration or you can use TMSH or the GUI to configure individual modules. +1. Configure the sources of log/event data. You can do this by either POSTing a single BIG-IP AS3 declaration or you can use TMSH or the GUI to configure individual modules. 2. Post a telemetry declaration with the Telemetry_Listener class, as shown in the following minimal example of an Event Listener: @@ -23,12 +23,13 @@ To use the Event Listener, you must: } -Tracing can also can be optionally enabled for each Telemetry Streaming Listener, using the **trace** property. By default, tracing is disabled (the **trace** property defaults to **false**), but can be enabled by setting the property to **true**, or to a string value representing a valid operating system path (for example: ``/var/telemetry/myTraceFile.json``). When tracing is enabled, the Listener will write the data it receives (after Telemetry Streaming has processed and normalized the data) to disk. Telemetry Streaming 1.20.0 and later also includes the ability to trace the raw input data (before Telemetry Streaming has processed the data). For more information and instructions, see :ref:`Trace`. +Tracing can also can be optionally enabled for each BIG-IP Telemetry Streaming Listener, using the **trace** property. +By default, tracing is disabled (the **trace** property defaults to **false**), but can be enabled by setting the property to **true**, or to a string value representing a valid operating system path (for example: ``/var/telemetry/myTraceFile.json``). When tracing is enabled, the Listener will write the data it receives (after BIG-IP Telemetry Streaming has processed and normalized the data) to disk. BIG-IP Telemetry Streaming 1.20.0 and later also includes the ability to trace the raw input data (before BIG-IP Telemetry Streaming has processed the data). For more information and instructions, see :ref:`Trace`. IMPORTANT: -- The following configuration examples assume that TS is running on the same BIG-IP that is being monitored, and that the listener is using default port 6514. -- When TS is not a local listener, the corresponding configurations should be adjusted to reflect remote addresses. +- The following configuration examples assume that BIG-IP TS is running on the same BIG-IP that is being monitored, and that the listener is using default port 6514. +- When BIG-IP TS is not a local listener, the corresponding configurations should be adjusted to reflect remote addresses. .. NOTE:: See :ref:`this troubleshooting entry` for information on how to write an Event Listener's incoming raw data to a trace file to assist with troubleshooting. @@ -41,7 +42,7 @@ Configuring Logging Sources --------------------------- General workflow to configure a logging source: -- Define a local virtual address and specify the Event Listener port (this enables TS to act as a local, on-box listener) +- Define a local virtual address and specify the Event Listener port (this enables BIG-IP TS to act as a local, on-box listener) - Define a pool of logging servers - Create an unformatted high speed logging destination that references the pool - Create a formatted destination @@ -56,16 +57,16 @@ The following diagram shows the relationship of the objects that are configured: .. _as3logging-ref: -Configure Logging Using AS3 -``````````````````````````` +Configure Logging Using BIG-IP AS3 +`````````````````````````````````` -You can use the following declaration with Application Services Extension (AS3) 3.10.0 or later for a standard BIG-IP system. For more information, see |as3docs|. +You can use the following declaration with F5 BIG-IP Application Services Extension (BIG-IP AS3) 3.10.0 or later for a standard BIG-IP system. For more information, see |as3docs|. You can also configure logging using TMSH, see :ref:`configuretmsh`. -.. NOTE:: Some profiles are not supported in AS3 and therefore must be configured using TMSH. +.. NOTE:: Some profiles are not supported in BIG-IP AS3 and therefore must be configured using TMSH. -**IMPORTANT**: This declaration has been updated with the TS 1.18 release to include LTM response logging (highlighted in yellow). +**IMPORTANT**: This declaration has been updated with the BIG-IP TS 1.18 release to include LTM response logging (highlighted in yellow). .. literalinclude:: ../examples/misc/application_services_3/all_log_profile.json :language: json @@ -231,7 +232,7 @@ To configure an LTM request profile, use the following TMSH commands: | -Example Output from Telemetry Streaming: +Example Output from BIG-IP Telemetry Streaming: .. literalinclude:: ../examples/output/request_logs/ltm_request_log.json :language: json @@ -248,7 +249,7 @@ To configure carrier-grade network address translation (CGNAT), use the followin 1. Configure the BIG-IP to send log messages about CGNAT processes. For instructions, see the CGNAT Implementations guide chapter on logging for your BIG-IP version. For example, for BIG-IP 14.0, see |cgnatdocs|. Make sure of the following: - - The Large Scale NAT (LSN) Pool must use the Telemetry Streaming Log Publisher you created (**telemetry_publisher** if you used the AS3 example to configure TS logging). |br| If you have an existing pool, update the pool to use the TS Log Publisher: + - The Large Scale NAT (LSN) Pool must use the BIG-IP Telemetry Streaming Log Publisher you created (**telemetry_publisher** if you used the BIG-IP AS3 example to configure BIG-IP TS logging). |br| If you have an existing pool, update the pool to use the BIG-IP TS Log Publisher: - TMSH:|br| ``modify ltm lsn-pool cgnat_lsn_pool log-publisher telemetry_publisher`` - GUI:|br| **Carrier Grade NAT > LSN Pools > LSN Pools List** |br| |br| @@ -298,7 +299,7 @@ AFM Request Log profile | -Example output from Telemetry Streaming: +Example output from BIG-IP Telemetry Streaming: .. literalinclude:: ../examples/output/request_logs/afm_request_log.json :language: json @@ -325,7 +326,7 @@ ASM Log | -Example Output from Telemetry Streaming: +Example Output from BIG-IP Telemetry Streaming: .. literalinclude:: ../examples/output/request_logs/asm_request_log.json :language: json @@ -354,7 +355,7 @@ APM Log | -Example Output from Telemetry Streaming: +Example Output from BIG-IP Telemetry Streaming: .. literalinclude:: ../examples/output/request_logs/apm_request_log.json :language: json @@ -407,7 +408,7 @@ Example output: Character Encoding information ------------------------------ -F5 logs may contain various character encoding or byte streams that include illegal characters for a specific encoding, or invalid UTF-8 strings. Telemetry Streaming does not currently enforce validation of the data that an event listener receives. It simply attempts to convert the raw input it receives into a JSON-formatted string for forwarding. +F5 logs may contain various character encoding or byte streams that include illegal characters for a specific encoding, or invalid UTF-8 strings. BIG-IP TS does not currently enforce validation of the data that an event listener receives. It simply attempts to convert the raw input it receives into a JSON-formatted string for forwarding. .. NOTE:: Varying character encodings and illegal characters in the byte streams are very common in BIG-IP ASM logs. diff --git a/docs/faq.rst b/docs/faq.rst index 66ce9b8e..3cf8e8a5 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -2,11 +2,11 @@ Frequently Asked Questions (FAQ) -------------------------------- -**What is Telemetry Streaming?** +**What is F5 BIG-IP Telemetry Streaming?** -Telemetry Streaming (TS) is an iControl LX Extension delivered as a TMOS-independent RPM file. Installing the TS Extension on BIG-IP enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application. You can do all of this by POSTing a single TS JSON declaration to Telemetry Streaming's declarative REST API endpoint. +F5 BIG-IP Telemetry Streaming (BIG-IP TS) is an iControl LX Extension delivered as a TMOS-independent RPM file. Installing the BIG-IP TS Extension on BIG-IP enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application. You can do all of this by POSTing a single TS JSON declaration to BIG-IP Telemetry Streaming's declarative REST API endpoint. -*Telemetry Streaming is:* +*F5 BIG-IP Telemetry Streaming is:* - A javascript |ilx| plug-in - A project based on the intent of the |iapp| @@ -19,20 +19,20 @@ Telemetry Streaming (TS) is an iControl LX Extension delivered as a TMOS-indepen | -**Where can I download Telemetry Streaming?** +**Where can I download F5 BIG-IP Telemetry Streaming?** -Telemetry Streaming is available on |github| and is F5-supported. +F5 BIG-IP Telemetry Streaming is available on |github| and is F5-supported. | -**When is Telemetry Streaming a good fit and when it is not?** +**When is F5 BIG-IP Telemetry Streaming a good fit and when it is not?** -*Telemetry Streaming is a good fit where:* +*F5 BIG-IP Telemetry Streaming is a good fit where:* - You require a simple method to send stats/events to external analytics consumers -*Telemetry Streaming may not be a good fit where:* +*F5 BIG-IP Telemetry Streaming may not be a good fit where:* - Declarative interface is not desirable - Organization is unwilling or unable to deploy iControl Extension RPM on BIG-IP @@ -40,69 +40,69 @@ Telemetry Streaming is available on |github| and is F5-supported. | -**Which TMOS versions does Telemetry Streaming support?** +**Which TMOS versions does F5 BIG-IP Telemetry Streaming support?** -Telemetry Streaming supports TMOS 13.x and later. +F5 BIG-IP Telemetry Streaming supports TMOS 13.x and later. | -**How do I get started with Telemetry Streaming?** +**How do I get started with F5 BIG-IP Telemetry Streaming?** -See the :doc:`quick-start` to jump right into using TS. +See the :doc:`quick-start` to jump right into using BIG-IP TS. | -**What is a "Telemetry Streaming Declaration"?** +**What is a "F5 BIG-IP Telemetry Streaming Declaration"?** -- Telemetry Streaming uses a declarative model, meaning you provide a JSON declaration rather than a set of imperative commands. -- Telemetry Streaming is well-defined according to the rules of the JSON Schema, and validates declarations according to the JSON Schema. +- F5 BIG-IP Telemetry Streaming uses a declarative model, meaning you provide a JSON declaration rather than a set of imperative commands. +- F5 BIG-IP Telemetry Streaming is well-defined according to the rules of the JSON Schema, and validates declarations according to the JSON Schema. | -**What is the delivery cadence for Telemetry Streaming?** +**What is the delivery cadence for F5 BIG-IP Telemetry Streaming?** -Telemetry Streaming releases are intended to be delivered on a 6-week basis. +F5 BIG-IP Telemetry Streaming releases are intended to be delivered on a 6-week basis. | .. _upgrade-ref: -**What if I upgrade my BIG-IP system, how to I migrate my Telemetry Streaming configuration?** +**What if I upgrade my BIG-IP system, how to I migrate my F5 BIG-IP Telemetry Streaming configuration?** -When you upgrade your BIG-IP system, you simply install Telemetry Streaming on the upgraded BIG-IP system and re-deploy your declaration. For example, you installed Telemetry Streaming on your BIG-IP running version 13.1 and deployed a declaration. You decide to upgrade your BIG-IP system to 14.1. Once the upgrade to 14.1 is complete, you must install Telemetry Streaming on the BIG-IP. After you install Telemetry Streaming, you send the same declaration you used pre-upgrade to the 13.1 BIG-IP system. Your upgraded BIG-IP will then have the same configuration as the previous version. +When you upgrade your BIG-IP system, you simply install F5 BIG-IP Telemetry Streaming on the upgraded BIG-IP system and re-deploy your declaration. For example, you installed BIG-IP Telemetry Streaming on your BIG-IP running version 13.1 and deployed a declaration. You decide to upgrade your BIG-IP system to 14.1. Once the upgrade to 14.1 is complete, you must install BIG-IP Telemetry Streaming on the BIG-IP. After you install BIG-IP Telemetry Streaming, you send the same declaration you used pre-upgrade to the 13.1 BIG-IP system. Your upgraded BIG-IP will then have the same configuration as the previous version. | -**What happens on the front-end and back-end of Telemetry Streaming?** +**What happens on the front-end and back-end of F5 BIG-IP Telemetry Streaming?** - *Front-end*: - Telemetry Streaming exposes a declarative iControl LX REST API on the front-end: /mgmt/shared/telemetry/declare. + F5 BIG-IP Telemetry Streaming exposes a declarative iControl LX REST API on the front-end: /mgmt/shared/telemetry/declare. - *Back-end*: - Telemetry Streaming uses iControl REST APIs on the back-end to communicate with BIG-IP. Telemetry Streaming can use 3rd party REST APIs to communicate with 3rd party systems, enabling integration opportunities. + F5 BIG-IP Telemetry Streaming uses iControl REST APIs on the back-end to communicate with BIG-IP. F5 BIG-IP Telemetry Streaming can use 3rd party REST APIs to communicate with 3rd party systems, enabling integration opportunities. | -**How do I report issues, feature requests, and get help with Telemetry Streaming?** +**How do I report issues, feature requests, and get help with F5 BIG-IP Telemetry Streaming?** -- You can use |issues| to submit feature requests or problems with Telemetry Streaming. +- You can use |issues| to submit feature requests or problems with F5 BIG-IP Telemetry Streaming. | .. _statsinfo: -**Does Telemetry Streaming collect any usage data?** +**Does F5 BIG-IP Telemetry Streaming collect any usage data?** -Telemetry Streaming gathers non-identifiable usage data for the purposes of improving the product as outlined in the end user license agreement for BIG-IP. To opt out of data collection, disable BIG-IP system's phone home feature as described in |phone|. +F5 BIG-IP Telemetry Streaming gathers non-identifiable usage data for the purposes of improving the product as outlined in the end user license agreement for BIG-IP. To opt out of data collection, disable BIG-IP system's phone home feature as described in |phone|. | .. _encodinginfo: -**How do Telemetry Streaming event listeners handle character encoding and illegal characters?** +**How do F5 BIG-IP Telemetry Streaming event listeners handle character encoding and illegal characters?** -Telemetry Streaming does not currently enforce validation of the data that an event listener receives. It simply attempts to convert the raw input it receives into a JSON-formatted string for forwarding. +F5 BIG-IP Telemetry Streaming does not currently enforce validation of the data that an event listener receives. It simply attempts to convert the raw input it receives into a JSON-formatted string for forwarding. For complete information and examples, see :ref:`char-encoding`. @@ -112,17 +112,17 @@ For complete information and examples, see :ref:`char-encoding`. **What is F5's Automation Toolchain API Contract?** -The API Contract for the F5 Automation Toolchain (Telemetry Streaming, AS3, and Declarative Onboarding) is our assurance that we will not make arbitrary breaking changes to our API. We take this commitment seriously. We semantically version our declarative API schemas ("xx.yy.zz") and do not make breaking changes within a minor ("yy") or patch ("zz") releases. For example, early declarations using AS3 schema "3.0.0" are accepted by all subsequent minor releases including "3.16.0." +The API Contract for the F5 Automation Toolchain (BIG-IP Telemetry Streaming, BIG-IP AS3, and BIG-IP Declarative Onboarding) is our assurance that we will not make arbitrary breaking changes to our API. We take this commitment seriously. We semantically version our declarative API schemas ("xx.yy.zz") and do not make breaking changes within a minor ("yy") or patch ("zz") releases. For example, early declarations using AS3 schema "3.0.0" are accepted by all subsequent minor releases including "3.16.0." -As of January 2020, no breaking changes have been made to AS3, Declarative Onboarding, or Telemetry Streaming since inception. None are anticipated at this time. A breaking change, if any, will be noted by a change to the major release number ("xx"). For example, the AS3 schema version would become "4.0.0." +As of January 2020, no breaking changes have been made to BIG-IP AS3, BIG-IP Declarative Onboarding, or F5 BIG-IP Telemetry Streaming since inception. None are anticipated at this time. A breaking change, if any, will be noted by a change to the major release number ("xx"). For example, the BIG-IP AS3 schema version would become "4.0.0." | .. _viprion: -**Can I use Telemetry Streaming on F5 devices with multiple hosts, such as the Viprion platform?** +**Can I use F5 BIG-IP Telemetry Streaming on F5 devices with multiple hosts, such as the Viprion platform?** -Beginning with TS v1.10.0, you can use Telemetry Streaming on F5 devices with multiple hosts, such as the Viprion platform and vCMP systems. In versions prior to v1.10, devices with multiple hosts were not supported. +Beginning with TS v1.10.0, you can use F5 BIG-IP Telemetry Streaming on F5 devices with multiple hosts, such as the Viprion platform and vCMP systems. In versions prior to v1.10, devices with multiple hosts were not supported. | diff --git a/docs/http-methods.rst b/docs/http-methods.rst index 855bc00b..20f20456 100644 --- a/docs/http-methods.rst +++ b/docs/http-methods.rst @@ -1,10 +1,10 @@ HTTP Methods ------------ -This section contains the current HTTP methods available with Telemetry Streaming. +This section contains the current HTTP methods available with F5 BIG-IP Telemetry Streaming. POST ~~~~ -To send your declaration to Telemetry Streaming, use the POST method to the URI +To send your declaration to F5 BIG-IP Telemetry Streaming, use the POST method to the URI ``https:///mgmt/telemetry/declare`` and put your declaration in the body of the post. If successful, you see a success message, and the system echoes your declaration back to you. In addition to deploying a declaration, @@ -15,7 +15,7 @@ index of saved declarations. GET ~~~ You can use the GET method to retrieve the declarations you previously sent to -Telemetry Streaming. Use the GET method to the URI +F5 BIG-IP Telemetry Streaming. Use the GET method to the URI ``https:///mgmt/telemetry/declare``. Only declarations you create -in Telemetry Streaming return, GET does not return anything that was not created by Telemetry Streaming. +in F5 BIG-IP Telemetry Streaming return, GET does not return anything that was not created by F5 BIG-IP Telemetry Streaming. diff --git a/docs/images/beacon-logo.png b/docs/images/beacon-logo.png deleted file mode 100644 index 76194483..00000000 Binary files a/docs/images/beacon-logo.png and /dev/null differ diff --git a/docs/index.rst b/docs/index.rst index ef59b70e..d62a3249 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,22 +1,22 @@ -F5 Telemetry Streaming -====================== +F5 BIG-IP Telemetry Streaming +============================= -Welcome to the F5 Telemetry Streaming User Guide. To provide feedback on this documentation, you can file a GitHub Issue, or email us at solutionsfeedback@f5.com. |br| +Welcome to the F5 BIG-IP Telemetry Streaming User Guide. To provide feedback on this documentation, you can file a GitHub Issue, or email us at solutionsfeedback@f5.com. |br| .. IMPORTANT:: This the documentation for the **latest** version of Telemetry Streaming, if you want to see the documentation for a long term support (LTS) version, use the version selector on the top left (for details, see |supportmd|). Introduction ------------ -Telemetry Streaming (TS) enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application. Telemetry Streaming is an iControl LX Extension delivered as a TMOS-independent RPM file, and uses a declarative model, meaning you provide a JSON declaration rather than a set of imperative commands. To use Telemetry Streaming, you POST a single JSON declaration to Telemetry Streaming's declarative REST API endpoint. +F5 BIG-IP Telemetry Streaming (BIG-IP TS) enables you to declaratively aggregate, normalize, and forward statistics and events from the BIG-IP to a consumer application. BIG-IP Telemetry Streaming is an iControl LX Extension delivered as a TMOS-independent RPM file, and uses a declarative model, meaning you provide a JSON declaration rather than a set of imperative commands. To use BIG-IP TS, you POST a single JSON declaration to BIG-IP TS's declarative REST API endpoint. -See our Telemetry Streaming overview video: +See our BIG-IP Telemetry Streaming overview video: |video| | -This guide contains information on downloading, installing, and using the Telemetry Streaming Extension. Use the navigation panes, and/or the Next and +This guide contains information on downloading, installing, and using the BIG-IP Telemetry Streaming Extension. Use the navigation panes, and/or the Next and Previous buttons to explore the documentation. You can click the following links to go directly to a specific :doc:`setting-up-consumer` or :doc:`pull-consumers`: @@ -72,10 +72,6 @@ You can click the following links to go directly to a specific :doc:`setting-up- - yes - yes - * - :ref:`F5 Beacon` - - yes - - yes - * - :ref:`fluentd-ref` - yes - yes @@ -115,7 +111,7 @@ You can click the following links to go directly to a specific :doc:`setting-up- .. toctree:: - :caption: Telemetry Streaming: + :caption: F5 BIG-IP Telemetry Streaming: :hidden: :glob: :maxdepth: 1 diff --git a/docs/installation.rst b/docs/installation.rst index fab8b505..b31eb5b2 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -1,29 +1,29 @@ .. _installation: -Downloading and installing Telemetry Streaming -============================================== +Downloading and installing F5 BIG-IP Telemetry Streaming +======================================================== -The Telemetry Streaming package is an RPM file you download, and then upload to the BIG-IP system using the iControl/iApp LX framework. Alternatively, you can see our :doc:`quick-start`. +The F5 BIG-IP Telemetry Streaming package is an RPM file you download, and then upload to the BIG-IP system using the iControl/iApp LX framework. Alternatively, you can see our :doc:`quick-start`. Downloading the RPM file ------------------------ The first task is to download the latest RPM file. Go to the |github|, and download the latest (highest numbered) RPM file. -.. IMPORTANT:: Beginning with TS 1.7.0, the RPM and checksum files will no longer be located in the **/dist** directory in the Telemetry Streaming repository on GitHub. These files can be found on the |release|, as **Assets**. You can find historical files on GitHub by using the **Branch** drop-down, clicking the **Tags** tab, and then selecting the appropriate release. +.. IMPORTANT:: Beginning with BIG-IP TS 1.7.0, the RPM and checksum files will no longer be located in the **/dist** directory in the BIG-IP Telemetry Streaming repository on GitHub. These files can be found on the |release|, as **Assets**. You can find historical files on GitHub by using the **Branch** drop-down, clicking the **Tags** tab, and then selecting the appropriate release. -Uploading and installing the Telemetry Streaming file on the BIG-IP -------------------------------------------------------------------- +Uploading and installing the BIG-IP Telemetry Streaming file +------------------------------------------------------------ After you download the RPM, you must upload and then install it on your BIG-IP system. You can use the BIG-IP Configuration utility or cURL (you can alternatively use SCP to upload the file to **/var/config/rest/downloads**, but you would still have to use cURL command to install the package). Use only one of the following procedures. .. _installgui-ref: -Installing Telemetry Streaming using the BIG-IP Configuration utility -````````````````````````````````````````````````````````````````````` +Installing F5 BIG-IP Telemetry Streaming using the BIG-IP Configuration utility +``````````````````````````````````````````````````````````````````````````````` From the Configuration utility: 1. If you are using a BIG-IP version prior to 14.0, before you can use the Configuration utility, you must enable the framework using the BIG-IP command line. From the CLI, type the following command: ``touch /var/config/rest/iapps/enable``. You only need to run this command once (per BIG-IP system). -2. Click **iApps > Package Management LX**. Your Telemetry Streaming version number may be different than the one shown in the following example. +2. Click **iApps > Package Management LX**. Your BIG-IP Telemetry Streaming version number may be different than the one shown in the following example. .. image:: /images/install1.png @@ -41,10 +41,10 @@ From the Configuration utility: .. _installcurl-ref: -Installing Telemetry Streaming using cURL from the Linux shell -`````````````````````````````````````````````````````````````` +Installing F5 BIG-IP Telemetry Streaming using cURL from the Linux shell +```````````````````````````````````````````````````````````````````````` -If you want to use cURL to install Telemetry Streaming, use the following command syntax. First, set the file name and the BIG-IP IP address and credentials, making sure you use the appropriate RPM file name, including build number (36 in the following example), and BIG-IP credentials. +If you want to use cURL to install BIG-IP TS, use the following command syntax. First, set the file name and the BIG-IP IP address and credentials, making sure you use the appropriate RPM file name, including build number (36 in the following example), and BIG-IP credentials. .. code-block:: shell @@ -77,23 +77,23 @@ Copy the following commands to install the package. | -Updating Telemetry Streaming ----------------------------- -When F5 releases a new version of Telemetry Streaming, use the same procedure you used to initially install the RPM. For example, if you used the Configuration utility, when you click Import and then select the new RPM, the system recognizes you are upgrading Telemetry: +Updating F5 BIG-IP Telemetry Streaming +-------------------------------------- +When F5 releases a new version of F5 BIG-IP Telemetry Streaming, use the same procedure you used to initially install the RPM. For example, if you used the Configuration utility, when you click Import and then select the new RPM, the system recognizes you are upgrading Telemetry: -Reverting to a previous version of Telemetry Streaming ------------------------------------------------------- -If for any reason you want to revert to a previous version of Telemetry Streaming, you must first remove the version of Telemetry Streaming on your BIG-IP system (:guilabel:`iApps > Package Management LX > f5-telemetry > Uninstall`). After you uninstall, you can import the RPM for the version of Telemetry Streaming you want to use. +Reverting to a previous version of F5 BIG-IP Telemetry Streaming +---------------------------------------------------------------- +If for any reason you want to revert to a previous version of F5 BIG-IP Telemetry Streaming, you must first remove the version of F5 BIG-IP Telemetry Streaming on your BIG-IP system (:guilabel:`iApps > Package Management LX > f5-telemetry > Uninstall`). After you uninstall, you can import the RPM for the version of BIG-IP Telemetry Streaming you want to use. | .. _hash-ref: -Verifying the integrity of the Telemetry RPM package ----------------------------------------------------- -F5 Networks provides a checksum for each of our Telemetry Streaming releases so you can confirm the integrity of the RPM package. +Verifying the integrity of the F5 BIG-IP Telemetry RPM package +-------------------------------------------------------------- +F5 Networks provides a checksum for each of our F5 BIG-IP Telemetry Streaming releases so you can confirm the integrity of the RPM package. You can get a checksum for a particular template by running one of the following commands, depending on your operating system: diff --git a/docs/logging.rst b/docs/logging.rst index a36e4caa..553b480d 100644 --- a/docs/logging.rst +++ b/docs/logging.rst @@ -3,7 +3,7 @@ Logging ======= -Telemetry Streaming logs to **/var/log/restnoded.log**. +F5 BIG-IP Telemetry Streaming logs to **/var/log/restnoded.log**. The logging level is set in the "controls" class with possible values of "debug", "info", and "error". The default value is **info**. To change the logging level, submit the declaration with logLevel set to the preferred value. .. code-block:: json diff --git a/docs/namespaces.rst b/docs/namespaces.rst index f0d1ab93..2f9a8477 100644 --- a/docs/namespaces.rst +++ b/docs/namespaces.rst @@ -1,8 +1,8 @@ -Telemetry Streaming Namespaces -============================== -.. NOTE:: Using Telemetry Streaming Namespaces is supported as of TS 1.23 (was experimental in 1.16-1.22). +F5 BIG-IP Telemetry Streaming Namespaces +======================================== +.. NOTE:: Using F5 BIG-IP Telemetry Streaming Namespaces is supported as of BIG-IP TS 1.23 (was experimental in 1.16-1.22). -Telemetry Streaming v1.16 introduced the concept of *namespaces*, which is a grouping of Telemetry components. With namespaces, you can declare separate configurations to allow better control of data forwarding. Any System Pollers or Event Listeners defined within a namespace will only forward data to the Consumers within that same Namespace. +F5 BIG-IP Telemetry Streaming v1.16 introduced the concept of *namespaces*, which is a grouping of Telemetry components. With namespaces, you can declare separate configurations to allow better control of data forwarding. Any System Pollers or Event Listeners defined within a namespace will only forward data to the Consumers within that same Namespace. Namespaces are declared in the new **Telemetry_Namespace** class, which acts as the container for the namespace. @@ -15,11 +15,11 @@ The following are important notes about namespaces. - You must send a full declaration to **/telemetry/declare**. If there are multiple namespaces, you must declare them all in the POST body, otherwise, they are omitted. To configure a single namespace, see :ref:`namespaceEP`. - All namespaces inherit the top level **controls** object. - For pull consumers: If you declare a pull consumer under a namespace, the URI to get the data should specify the namespace in path, for example **/mgmt/shared/telemetry/namespace/${namespaceName}/pullconsumer/${pullConsumerName}** -- In Telemetry Streaming v1.19 and later, you cannot have a namespace name that is the same as the name of any other Telemetry class type in the default namespace, if you do, Telemetry Streaming returns an error. However, you can have a namespace name that is the same as the name of another Telemetry class type in another (non-default) namespace. +- In F5 BIG-IP Telemetry Streaming v1.19 and later, you cannot have a namespace name that is the same as the name of any other Telemetry class type in the default namespace, if you do, BIG-IP Telemetry Streaming returns an error. However, you can have a namespace name that is the same as the name of another Telemetry class type in another (non-default) namespace. | -The following examples show how you can use namespaces in your Telemetry Streaming declarations. +The following examples show how you can use namespaces in your F5 BIG-IP Telemetry Streaming declarations. Basic declaration with namespace only ------------------------------------- @@ -62,7 +62,7 @@ The lines that are not highlighted in the example are all part of the default na Namespace-specific endpoints ---------------------------- -Telemetry Streaming 1.18 and later introduced new endpoints specific to individual namespaces. Using this endpoint allows you to configure a specific namespace without needing to know about other namespaces. +F5 BIG-IP Telemetry Streaming 1.18 and later introduced new endpoints specific to individual namespaces. Using this endpoint allows you to configure a specific namespace without needing to know about other namespaces. The following table describes the endpoint and request types you can use. diff --git a/docs/output-example.rst b/docs/output-example.rst index 16c9321d..e545b9ad 100644 --- a/docs/output-example.rst +++ b/docs/output-example.rst @@ -3,7 +3,7 @@ Example Output ============== -Use this page to see the type of information that Telemetry Streaming collects. Use the links in the right pane to find a particular example. +Use this page to see the type of information that F5 BIG-IP Telemetry Streaming collects. Use the links in the right pane to find a particular example. .. IMPORTANT:: The following are just examples; the actual fields will vary depending on factors such as how the log/event source is configured, BIG-IP versions, and so on. @@ -13,18 +13,18 @@ Use this page to see the type of information that Telemetry Streaming collects. System Information ------------------ -The following shows the system information that Telemetry Streaming collects. +The following shows the system information that F5 BIG-IP Telemetry Streaming collects. -.. NOTE:: In Telemetry Streaming 1.24 and later, properties that require the bash endpoint are skipped if bash is not available on the target BIG-IP: system.diskStorage, system.diskLatency, system.apmState, and all tmstats properties (used with “Splunk legacy” format). +.. NOTE:: In F5 BIG-IP Telemetry Streaming 1.24 and later, properties that require the bash endpoint are skipped if bash is not available on the target BIG-IP: system.diskStorage, system.diskLatency, system.apmState, and all tmstats properties (used with “Splunk legacy” format). **Additional properties** |br| -The following properties were introduced in recent Telemetry Streaming versions. These properties do not appear in the output in previous versions. The following table shows the TS version the property was introduced, the type of output, and property (with description if applicable). +The following properties were introduced in recent F5 BIG-IP Telemetry Streaming versions. These properties do not appear in the output in previous versions. The following table shows the BIG-IP TS version the property was introduced, the type of output, and property (with description if applicable). .. list-table:: :widths: 20 20 200 :header-rows: 1 - * - TS Version + * - Version - Type - Property @@ -75,7 +75,7 @@ iHealth Information Request LTM Request Log --------------- -.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by Telemetry Streaming, they must be configured with AS3 or another method. +.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by BIG-IP Telemetry Streaming, they must be configured with BIG-IP AS3 or another method. .. literalinclude:: ../examples/output/request_logs/ltm_request_log.json :language: json @@ -86,7 +86,7 @@ LTM Request Log AFM Request Log --------------- -.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by Telemetry Streaming, they must be configured with AS3 or another method. +.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by BIG-IP Telemetry Streaming, they must be configured with BIG-IP AS3 or another method. .. literalinclude:: ../examples/output/request_logs/afm_request_log.json :language: json @@ -98,7 +98,7 @@ AFM Request Log ASM Request Log --------------- -.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by Telemetry Streaming, they must be configured with AS3 or another method. +.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by BIG-IP Telemetry Streaming, they must be configured with BIG-IP AS3 or another method. .. literalinclude:: ../examples/output/request_logs/asm_request_log.json :language: json @@ -110,9 +110,9 @@ ASM Request Log APM Request Log --------------- -.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by Telemetry Streaming, they must be configured with AS3 or another method. +.. NOTE:: Log streams from LTM, AFM, ASM, and APM are not configured by BIG-IP Telemetry Streaming, they must be configured with BIG-IP AS3 or another method. -**New**: Telemetry Streaming 1.17 adds a timestamp, highlighted in yellow. You will not see this output in versions prior to 1.17. +**New**: F5 BIG-IP Telemetry Streaming 1.17 adds a timestamp, highlighted in yellow. You will not see this output in versions prior to 1.17. .. literalinclude:: ../examples/output/request_logs/apm_request_log.json :language: json diff --git a/docs/prereqs.rst b/docs/prereqs.rst index ae7c15cd..610a80c3 100644 --- a/docs/prereqs.rst +++ b/docs/prereqs.rst @@ -1,12 +1,12 @@ Prerequisites and Requirements ------------------------------ -The following are prerequisites for using Telemetry Streaming: +The following are prerequisites for using F5 BIG-IP Telemetry Streaming: -- You must be using BIG-IP version 13.1 or later to use Telemetry Streaming. - Telemetry Streaming is not intended to work on BIG-IP versions that have reached End of Life. +- You must be using BIG-IP version 13.1 or later to use F5 BIG-IP Telemetry Streaming. + F5 BIG-IP Telemetry Streaming is not intended to work on BIG-IP versions that have reached End of Life. See `here `_ for more information about BIG-IP versions supported by F5. -- To install and configure Telemetry Streaming, your BIG-IP user account must have the **Administrator** +- To install and configure F5 BIG-IP Telemetry Streaming, your BIG-IP user account must have the **Administrator** role. - See the :ref:`prometheus` documentation for more information on configuring a read-only account for pull consumers diff --git a/docs/pull-consumers.rst b/docs/pull-consumers.rst index bc0ce5ef..7258dbb4 100644 --- a/docs/pull-consumers.rst +++ b/docs/pull-consumers.rst @@ -8,10 +8,10 @@ Use this section to find example declarations and notes for pull-based monitorin About Pull Consumers -------------------- -Telemetry Streaming 1.11 introduced a *pull* consumer to support pull-based monitoring systems using a new class called **Telemetry_Pull_Consumer**. External systems can use this Pull API to pull/scrape for metrics. +F5 BIG-IP Telemetry Streaming 1.11 introduced a *pull* consumer to support pull-based monitoring systems using a new class called **Telemetry_Pull_Consumer**. External systems can use this Pull API to pull/scrape for metrics. -- Telemetry Streaming Pull Consumers expose a new HTTP API, which can be scraped for metrics. -- You can only pull data from Systems and/or System Pollers that are already defined through a Telemetry Streaming declaration. +- F5 BIG-IP Telemetry Streaming Pull Consumers expose a new HTTP API, which can be scraped for metrics. +- You can only pull data from Systems and/or System Pollers that are already defined through an F5 BIG-IP Telemetry Streaming declaration. - With TS 1.11, you can set a Telemetry_System_Poller **interval=0**. This disables the background polling process, but keeps the Poller enabled. Using interval=0 on a Poller allows for the Poller to only collect data from a BIG-IP when the Pull Consumer API endpoint is scraped, so that the Poller doesn't collect data from a BIG-IP when it is not needed. - If a Poller is used for both a Pull Consumer and a Push Consumer, the interval will need to be set to a non-zero number of seconds, so that the background polling process will collect data and push it to the configured Push Consumers. - Each Pull Consumer must reference, via the systemPoller property, which Telemetry_System_Poller the Pull Consumer will collect data from when the Pull Consumer HTTP API is called. This can be configured as a single systemPoller, or as an array of systemPollers, using the name of the configured System Poller. @@ -33,7 +33,7 @@ See |pullref| in the Schema Reference for usage information. Using Pull Consumers and Push Consumers --------------------------------------- -A Telemetry Streaming declaration may contain multiple System Pollers, as well as both Push Consumer(s) and Pull Consumer(s). +An F5 BIG-IP Telemetry Streaming declaration may contain multiple System Pollers, as well as both Push Consumer(s) and Pull Consumer(s). The following example contains: @@ -66,7 +66,7 @@ Default Pull Consumer --------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for the default pull consumer is available in TS 1.11.0 and later. + Support for the default pull consumer is available in BIG-IP TS 1.11.0 and later. This example shows how to use the default pull consumer. For the default pull consumer, the type must be **default** in the Pull Consumer class as shown. @@ -83,7 +83,7 @@ Prometheus Pull Consumer ------------------------ .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for the Prometheus pull consumer is available in TS 1.12.0 and later. + Support for the Prometheus pull consumer is available in BIG-IP TS 1.12.0 and later. |prometheus_img| diff --git a/docs/quick-start.rst b/docs/quick-start.rst index 9a111d7a..7d46af56 100644 --- a/docs/quick-start.rst +++ b/docs/quick-start.rst @@ -3,7 +3,7 @@ Quick Start If you are familiar with the BIG-IP system, and generally familiar with REST and using APIs, this section contains the minimum amount of information to get you -up and running with Telemetry Streaming. +up and running with F5 BIG-IP Telemetry Streaming. .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: @@ -25,7 +25,7 @@ up and running with Telemetry Streaming. - If using cURL, see :ref:`installcurl-ref`. #. Using a RESTful API client like Postman, send a GET request to the URI - ``https://{{host}}/mgmt/shared/telemetry/info`` to ensure Telemetry Streaming is running + ``https://{{host}}/mgmt/shared/telemetry/info`` to ensure F5 BIG-IP Telemetry Streaming is running properly. #. Copy one of the :ref:`examples` which best matches the configuration you want @@ -56,7 +56,7 @@ Components of the declaration ----------------------------- This section provides more information about the options in the Quick Start example, and breaks down the example declaration into each class so you can understand the options when composing your declaration. The tables below the examples contain descriptions and options for the parameters included in this example only. -For a list of all the Telemetry Streaming classes and options, see :doc:`using-ts`. +For a list of all the F5 BIG-IP Telemetry Streaming classes and options, see :doc:`using-ts`. If there is a default value, it is shown in bold in the Options column. @@ -83,9 +83,9 @@ The first few lines of your declaration are a part of the base components and de +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Parameter | Options | Description/Notes | +====================+================================+==============================================================================================================================================================================+ -| class | Controls | Describes top-level Telemetry Streaming options. The optional class for controls must always be Controls, do not change this value. Controls are for logging and debugging. | +| class | Controls | Describes top-level TS options. The optional class for controls must always be Controls, do not change this value. Controls are for logging and debugging. | +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| logLevel | **info**, debug, error | This value determines how much information you want Telemetry Streaming to log. See the :ref:`logging-ref` section for more information. | +| logLevel | **info**, debug, error | This value determines how much information you want TS to log. See the :ref:`logging-ref` section for more information. | +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -93,8 +93,8 @@ The first few lines of your declaration are a part of the base components and de .. _system-poller-class: -Telemetry System class -`````````````````````` +F5 BIG-IP Telemetry System class +```````````````````````````````` The next lines of the declaration define the target system. You can define and configure the system poller inside of the System declaration to collect and normalize statistics. These statistics include device statistics, virtual server statistics, pool statistics, individual pool member statistics, and more. For more information, including an optional iHealth poller, see :ref:`tssystem-ref`. .. code-block:: javascript @@ -115,7 +115,7 @@ The next lines of the declaration define the target system. You can define and c +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Parameter | Options | Description/Notes | +====================+================================+==================================================================================================================================================================+ -| class | Telemetry_System | The class for Telemetry System must always be Telemetry_System, do not change this value. | +| class | Telemetry_System | The class for BIG-IP Telemetry System must always be Telemetry_System, do not change this value. | +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | systemPoller | systemPoller | This value Polls a system on a defined interval for information such as device statistics, virtual server statistics, pool statistics and much more. | +--------------------+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -124,9 +124,9 @@ The next lines of the declaration define the target system. You can define and c .. _event-listener-class: -Telemetry Listener class -```````````````````````` -The next lines of the declaration sets the Event Listener, on both TCP and UDP protocols, that can accept events in a specific format and process them. Currently, the TS Listener sends all logging telemetry data. +F5 BIG-IP Telemetry Listener class +`````````````````````````````````` +The next lines of the declaration sets the Event Listener, on both TCP and UDP protocols, that can accept events in a specific format and process them. Currently, the BIG-IP TS Listener sends all logging telemetry data. To see the type of information that the event listener processes, see :ref:`outputexample-ref`. Event Format: ``key1="value",key2="value"`` @@ -156,8 +156,8 @@ Event Format: ``key1="value",key2="value"`` .. _consumer-class: -Telemetry Consumer class -```````````````````````` +F5 BIG-IP Telemetry Consumer class +`````````````````````````````````` The next lines of the declaration sets the Consumer, which accepts all telemetry information from whatever systems you configure it to. The consumer provides the tools to process that information. To see examples of configurations for consumers like Splunk, Azure Log Analytics, AWS CloudWatch, AWS S3, Graphite, and others, see the :ref:`settingupconsumer-ref` section of this guide. .. NOTE:: TS 1.11 adds support for the Pull Consumer class. See :doc:`pull-consumers`. diff --git a/docs/rest-api-endpoints.rst b/docs/rest-api-endpoints.rst index 283b313d..ac1ef2b8 100644 --- a/docs/rest-api-endpoints.rst +++ b/docs/rest-api-endpoints.rst @@ -4,7 +4,7 @@ REST API Endpoints Base Endpoint ````````````` -Telemetry Streaming's base URI is **mgmt/shared/telemetry**. The allowed **Content-Type** for POST requests is **application/json**, otherwise HTTP code 415 **Unsupported Media Type** will be returned. +F5 BIG-IP Telemetry Streaming's base URI is **mgmt/shared/telemetry**. The allowed **Content-Type** for POST requests is **application/json**, otherwise HTTP code 415 **Unsupported Media Type** will be returned. Request example: diff --git a/docs/revision-history.rst b/docs/revision-history.rst index ee21b899..307f2c2d 100644 --- a/docs/revision-history.rst +++ b/docs/revision-history.rst @@ -10,7 +10,19 @@ Document Revision History * - Doc Rev - Description - Date - + + * - 1.32.0 + - Updated the documentation for Telemetry Streaming v1.32.0. This release contains the following changes: |br| * DataDog: forward metric data additionally to the logs endpoint |br| * Removed Beacon from documentation + - 10-04-22 + + * - 1.31.0 + - Updated the documentation for Telemetry Streaming v1.31.0. This release contains the following changes: |br| * Added gRPC exporter to OpenTelemetry_Exporter (experimental feature) |br| * Added new performance stats - system.connectionsPerformance. |br| * Generic_HTTP consumer should allow to tune transport options (experimental feature) |br| * Added compressionType option to Generic_HTTP consumer. |br| * DataDog consumer should support proxy configuration. |br| * DataDog consumer should split huge payload into smaller chunks according to API docs. |br| * DataDog consumer should allow to tune transport options (experimental feature). |br| * Added OpenTelemetry_Exporter raw JSON output. |br| * Added secure connection settings to OpenTelemetry_Exporter (experimental feature). |br| |br| Issues Resolved: |br| * DataDog consumer should send correct timestamp value. |br| * OpenTelemetry_Exporter should set correct timestamp. |br| |br| Changed: |br| * system.throughputPerformance in System Poller's default output should match output example in "examples" directory. |br| * DataDog consumer should use API v2 for to send data. + - 8-23-22 + + * - 1.30.0 + - Updated the documentation for Telemetry Streaming v1.30.0. This release contains the following resolved issues: |br| * Add support for numerical enums, enhance SNMP metrics processing `GitHub #207 `_ |br| * Created separate Azure Logs tables for pool members and removed that data from the pool tables. + - 7-15-22 + * - 1.29.0 - Updated the documentation for Telemetry Streaming v1.29.0. This release contains the following changes: |br| * Added support for querying SNMP using a custom endpoint (see :ref:`SNMP example`) |br| * Added outputMode parameter to Generic HTTP consumer to support raw data output (see :ref:`Generic HTTP`) |br| |br| Issues Resolved: |br| * Metric Consumers should not fail when 'null' found in data |br| * Prometheus consumer should ignore NaN values - 5-31-22 @@ -85,7 +97,7 @@ Document Revision History - 10-13-20 * - 1.14.0 - - Updated the documentation for Telemetry Streaming v1.14.0. This release contains the following changes: |br| * Added support for AWS CloudWatch Metrics (see :ref:`cw-metrics`) |br| * Added an EXPERIMENTAL feature to specify fallback hosts for generic HTTP consumers (see :ref:`fallback`) |br| * Added F5 Beacon as a Generic HTTP consumer (see :ref:`beacon-ref`) |br| * Added **cipherUses** stats for Client and Server SSL profiles (see the cipherUses lines in :ref:`sysinfo`) |br| * Added a troubleshooting entry for a restjavad issue (see :ref:`restjavad`) |br| * Added a note to the :doc:`avr` page about AVR caveats with TS and BIG-IQ (see the :ref:`AVR note`) |br| * Updated the introduction for the experimental :doc:`custom-endpoints` |br| * Added support for BIG-IP 16.0 |br| |br| Issues Resolved: |br| * Fixed Event Listener parsing when receiving multiple events + - Updated the documentation for Telemetry Streaming v1.14.0. This release contains the following changes: |br| * Added support for AWS CloudWatch Metrics (see :ref:`cw-metrics`) |br| * Added an EXPERIMENTAL feature to specify fallback hosts for generic HTTP consumers (see :ref:`fallback`) |br| * Added F5 Beacon as a Generic HTTP consumer |br| * Added **cipherUses** stats for Client and Server SSL profiles (see the cipherUses lines in :ref:`sysinfo`) |br| * Added a troubleshooting entry for a restjavad issue (see :ref:`restjavad`) |br| * Added a note to the :doc:`avr` page about AVR caveats with TS and BIG-IQ (see the :ref:`AVR note`) |br| * Updated the introduction for the experimental :doc:`custom-endpoints` |br| * Added support for BIG-IP 16.0 |br| |br| Issues Resolved: |br| * Fixed Event Listener parsing when receiving multiple events - 09-01-20 * - 1.13.0 diff --git a/docs/setting-up-consumer.rst b/docs/setting-up-consumer.rst index d0b0a48e..467bee0a 100644 --- a/docs/setting-up-consumer.rst +++ b/docs/setting-up-consumer.rst @@ -23,9 +23,9 @@ Required information: - Port: Default is 8088, this can be configured within the Global Settings section of the Splunk HEC. - API Key: An API key must be created and provided in the passphrase object of the declaration, refer to Splunk documentation for the correct way to create an HEC token. -If you want to specify proxy settings for Splunk consumers in TS 1.17 and later, see the :ref:`Splunk Proxy` example. +If you want to specify proxy settings for Splunk consumers in BIG-IP TS 1.17 and later, see the :ref:`Splunk Proxy` example. -.. NOTE:: When using the :doc:`custom endpoints feature`, be sure to include **/mgmt/tm/sys/global-settings** in your endpoints for Telemetry Streaming to be able to find the hostname. +.. NOTE:: When using the :doc:`custom endpoints feature`, be sure to include **/mgmt/tm/sys/global-settings** in your endpoints for BIG-IP Telemetry Streaming to be able to find the hostname. Additions to the Splunk consumer ```````````````````````````````` @@ -35,13 +35,13 @@ The following items have been added to the Splunk consumer since it was introduc :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - Version - Property - Description * - 1.19 - **compressionType** - - Sets the type of compression. Be sure to see :ref:`Memory usage spikes` in the Troubleshooting section for information on the **compressionType** property. When set to **none**, this property stops TS from compressing data before sending it to Splunk, which can help reduce memory usage. + - Sets the type of compression. Be sure to see :ref:`Memory usage spikes` in the Troubleshooting section for information on the **compressionType** property. When set to **none**, this property stops BIG-IP TS from compressing data before sending it to Splunk, which can help reduce memory usage. **IMPORTANT**: The following declaration includes the additional properties shown in the table. If you attempt to use this declaration on a previous version, it will fail. On previous versions, remove the highlighted line(s), and the comma from the previous line. @@ -59,13 +59,13 @@ Example Declaration: Splunk Legacy format (Deprecated) ````````````````````````````````` -.. IMPORTANT:: The Splunk Legacy format has been deprecated as of Telemetry Streaming 1.17, and has entered maintenance mode. This means there will be no further TS development for the Splunk Legacy format. |br| We recommend using the :ref:`Splunk default format`, or :ref:`multi-metric`. +.. IMPORTANT:: The Splunk Legacy format has been deprecated as of BIG-IP Telemetry Streaming 1.17, and has entered maintenance mode. This means there will be no further BIG-IP TS development for the Splunk Legacy format. |br| We recommend using the :ref:`Splunk default format`, or :ref:`multi-metric`. The **format** property can be set to **legacy** for Splunk users who wish to convert the stats output similar to the |splunk app|. To see more information, see |Analytics|. To see more information about using the HEC, see |HEC|. See the following example. -To poll for any data involving **tmstats** you must have a Splunk consumer with the legacy format as described in this section. This includes GET requests to the SystemPoller API because the data is not pulled unless it is a legacy Splunk consumer. |br| |br| Telemetry Streaming 1.7.0 and later gathers additional data from tmstats tables to improve compatibility with Splunk Legacy consumers. +To poll for any data involving **tmstats** you must have a Splunk consumer with the legacy format as described in this section. This includes GET requests to the SystemPoller API because the data is not pulled unless it is a legacy Splunk consumer. |br| |br| BIG-IP Telemetry Streaming 1.7.0 and later gathers additional data from tmstats tables to improve compatibility with Splunk Legacy consumers. -In Telemetry Streaming v1.6.0 and later, you must use the **facility** parameter with the legacy format to specify a Splunk facility in your declarations. The facility parameter is for identification of location/facility in which the BIG-IP is located (such as 'Main Data Center', 'AWS', or 'NYC'). +In BIG-IP Telemetry Streaming v1.6.0 and later, you must use the **facility** parameter with the legacy format to specify a Splunk facility in your declarations. The facility parameter is for identification of location/facility in which the BIG-IP is located (such as 'Main Data Center', 'AWS', or 'NYC'). If a Splunk Consumer is configured with the legacy format, then it ignores events from Event Listener. @@ -88,11 +88,11 @@ Splunk multi-metric format `````````````````````````` .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Splunk multi-metric format is available in TS v1.17 and later, and requires Splunk 8.0.0 or later. + Splunk multi-metric format is available in BIG-IP TS v1.17 and later, and requires Splunk 8.0.0 or later. .. IMPORTANT:: Splunk multi-metric format requires Splunk version 8.0.0 or later. -Telemetry Streaming 1.17 introduced the ability to use Splunk multi-metric format (experimental in TS 1.17-1.24) for Splunk 8.0.0 and later. Splunk multi-metric format allows each JSON object to contain measurements for multiple metrics, which generate multiple-measurement metric data points, taking up less space on disk and improving search performance. +BIG-IP Telemetry Streaming 1.17 introduced the ability to use Splunk multi-metric format (experimental in BIG-IP TS 1.17-1.24) for Splunk 8.0.0 and later. Splunk multi-metric format allows each JSON object to contain measurements for multiple metrics, which generate multiple-measurement metric data points, taking up less space on disk and improving search performance. See the |splunkmm| for more information. @@ -127,7 +127,7 @@ The following items have been added to the Azure Log Analytics consumer since it :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -137,15 +137,15 @@ The following items have been added to the Azure Log Analytics consumer since it * - - - - **default**: This is the default value, and does not change the behavior from previous versions. In this mode, each unique item gets a set of columns. With some properties such as Client and Server SSL profiles, the number of columns exceeds the maximum allowed by Azure. |br| For example, with a CA bundle certificate, there may be fields for expirationDate, expirationString, issuer, name, and subject. TS creates a column named **ca-bundle_crt_expirationDate** and four additional columns for the other four properties. The **name** value is a prefix for every column. + - **default**: This is the default value, and does not change the behavior from previous versions. In this mode, each unique item gets a set of columns. With some properties such as Client and Server SSL profiles, the number of columns exceeds the maximum allowed by Azure. |br| For example, with a CA bundle certificate, there may be fields for expirationDate, expirationString, issuer, name, and subject. BIG-IP TS creates a column named **ca-bundle_crt_expirationDate** and four additional columns for the other four properties. The **name** value is a prefix for every column. * - - - - **propertyBased** - This value causes Telemetry Streaming to create fewer columns by using the property name for the column. In the example above, the column (property) name is just **expirationDate**, and all certificates use this column for the expiration dates. |br| Note this happens only if the property **name** exists, and it matches the declared object name at the top. Otherwise, the naming mode goes back to default. + - **propertyBased** - This value causes BIG-IP Telemetry Streaming to create fewer columns by using the property name for the column. In the example above, the column (property) name is just **expirationDate**, and all certificates use this column for the expiration dates. |br| Note this happens only if the property **name** exists, and it matches the declared object name at the top. Otherwise, the naming mode goes back to default. * - 1.24 - **region** - - The **region** property for Azure Log Analytics and Application Insights was added in part to support the Azure Government regions. |br| - This optional property is used to determine cloud type (public/commercial, govcloud) so that the correct API URLs can be used (example values: westeurope, japanwest, centralus, usgovvirginia, and so on). |br| - If you do not provide a region, Telemetry Streaming attempts to look it up from the instance metadata. |br| - If it is unable to extract metadata, TS defaults to public/commercial |br| - Check the |azregion| for product/region compatibility for Azure Government. |br| - See the Azure documentation for a valid list of regions (resource location), and :ref:`Region list` for example values from the Azure CLI. + - The **region** property for Azure Log Analytics and Application Insights was added in part to support the Azure Government regions. |br| - This optional property is used to determine cloud type (public/commercial, govcloud) so that the correct API URLs can be used (example values: westeurope, japanwest, centralus, usgovvirginia, and so on). |br| - If you do not provide a region, BIG-IP Telemetry Streaming attempts to look it up from the instance metadata. |br| - If it is unable to extract metadata, BIG-IP TS defaults to public/commercial |br| - Check the |azregion| for product/region compatibility for Azure Government. |br| - See the Azure documentation for a valid list of regions (resource location), and :ref:`Region list` for example values from the Azure CLI. @@ -153,7 +153,7 @@ To see more information about sending data to Log Analytics, see |HTTP Data Coll | -.. IMPORTANT:: The following example has been updated with the **useManagedIdentity**, **region**, and **format** properties. You must be using a TS version that supports these properties (TS 1.24 for **format**) |br| See :ref:`Using Managed Identities` following the example for information about using Azure Managed Identities and Telemetry Streaming. +.. IMPORTANT:: The following example has been updated with the **useManagedIdentity**, **region**, and **format** properties. You must be using a BIG-IP TS version that supports these properties (BIG-IP TS 1.24 for **format**) |br| See :ref:`Using Managed Identities` following the example for information about using Azure Managed Identities and BIG-IP Telemetry Streaming. Example Declaration: @@ -164,7 +164,7 @@ Example Declaration: Example Dashboard: -The following is an example of the Azure dashboard with Telemetry Streaming data. To create a similar dashboard, see |azure_dashboard|. To create custom views using View Designer, see |Azure_custom_views|. +The following is an example of the Azure dashboard with BIG-IP Telemetry Streaming data. To create a similar dashboard, see |azure_dashboard|. To create custom views using View Designer, see |Azure_custom_views|. |azure_log_analytics_dashboard| @@ -174,7 +174,7 @@ The following is an example of the Azure dashboard with Telemetry Streaming data Using Microsoft Managed Identities for Log Analytics ```````````````````````````````````````````````````` -Telemetry Streaming v1.11 adds support for sending data to Azure Log Analytics with an Azure Managed Identity. For specific information on Managed Identities, see |managedid|. +F5 BIG-IP Telemetry Streaming v1.11 adds support for sending data to Azure Log Analytics with an Azure Managed Identity. For specific information on Managed Identities, see |managedid|. **Important:** The managed identity assigned to the VM must have at the minimum, the following permissions (see the Azure documentation for detailed information): @@ -182,7 +182,7 @@ Telemetry Streaming v1.11 adds support for sending data to Azure Log Analytics w - List workspaces for the subscription(s) - Log Analytics Contributor for the workspace (either at the Workspace resource level or inherited via resource group) -Telemetry Streaming supports Managed Identities using a new **useManagedIdentity** property, set to **true**. You cannot specify a passphrase when this property is set to true. You must specify passphrase when this property is omitted or when value is **false**. If you do not include this property at all, Telemetry Streaming behaves as though the value is false. +F5 BIG-IP Telemetry Streaming supports Managed Identities using a new **useManagedIdentity** property, set to **true**. You cannot specify a passphrase when this property is set to true. You must specify passphrase when this property is omitted or when value is **false**. If you do not include this property at all, BIG-IP Telemetry Streaming behaves as though the value is false. Example Declaration: @@ -207,7 +207,7 @@ Optional Properties: - **MaxBatch Size**: The maximum number of telemetry items to include in a payload to the ingestion endpoint (default: 250) - **Max Batch Interval Ms**: The maximum amount of time to wait in milliseconds to for payload to reach maxBatchSize (default: 5000) -- **App Insights Resource Name**: Name filter used to determine to which App Insights resource to send metrics. If not provided, TS will send metrics to App Insights in the subscription in which the managed identity has permissions. Note: To be used only when useManagedIdentity is true. +- **App Insights Resource Name**: Name filter used to determine to which App Insights resource to send metrics. If not provided, BIG-IP TS will send metrics to App Insights in the subscription in which the managed identity has permissions. Note: To be used only when useManagedIdentity is true. - **customOpts**: Additional options for use by consumer client library. These are passthrough options (key value pair) to send to the Microsoft node client. .. WARNING:: The **customOpts** options are not guaranteed to work and may change according to the client library API; you must use these options with caution. Refer to corresponding consumer library documentation for acceptable keys and values. @@ -224,13 +224,13 @@ The following items have been added to the Azure Application Insights consumer s :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description * - 1.24 - **region** - - The **region** property for Azure Log Analytics and Application Insights was added in part to support the Azure Government regions. |br| - This optional property is used to determine cloud type (public/commercial, govcloud) so that the correct API URLs can be used (example values: westeurope, japanwest, centralus, usgovvirginia, and so on). |br| - If you do not provide a region, Telemetry Streaming attempts to look it up from the instance metadata. |br| - If it is unable to extract metadata, TS defaults to public/commercial |br| - Check the |azregion| for product/region compatibility for Azure Government. |br| - See the Azure documentation for a valid list of regions (resource location), and :ref:`Region list` for example values from the Azure CLI. + - The **region** property for Azure Log Analytics and Application Insights was added in part to support the Azure Government regions. |br| - This optional property is used to determine cloud type (public/commercial, govcloud) so that the correct API URLs can be used (example values: westeurope, japanwest, centralus, usgovvirginia, and so on). |br| - If you do not provide a region, BIG-IP Telemetry Streaming attempts to look it up from the instance metadata. |br| - If it is unable to extract metadata, BIG-IP TS defaults to public/commercial |br| - Check the |azregion| for product/region compatibility for Azure Government. |br| - See the Azure documentation for a valid list of regions (resource location), and :ref:`Region list` for example values from the Azure CLI. | @@ -248,14 +248,14 @@ Example Declaration: Using Microsoft Managed Identities for Application Insights ``````````````````````````````````````````````````````````` -Telemetry Streaming v1.11 also adds support for sending data to Azure Application Insights with an Azure Managed Identity. For specific information on Managed Identities, see |managedid|. +F5 BIG-IP Telemetry Streaming v1.11 also adds support for sending data to Azure Application Insights with an Azure Managed Identity. For specific information on Managed Identities, see |managedid|. **Important:** The managed identity assigned to the VM must have at the minimum, the following permissions (see the Azure documentation for detailed information): - List Microsoft.Insight components for subscription(s), for example the Monitoring Reader role - Push metrics to the App Insights resource, for example the Monitoring Metrics Publisher role -Telemetry Streaming supports Managed Identities using a new **useManagedIdentity** property, set to **true**. You cannot specify an instrumentationKey when this property is set to true. You must specify instrumentationKey when this property is omitted or when the value is false. If you do not include this property at all, Telemetry Streaming behaves as though the value is false. You can optionally provide an appInsightsResourceName to limit which App Insights resource(s) to send metrics to. Without the filter, metrics will be sent to all App Insights resources to which the managed identity has permissions. +F5 BIG-IP Telemetry Streaming supports Managed Identities using a new **useManagedIdentity** property, set to **true**. You cannot specify an instrumentationKey when this property is set to true. You must specify instrumentationKey when this property is omitted or when the value is false. If you do not include this property at all, BIG-IP Telemetry Streaming behaves as though the value is false. You can optionally provide an appInsightsResourceName to limit which App Insights resource(s) to send metrics to. Without the filter, metrics will be sent to all App Insights resources to which the managed identity has permissions. Example Declaration: @@ -272,9 +272,9 @@ AWS CloudWatch AWS CloudWatch has two consumers: CloudWatch Logs, and :ref:`CloudWatch Metrics`. If you do not use the new **dataType** property, the system defaults to CloudWatch Logs. -.. IMPORTANT:: In TS 1.9.0 and later, the **username** and **passphrase** for CloudWatch are optional. This is because a user can send data from a BIG-IP that has an appropriate IAM role in AWS to AWS CloudWatch without a username and passphrase. +.. IMPORTANT:: In BIG-IP TS 1.9.0 and later, the **username** and **passphrase** for CloudWatch are optional. This is because a user can send data from a BIG-IP that has an appropriate IAM role in AWS to AWS CloudWatch without a username and passphrase. -In TS 1.18 and later, the root certificates for AWS services are now embedded within Telemetry Streaming and are the only root certificates used in requests made to AWS services per AWS's move to its own Certificate Authority, noted in https://aws.amazon.com/blogs/security/how-to-prepare-for-aws-move-to-its-own-certificate-authority/. +In BIG-IP TS 1.18 and later, the root certificates for AWS services are now embedded within F5 BIG-IP Telemetry Streaming and are the only root certificates used in requests made to AWS services per AWS's move to its own Certificate Authority, noted in https://aws.amazon.com/blogs/security/how-to-prepare-for-aws-move-to-its-own-certificate-authority/. Additions to the AWS CloudWatch consumer ```````````````````````````````````````` @@ -285,7 +285,7 @@ The following items have been added to the CloudWatch consumer since it was intr :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -323,7 +323,7 @@ Example Declaration: AWS CloudWatch Metrics `````````````````````` -Telemetry Streaming 1.14 introduced support for AWS CloudWatch Metrics. To specify CloudWatch Metrics, use the new **dataType** property with a value of **metrics** as shown in the example. +F5 BIG-IP Telemetry Streaming 1.14 introduced support for AWS CloudWatch Metrics. To specify CloudWatch Metrics, use the new **dataType** property with a value of **metrics** as shown in the example. Notes for CloudWatch Metrics: - It can take up to 15 minutes for metrics to appear if they do not exist and AWS has to create them. @@ -364,9 +364,9 @@ Required Information: To see more information about creating and using IAM roles, see the |IAM roles|. -.. IMPORTANT:: Rhe **username** and **passphrase** for S3 are optional. This is because a user can send data from a BIG-IP that has an appropriate IAM role in AWS to AWS S3 without a username and passphrase. +.. IMPORTANT:: The **username** and **passphrase** for S3 are optional. This is because a user can send data from a BIG-IP that has an appropriate IAM role in AWS to AWS S3 without a username and passphrase. -The root certificates for AWS services are embedded within Telemetry Streaming and are the only root certificates used in requests made to AWS services per AWS's move to its own Certificate Authority, noted in https://aws.amazon.com/blogs/security/how-to-prepare-for-aws-move-to-its-own-certificate-authority/. +The root certificates for AWS services are embedded within F5 BIG-IP Telemetry Streaming and are the only root certificates used in requests made to AWS services per AWS's move to its own Certificate Authority, noted in https://aws.amazon.com/blogs/security/how-to-prepare-for-aws-move-to-its-own-certificate-authority/. Additions to the AWS S3 consumer ```````````````````````````````` @@ -377,7 +377,7 @@ The following items have been added to the S3 consumer since it was introduced. :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -442,13 +442,13 @@ The following items have been added to the Kafka consumer since it was introduce :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description * - 1.17 - **privateKey** - - This and the following properties provide the ability to add TLS client authentication to the Kafka consumer using the **TLS** authentication protocol. This protocol configures Telemetry Streaming to provide the required private key and certificate(s) when the Kafka broker is configured to use SSL/TLS Client authentication. You can find more information on Kafka's client authentication on the Confluent pages: https://docs.confluent.io/5.5.0/kafka/authentication_ssl.html. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. + - This and the following properties provide the ability to add TLS client authentication to the Kafka consumer using the **TLS** authentication protocol. This protocol configures BIG-IP Telemetry Streaming to provide the required private key and certificate(s) when the Kafka broker is configured to use SSL/TLS Client authentication. You can find more information on Kafka's client authentication on the Confluent pages: https://docs.confluent.io/5.5.0/kafka/authentication_ssl.html. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. * - - **clientCertificate** @@ -477,7 +477,7 @@ ElasticSearch ------------- |ElasticSearch| -.. NOTE:: TS 1.24 added support for sending data to ElasticSearch 7 and ElasticSearch 8. +.. NOTE:: BIG-IP TS 1.24 added support for sending data to ElasticSearch 7 and ElasticSearch 8. Required Information: - Host: The address of the ElasticSearch system. @@ -486,14 +486,14 @@ Required Information: Optional Parameters: - Port: The port of the ElasticSearch system. Default is 9200. - Protocol: The protocol of the ElasticSearch system. Options: http or https. Default is http. - - Allow Self Signed Cert: allow TS to skip Cert validation. Options: true or false. Default is false. + - Allow Self Signed Cert: allow BIG-IP TS to skip Cert validation. Options: true or false. Default is false. - Path: The path to use when sending data to the ElasticSearch system. - Data Type: The type of data posted to the ElasticSearch system. - API Version: The API version of the ElasticSearch system. Options: Any version string matching the ElasticSearch node(s) version. The default is 6.0. - Username: The username to use when sending data to the ElasticSearch system. - Passphrase: The secret/password to use when sending data to the ElasticSearch system. -.. IMPORTANT:: Telemetry Streaming 1.24 and later use the API Version value to determine the appropriate defaults to use for the Data Type parameter. |br| When the API Version is 6.X or earlier, **f5.telemetry** is used as the default Data Type. |br| When the API Version is 7.0 until the last 7.X version, **_doc** is used as the default Data Type. |br| In API Version 8.0 and later, the Data Type value is not supported, and will not be accepted in the Telemetry Streaming declaration. +.. IMPORTANT:: BIG-IP Telemetry Streaming 1.24 and later use the API Version value to determine the appropriate defaults to use for the Data Type parameter. |br| When the API Version is 6.X or earlier, **f5.telemetry** is used as the default Data Type. |br| When the API Version is 7.0 until the last 7.X version, **_doc** is used as the default Data Type. |br| In API Version 8.0 and later, the Data Type value is not supported, and will not be accepted in the BIG-IP Telemetry Streaming declaration. | @@ -536,12 +536,12 @@ StatsD Required Information: - Host: The address of the StatsD instance. - - Protocol: The protocol of the StatsD instance. Options: TCP (TS 1.12+) or UDP. The default is UDP. + - Protocol: The protocol of the StatsD instance. Options: TCP (BIG-IP TS 1.12+) or UDP. The default is UDP. - Port: The port of the StatsD instance -.. IMPORTANT:: In TS v1.15 and later, if Telemetry Streaming is unable to locate the hostname in the systemPoller data, it sends the metric with hostname value **host.unknown**. This gets transformed to **hostname-unknown** as required by StatsD. This is because StatsD uses a **.** as a delimiter, and TS automatically replaces it with a **-**. For example: |br| |bold| { |br| |sp| |sp| |sp| metricName: 'f5telemetry.hostname-unknown.customStats.clientSideTraffic-bitsIn', |br| |sp| |sp| |sp| metricValue: 111111030 |br| } |boldclose| +.. IMPORTANT:: In BIG-IP TS v1.15 and later, if BIG-IP Telemetry Streaming is unable to locate the hostname in the systemPoller data, it sends the metric with hostname value **host.unknown**. This gets transformed to **hostname-unknown** as required by StatsD. This is because StatsD uses a **.** as a delimiter, and BIG-IP TS automatically replaces it with a **-**. For example: |br| |bold| { |br| |sp| |sp| |sp| metricName: 'f5telemetry.hostname-unknown.customStats.clientSideTraffic-bitsIn', |br| |sp| |sp| |sp| metricValue: 111111030 |br| } |boldclose| -.. NOTE:: When using the :doc:`custom endpoints feature`, be sure to include **/mgmt/tm/sys/global-settings** in your endpoints for Telemetry Streaming to be able to find the hostname. +.. NOTE:: When using the :doc:`custom endpoints feature`, be sure to include **/mgmt/tm/sys/global-settings** in your endpoints for BIG-IP Telemetry Streaming to be able to find the hostname. For more information about installing StatsD, see |StatsDWiki|. @@ -555,17 +555,17 @@ The following items have been added to the StatsD consumer since it was introduc :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description * - 1.21 - **addTags** - - This feature (experimental in TS 1.21-1.24) causes Telemetry Streaming to parse the incoming payload for values to automatically add as tags. Currently only the **sibling** method is supported. To see an example and the output from **addTags**, see :ref:`addTags example`. + - This feature (experimental in BIG-IP TS 1.21-1.24) causes BIG-IP Telemetry Streaming to parse the incoming payload for values to automatically add as tags. Currently only the **sibling** method is supported. To see an example and the output from **addTags**, see :ref:`addTags example`. * - 1.25 - **convertBooleansToMetrics** - - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. + - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, BIG-IP Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: BIG-IP Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. **IMPORTANT**: The following declaration includes the additional properties shown in the table. If you attempt to use this declaration on a previous version, it will fail. On previous versions, remove the highlighted line(s), and the comma from the previous line. @@ -596,7 +596,7 @@ Optional Properties: - proxy: Proxy server configuration -.. NOTE:: Since this consumer is designed to be generic and flexible, how authentication is performed is left up to the web service. To ensure the secrets are encrypted within Telemetry Streaming please note the use of JSON pointers. The secret to protect should be stored inside ``passphrase`` and referenced in the desired destination property, such as an API token in a header as shown in this example. +.. NOTE:: Since this consumer is designed to be generic and flexible, how authentication is performed is left up to the web service. To ensure the secrets are encrypted within BIG-IP Telemetry Streaming please note the use of JSON pointers. The secret to protect should be stored inside ``passphrase`` and referenced in the desired destination property, such as an API token in a header as shown in this example. Additions to the Generic HTTP consumer `````````````````````````````````````` @@ -607,13 +607,13 @@ The following items have been added to the Generic HTTP consumer since it was in :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description * - 1.18 - **privateKey** - - This and the following properties provide the ability to add TLS client authentication to the Generic HTTP consumer using the **TLS** authentication protocol. This protocol configures Telemetry Streaming to provide the required private key and certificate(s) when the Generic HTTP consumer is configured to use SSL/TLS Client authentication. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. + - This and the following properties provide the ability to add TLS client authentication to the Generic HTTP consumer using the **TLS** authentication protocol. This protocol configures BIG-IP Telemetry Streaming to provide the required private key and certificate(s) when the Generic HTTP consumer is configured to use SSL/TLS Client authentication. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. * - - **clientCertificate** @@ -650,39 +650,12 @@ Example Declaration: **Additional examples for Generic HTTP consumers:** - Generic HTTP with multiple passphrases, see :ref:`multiple`. -- Generic HTTP with proxy settings in TS 1.17 and later, see :ref:`proxy`. +- Generic HTTP with proxy settings in BIG-IP TS 1.17 and later, see :ref:`proxy`. - An EXPERIMENTAL feature where you can specify fallback IP address(es) for the Generic HTTP consumer, see :ref:`fallback`. - Generic HTTP with TLS authentication, see :ref:`httptls`. | -.. _beacon-ref: - -F5 Beacon ---------- -|beaconlogo| - -F5 Beacon, a SaaS offering, provides visibility and actionable insights into the health and performance of applications. - -F5 Beacon uses the generic HTTP consumer. To see an example of Generic HTTP with proxy settings, see :ref:`proxy`. - -Required Information: - - See |beacon| for information on how to add Telemetry Streaming as a source to Beacon. - - Host: The address of the system. - - Protocol: The protocol of the system. Options: ``https`` or ``http``. Default is ``https``. - - Port: The port of the system. Default is ``443``. - - Path: The path of the system. Default is ``/``. - - Method: The method of the system. Options: ``POST``, ``PUT``, ``GET``. Default is ``POST``. - - Headers: The headers of the system. - - Passphrase: The secret to use when sending data to the system, for example an API key to be used in an HTTP header. - -Example Declaration: - -.. literalinclude:: ../examples/declarations/f5_beacon.json - :language: json - - -| .. _fluentd-ref: @@ -722,9 +695,9 @@ Required Information: For complete information on deploying Google Cloud Operations Suite, see |sddocs|. **Finding the Data** |br| -Once you have configured the Google Cloud Monitoring consumer and sent a Telemetry Streaming declaration, Telemetry Streaming creates custom MetricDescriptors to which it sends metrics. These metrics can be found under a path such as **custom/system/cpu**. To make it easier to find data that is relevant to a specific device, TS uses the **Generic Node** resource type, and assigns machine ID to the **node_id** label to identify which device the data is from. +Once you have configured the Google Cloud Monitoring consumer and sent an F5 BIG-IP Telemetry Streaming declaration, F5 BIG-IP Telemetry Streaming creates custom MetricDescriptors to which it sends metrics. These metrics can be found under a path such as **custom/system/cpu**. To make it easier to find data that is relevant to a specific device, BIG-IP TS uses the **Generic Node** resource type, and assigns machine ID to the **node_id** label to identify which device the data is from. -.. IMPORTANT:: There is a quota of 500 custom MetricDescriptors for Google Cloud Monitoring. Telemetry Streaming creates these MetricDescriptors, and if this quota is ever reached, you must delete some of these MetricDescriptors. +.. IMPORTANT:: There is a quota of 500 custom MetricDescriptors for Google Cloud Monitoring. BIG-IP Telemetry Streaming creates these MetricDescriptors, and if this quota is ever reached, you must delete some of these MetricDescriptors. Additions to the Cloud Monitoring consumer `````````````````````````````````````````` @@ -735,7 +708,7 @@ The following items have been added to the Google Cloud Operations Suite's Cloud :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -760,9 +733,9 @@ Using IAM roles for Google Cloud Monitoring ``````````````````````````````````````````` .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for GCP IAM roles is available in TS v1.25 and later + Support for GCP IAM roles is available in BIG-IP TS v1.25 and later -Telemetry Streaming 1.25 added support for using IAM roles for Google Cloud Monitoring. This means the Cloud Monitoring consumer can send data without specifying credentials if IAM roles are properly configured for the BIG-IP instance in GCP. +F5 BIG-IP Telemetry Streaming 1.25 added support for using IAM roles for Google Cloud Monitoring. This means the Cloud Monitoring consumer can send data without specifying credentials if IAM roles are properly configured for the BIG-IP instance in GCP. IAM roles are enabled by using the new **useServiceAccountToken** property set to **true** (the default is **false**). When set to true, the **privateKey** and **privateKeyId** properties are not used. @@ -783,7 +756,7 @@ Google Cloud Logging .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for Google Cloud Logging is available in TS 1.22 and later. + Support for Google Cloud Logging is available in BIG-IP TS 1.22 and later. Required Information: - serviceEmail: The email for the Google Service Account. To check if you have an existing Service Account, from the GCP left menu, select **IAM & admin**, and then click **Service Accounts**. If you do not have a Service Account, you must create one. @@ -796,7 +769,7 @@ Required Information: For complete information, see the |gcldocs|. **Finding the Data** |br| -Once you have configured the Google Cloud Logging consumer and sent a Telemetry Streaming declaration, Telemetry Streaming sends log entries directly to Google Cloud Logging. Log entries are written to a *logName* in Google Cloud Logging, where the logName is generated from the properties in the Telemetry Streaming declaration, using the following format: ``[logScope]/[logScopeId/logs/[logId] (example: “projects/yourProjectId/logs/yourLogId”)``. +Once you have configured the Google Cloud Logging consumer and sent a BIG-IP Telemetry Streaming declaration, BIG-IP Telemetry Streaming sends log entries directly to Google Cloud Logging. Log entries are written to a *logName* in Google Cloud Logging, where the logName is generated from the properties in the BIG-IP Telemetry Streaming declaration, using the following format: ``[logScope]/[logScopeId/logs/[logId] (example: “projects/yourProjectId/logs/yourLogId”)``. Example Declaration: @@ -811,9 +784,9 @@ Using IAM roles for Google Cloud Logging ```````````````````````````````````````` .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for GCP IAM roles is available in TS v1.25 and later + Support for GCP IAM roles is available in BIG-IP TS v1.25 and later -Telemetry Streaming 1.25 added support for using IAM roles for Google Cloud Logging. This means the Cloud Logging consumer can send data without specifying credentials if IAM roles are properly configured for the BIG-IP instance in GCP. +F5 BIG-IP Telemetry Streaming 1.25 added support for using IAM roles for Google Cloud Logging. This means the Cloud Logging consumer can send data without specifying credentials if IAM roles are properly configured for the BIG-IP instance in GCP. IAM roles are enabled by using the new **useServiceAccountToken** property set to **true** (the default is **false**). When set to true, the **privateKey** and **privateKeyId** properties are not used. @@ -832,7 +805,7 @@ F5 Cloud Consumer (F5 Internal) ------------------------------- The F5 Cloud Consumer is a part of F5's internal, digital experience operating system, a cloud-based analytics platform that helps organizations monitor, operate, and protect digital workflows and optimize their customer's digital experiences. -.. IMPORTANT:: This F5 Cloud consumer is for **F5 internal use only**, and its API is subject to change. We are including it on this page of Push consumers because you may see it in a Telemetry Streaming declaration. +.. IMPORTANT:: This F5 Cloud consumer is for **F5 internal use only**, and its API is subject to change. We are including it on this page of Push consumers because you may see it in a BIG-IP Telemetry Streaming declaration. Additions to the F5 Cloud consumer `````````````````````````````````` @@ -843,7 +816,7 @@ The following items have been added to the F5 Cloud consumer since it was introd :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -872,7 +845,7 @@ DataDog .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - The DataDog consumer was introduced as an experimental consumer in TS 1.22. |br| The **compressionType** property was added in 1.23. |br| The **region** and **service** properties were added in TS 1.24 |br| The **metricPrefix** property was added in 1.25. + The DataDog consumer was introduced as an experimental consumer in BIG-IP TS 1.22. |br| The **compressionType** property was added in 1.23. |br| The **region** and **service** properties were added in BIG-IP TS 1.24 |br| The **metricPrefix** property was added in 1.25. Required Information: - apiKey: The DataDog API key required to submit metrics and events to DataDog @@ -881,18 +854,21 @@ Optional Properties: - proxy: Proxy server configuration Additional examples for HTTP consumers: - - DataDog with proxy settings in TS 1.31 and later, see :ref:`proxy`. + - DataDog with proxy settings in BIG-IPTS 1.31 and later, see :ref:`proxy`. Additions to the DataDog consumer ````````````````````````````````` The following items have been added to the DataDog consumer since it was introduced. +Beginning with BIG-IP TS version 1.32, events with metrics will be also sent to the DataDog logging endpoints. +The DataDog metrics endpoints will continue to receive metrics as before. + .. list-table:: :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description @@ -914,7 +890,7 @@ The following items have been added to the DataDog consumer since it was introdu * - - **convertBooleansToMetrics** - - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. + - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, BIG-IP Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: BIG-IP Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. * - - **customTags** @@ -943,7 +919,7 @@ OpenTelemetry Exporter .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - The OpenTelemetry Exporter consumer was introduced as an EXPERIMENTAL consumer in TS 1.23, and is supported in TS 1.27 and later. + The OpenTelemetry Exporter consumer was introduced as an EXPERIMENTAL consumer in BIG-IP TS 1.23, and is supported in BIG-IP TS 1.27 and later. The OpenTelemetry Exporter Consumer exports telemetry data to an OpenTelemetry Collector, or OpenTelemetry Protocol compatible API. @@ -959,7 +935,7 @@ Optional Properties: **privateKey**, **clientCertificate**, **rootCertificate** allowed for any **exporter** but only when **protocol** is **https** or **useSSL** set to ``true``. -Note: As of Telemetry Streaming 1.23, this consumer: +Note: As of BIG-IP Telemetry Streaming 1.23, this consumer: - Only exports OpenTelemetry metrics (logs and traces are not supported) - Exports telemetry data using protobufs over HTTP - Extracts metrics from Event Listener log messages. Any integer or float values in Event Listener log messages will be converted to an OpenTelemetry metric, and exported as a metric. @@ -973,13 +949,13 @@ The following items have been added to the OpenTelemetry consumer since it was i :widths: 25 25 200 :header-rows: 1 - * - TS Version + * - BIG-IP TS Version - Property - Description * - 1.25 - **convertBooleansToMetrics** - - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. + - This property allows you to choose whether or not to convert boolean values to metrics (true becomes 1, false (default0) becomes 0). |br| By default, BIG-IP Telemetry Streaming uses Boolean values as tag values that are attached to individual metrics. If **convertBooleansToMetrics** is set to **true**, any Boolean values are instead converted to numeric values, which are then sent to the consumer(s) as a metric. |br| Note: BIG-IP Telemetry Streaming does not send a Boolean as both a tag and a metric; a Boolean value is sent to the consumer(s) as either a tag or as a metric. * - 1.31 - **exporter** @@ -987,7 +963,7 @@ The following items have been added to the OpenTelemetry consumer since it was i * - - **privateKey** - - This and the following properties provide the ability to add TLS client authentication using the **TLS** authentication protocol. This protocol configures Telemetry Streaming to provide the required private key and certificate(s) when the consumer is configured to use SSL/TLS Client authentication. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. + - This and the following properties provide the ability to add TLS client authentication using the **TLS** authentication protocol. This protocol configures BIG-IP Telemetry Streaming to provide the required private key and certificate(s) when the consumer is configured to use SSL/TLS Client authentication. |br| |br| **privateKey** is the Private Key for the SSL certificate. Must be formatted as a 1-line string, with literal new line characters. * - - **clientCertificate** @@ -1023,7 +999,7 @@ Azure Regions ------------- The following table shows an example table when listing regions from the Azure CLI using the command ``az account list-locations -o table``. Note to list Azure Government Regions, you must use ``az cloud set --name AzureUsGovernment`` before running the list-locations command. -.. IMPORTANT:: This list is just a static example, we strongly recommend running the commands yourself to retrieve the current list. |br| The **Name** column on the right is the value to use in your Telemetry Streaming declaration +.. IMPORTANT:: This list is just a static example, we strongly recommend running the commands yourself to retrieve the current list. |br| The **Name** column on the right is the value to use in your BIG-IP Telemetry Streaming declaration ``az account list-locations -o table`` @@ -1189,10 +1165,6 @@ In the following table, we list the Azure Government regions. :target: https://cloud.google.com/products/operations :alt: Google Cloud -.. |beaconlogo| image:: /images/beacon-logo.png - :target: https://www.f5.com/products/beacon-visibility-and-analytics - :alt: F5 Beacon - .. |datadog| image:: /images/dd_logo.png :target: https://www.datadoghq.com/ :alt: DataDog @@ -1295,9 +1267,6 @@ In the following table, we list the Azure Government regions. Azure Products Available by Region -.. |beacon| raw:: html - - Beacon documentation .. |splunkmm| raw:: html diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 5dd2c026..1a08f56f 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -2,10 +2,10 @@ Troubleshooting =============== Use this section to read about known issues and for common troubleshooting steps. -Telemetry Streaming general troubleshooting tips ------------------------------------------------- +F5 BIG-IP Telemetry Streaming general troubleshooting tips +---------------------------------------------------------- -- Examine the restnoded failure log at **/var/log/restnoded/restnoded.log** (this is where Telemetry Streaming records error messages). +- Examine the restnoded failure log at **/var/log/restnoded/restnoded.log** (this is where BIG-IP Telemetry Streaming records error messages). - Examine the REST response: @@ -16,8 +16,8 @@ Telemetry Streaming general troubleshooting tips Logging ------- -Telemetry Streaming writes log output to the file **/var/log/restnoded/restnoded.log** on the BIG-IP. -The verbosity of the log output can be adjusted by submitting a Telemetry Streaming declaration with a Controls class. +F5 BIG-IP Telemetry Streaming writes log output to the file **/var/log/restnoded/restnoded.log** on the BIG-IP. +The verbosity of the log output can be adjusted by submitting a BIG-IP Telemetry Streaming declaration with a Controls class. The allowed log levels (in increasing order of verbosity) are **error**, **info**, and **debug**. The following is an example declaration containing a Controls class that sets the logging level to debug. @@ -54,7 +54,7 @@ The following is an example declaration containing a Controls class that sets th Tracing ------- -While Telemetry Streaming is processing data, you can configure it to write the current state of the data at key points to files for further inspection. +While BIG-IP Telemetry Streaming is processing data, you can configure it to write the current state of the data at key points to files for further inspection. These files are known as trace files, and can be enabled for the Telemetry_System, Telemetry_System_Poller, Telemetry_Listener, and Telemetry_Consumer classes. The trace files are written to the BIG-IP file system in the **/var/tmp/telemetry** directory using a filename based on the class and the name it was given. @@ -63,11 +63,11 @@ To enable tracing, set the trace property to **true**. To override the default f The **Telemetry_Listener** trace setting is a little more complex, see :ref:`trace` for more information. The most common use for trace files is to determine how far data progresses through the path from the BIG-IP to the third party tool. -**Telemetry_System**, **Telemetry_System_Poller**, and **Telemetry_Listener** trace files are useful for determining if data is making it from the BIG-IP to Telemetry Streaming. -If these trace files are not being generated, or are empty, check the BIG-IP configuration that sets up the sending of data to Telemetry streaming. +**Telemetry_System**, **Telemetry_System_Poller**, and **Telemetry_Listener** trace files are useful for determining if data is making it from the BIG-IP to BIG-IP Telemetry Streaming. +If these trace files are not being generated, or are empty, check the BIG-IP configuration that sets up the sending of data to BIG-IP Telemetry Streaming. -**Telemetry_Consumer** trace files are useful for determining if the data is being sent from Telemetry Streaming to the desired third party tool. -If these trace files are not being generated, or are empty, then check your **Telemetry_Consumer** settings in the Telemetry Streaming declaration. +**Telemetry_Consumer** trace files are useful for determining if the data is being sent from BIG-IP Telemetry Streaming to the desired third party tool. +If these trace files are not being generated, or are empty, then check your **Telemetry_Consumer** settings in the BIG-IP Telemetry Streaming declaration. Also, check the logs for any issues sending the data to the third party tool. If all trace files look correct, then check any settings, queries, and logs in the third party tool. @@ -106,11 +106,11 @@ Specific troubleshooting entries .. _save: -I need to access declarations I previously sent to Telemetry Streaming -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -In Telemetry Streaming 1.27, TS stored up to 30 recent declarations at **/shared/tmp/telemetry/declarationHistory**. +I need to access declarations I previously sent to F5 BIG-IP Telemetry Streaming +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In F5 BIG-IP Telemetry Streaming 1.27, BIG-IP TS stored up to 30 recent declarations at **/shared/tmp/telemetry/declarationHistory**. -In Telemetry Streaming 1.28 and later, TS stores up to 30 recent declarations at **/var/log/restnoded/telemetryDeclarationHistory**. These stored declarations are now accessible by F5's **qkview** utility for use by F5 Technical Support if necessary. For more information on the qkview utility, see |qkv|. +In F5 BIG-IP Telemetry Streaming 1.28 and later, BIG-IP TS stores up to 30 recent declarations at **/var/log/restnoded/telemetryDeclarationHistory**. These stored declarations are now accessible by F5's **qkview** utility for use by F5 Technical Support if necessary. For more information on the qkview utility, see |qkv|. This includes declarations submitted upon following events: @@ -125,7 +125,7 @@ This includes declarations submitted upon following events: I'm receiving a path not registered error when I try to post a declaration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you are receiving this error, it means either you did not install Telemetry Streaming, or it did not install properly. The error contains the following message: +If you are receiving this error, it means either you did not install BIG-IP Telemetry Streaming, or it did not install properly. The error contains the following message: .. code-block:: shell @@ -136,16 +136,16 @@ If you are receiving this error, it means either you did not install Telemetry S } -If you receive this error, see :doc:`installation` to install or re-install Telemetry Streaming. +If you receive this error, see :doc:`installation` to install or re-install BIG-IP Telemetry Streaming. | .. _elkerror: -I'm receiving a limit of total fields exceeded error when Telemetry Streaming forwards statistics to ElasticSearch -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +I'm receiving a limit of total fields exceeded error when BIG-IP TS forwards statistics to ElasticSearch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you are receiving this error, it means that Telemetry Streaming is exceeding the maximum allowed number of fields in the ElasticSearch index to which it is forwarding. The error contains the following message: |br| +If you are receiving this error, it means F5 BIG-IP Telemetry Streaming is exceeding the maximum allowed number of fields in the ElasticSearch index to which it is forwarding. The error contains the following message: |br| .. code-block:: bash @@ -155,7 +155,7 @@ If you are receiving this error, it means that Telemetry Streaming is exceeding If you receive this error, use **one** of the following methods to correct the issue: -- Increase the ``index.mapping.total_fields.limit`` setting of the failing index to a larger value to compensate for the amount of data that Telemetry Streaming is sending. This can be accomplished using a **PUT** request to the URI **http(s):////_settings** with the following JSON body: |br| |br| +- Increase the ``index.mapping.total_fields.limit`` setting of the failing index to a larger value to compensate for the amount of data that BIG-IP Telemetry Streaming is sending. This can be accomplished using a **PUT** request to the URI **http(s):////_settings** with the following JSON body: |br| |br| .. code-block:: json @@ -164,7 +164,7 @@ If you receive this error, use **one** of the following methods to correct the i } -- Create the ElasticSearch index with an increased ``index.mapping.total_fields.limit`` value before Telemetry Streaming begins sending data to it. This can be done using a **PUT** request to the URI **http(s):///** with the following JSON body: |br| |br| +- Create the ElasticSearch index with an increased ``index.mapping.total_fields.limit`` value before BIG-IP Telemetry Streaming begins sending data to it. This can be done using a **PUT** request to the URI **http(s):///** with the following JSON body: |br| |br| .. code-block:: json @@ -190,10 +190,10 @@ If you are receiving this error, you are using a self-signed certificate in a de .. _nodist: -I can no longer find the TS source RPM on GitHub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +I can no longer find the BIG-IP TS source RPM on GitHub +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Beginning with TS 1.7.0, the RPM and checksum files are no longer located in the **/dist** directory in the Telemetry Streaming repository on GitHub. These files can be found on the |release|, as **Assets**. +Beginning with BIG-IP TS 1.7.0, the RPM and checksum files are no longer located in the **/dist** directory in the BIG-IP Telemetry Streaming repository on GitHub. These files can be found on the |release|, as **Assets**. You can find historical files on GitHub by using the **Branch** drop-down, clicking the **Tags** tab, and then selecting the appropriate release. @@ -203,24 +203,24 @@ You can find historical files on GitHub by using the **Branch** drop-down, click Why is data not showing up in my consumer? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If data is not appearing in your consumer, use the following troubleshooting advice appropriate for your Telemetry Streaming configuration. +If data is not appearing in your consumer, use the following troubleshooting advice appropriate for your BIG-IP Telemetry Streaming configuration. **If you are using the Event Listener** |br| If you are using the :ref:`Event Listener` to publish events and/or logs to a Consumer, first check the configuration required for the Event Listener to function successfully. There are three individual configuration tasks that need to occur: -#. Ensure the Telemetry Streaming declaration has a **Telemetry_Listener** class defined, and that when you submit the declaration, it succeeds. -#. Ensure you have completed the base configuration of the BIG-IP, which enables logs and/or events to be published to Telemetry Streaming. See :ref:`logsrc-ref`. |br| +#. Ensure the BIG-IP Telemetry Streaming declaration has a **Telemetry_Listener** class defined, and that when you submit the declaration, it succeeds. +#. Ensure you have completed the base configuration of the BIG-IP, which enables logs and/or events to be published to BIG-IP Telemetry Streaming. See :ref:`logsrc-ref`. |br| - .. IMPORTANT:: The BIG-IP documentation references a port number used as a part of publishing logs. The port number you use in this configuration must be the same as the port number in the **port** property of the Telemetry_Listener class in your Telemetry Streaming declaration. The BIG-IP publishes events and/or logs to the IP:PORT defined in the configuration, and Telemetry Streaming listens for events on this port. + .. IMPORTANT:: The BIG-IP documentation references a port number used as a part of publishing logs. The port number you use in this configuration must be the same as the port number in the **port** property of the Telemetry_Listener class in your BIG-IP Telemetry Streaming declaration. The BIG-IP publishes events and/or logs to the IP:PORT defined in the configuration, and BIG-IP Telemetry Streaming listens for events on this port. -#. Ensure the profiles (AFM/ASM Security Log profiles, or the LTM Request profiles) are attached to the Virtual Servers that should be monitored. Only Virtual Servers that have logging profiles attached publish logs to Telemetry Streaming. See :ref:`loggingprofiles`. +#. Ensure the profiles (AFM/ASM Security Log profiles, or the LTM Request profiles) are attached to the Virtual Servers that should be monitored. Only Virtual Servers that have logging profiles attached publish logs to BIG-IP Telemetry Streaming. See :ref:`loggingprofiles`. | **If you are attempting to use the System Poller** |br| -If you are using the System Poller to get metrics from your BIG-IP, ensure that your Telemetry Streaming declaration has a :ref:`Telemetry_System class`, and this class has the **systemPoller** property defined. +If you are using the System Poller to get metrics from your BIG-IP, ensure that your BIG-IP Telemetry Streaming declaration has a :ref:`Telemetry_System class`, and this class has the **systemPoller** property defined. | @@ -230,9 +230,9 @@ Once you have verified your Event Listener and/or System Poller, check the confi | -**Check the Telemetry Streaming logs** |br| +**Check the BIG-IP Telemetry Streaming logs** |br| -By default, Telemetry Streaming logs to **restnoded.log** (stored on the BIG-IP at **/var/log/restnoded/restnoded.log**), at the *info* level. At the *info* log level, you can see any errors that Telemetry Streaming encounters. The consumers within Telemetry Streaming also log an error if they are not able to connect to the external system. +By default, BIG-IP Telemetry Streaming logs to **restnoded.log** (stored on the BIG-IP at **/var/log/restnoded/restnoded.log**), at the *info* level. At the *info* log level, you can see any errors that BIG-IP Telemetry Streaming encounters. The consumers within BIG-IP Telemetry Streaming also log an error if they are not able to connect to the external system. For example, the following log line shows that the Fluent_Consumer cannot connect to the external system at 10.10.1.1:343: @@ -240,7 +240,7 @@ For example, the following log line shows that the Fluent_Consumer cannot connec | -Additionally, you can adjust the log level of Telemetry Streaming by changing the **logLevel** property in the **Controls** object (see |controls| in the schema reference). +Additionally, you can adjust the log level of BIG-IP Telemetry Streaming by changing the **logLevel** property in the **Controls** object (see |controls| in the schema reference). When the log level is set to **debug**, many more events are logged to the restnoded log. For example, you can see: @@ -252,7 +252,7 @@ When the log level is set to **debug**, many more events are logged to the restn Wed, 01 Jul 2020 21:46:59 GMT - finest: [telemetry] System poller cycle finished Wed, 01 Jul 2020 21:46:59 GMT - finest: [telemetry.Generic_HTTP.Fluent_Consumer] success -- When the Event Listener publishes events, the type of that event, and whether the Consumer successfully published the event. The following example shows both an ASM and LTM event being successfully processed by Telemetry Streaming, and published by the Fluent_Consumer: +- When the Event Listener publishes events, the type of that event, and whether the Consumer successfully published the event. The following example shows both an ASM and LTM event being successfully processed by BIG-IP Telemetry Streaming, and published by the Fluent_Consumer: .. code-block:: bash @@ -266,9 +266,9 @@ When the log level is set to **debug**, many more events are logged to the restn .. _eventlistenerdata: -How can I check if my Telemetry Streaming Event Listener is sending data to my consumer? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Telemetry Streaming v1.19 introduced a new feature that allows you to send arbitrary data to a Telemetry Streaming Event Listener instead of waiting for the BIG-IP to send a message(s) to the Event Listener. This allows you to test that your Telemetry Streaming Consumers are properly configured. +How can I check if my BIG-IP TS Event Listener is sending data to my consumer? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +F5 BIG-IP Telemetry Streaming v1.19 introduced a new feature that allows you to send arbitrary data to an F5 BIG-IP Telemetry Streaming Event Listener instead of waiting for the BIG-IP to send a message(s) to the Event Listener. This allows you to test that your BIG-IP Telemetry Streaming Consumers are properly configured. You must have already submitted a declaration that includes the following: - An Event Listener @@ -292,7 +292,7 @@ You can send any valid (but also arbitrary) JSON body, such as: } -Telemetry Streaming sends this JSON payload to the Event Listener you specified, and the Event Listener processes and sends this debugging payload through Telemetry Streaming to any/all of the your configured Consumers. +BIG-IP Telemetry Streaming sends this JSON payload to the Event Listener you specified, and the Event Listener processes and sends this debugging payload through BIG-IP Telemetry Streaming to any/all of the your configured Consumers. | @@ -303,9 +303,9 @@ How can I write an Event Listener's incoming raw data to a trace file? ---------------------------------------------------------------------- .. sidebar:: :fonticon:`fa fa-info-circle fa-lg` Version Notice: - Support for writing an Event Listener's incoming raw data to a trace file is available in TS v1.20 and later + Support for writing an Event Listener's incoming raw data to a trace file is available in BIG-IP TS v1.20 and later -In Telemetry Streaming 1.20 and later you can configure TS to write an Event Listener's incoming raw data to a trace file. This is useful when troubleshooting, as it allows you to reproduce the exact issue instead of relying on the BIG-IP configuration, profiles, and traffic generation. +In F5 BIG-IP Telemetry Streaming 1.20 and later you can configure BIG-IP TS to write an Event Listener's incoming raw data to a trace file. This is useful when troubleshooting, as it allows you to reproduce the exact issue instead of relying on the BIG-IP configuration, profiles, and traffic generation. This feature is enabled using the **trace** property with values of **input** and/or **output**. All data is written to the ``/var/tmp/telemetry`` directory (or check logs for the exact file path). @@ -352,7 +352,7 @@ If you want to enable both input and output tracing, use the following syntax in Why is my BIG-IP experiencing occasional high CPU usage and slower performance? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If your BIG-IP system seems to be using a relatively high amount of CPU and degraded performance, you may be experiencing a known issue with the **restjavad** daemon. This is an issue with the underlying BIG-IP framework, and not an issue with Telemetry Streaming. +If your BIG-IP system seems to be using a relatively high amount of CPU and degraded performance, you may be experiencing a known issue with the **restjavad** daemon. This is an issue with the underlying BIG-IP framework, and not an issue with BIG-IP Telemetry Streaming. **More information** |br| Restjavad may become unstable if the amount of memory required by the daemon exceeds the value allocated for its use. The memory required by the restjavad daemon may grow significantly in system configurations with either a high volume of device statistics collection (AVR provisioning), or a with relatively large number of LTM objects managed by the REST framework (SSL Orchestrator provisioning). The overall system performance is degraded during the continuous restart of the restjavad daemon due to high CPU usage. @@ -372,11 +372,11 @@ Increase the memory allocated for the restjavad daemon (e.g. 2 GB), by running t .. _memory: -Where can I find Telemetry Streaming memory threshold information? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This section contains guidance how to configure the Telemetry Streaming memory usage threshold to help prevent **restnoded** from restarting when too much memory is used. When **restnoded** restarts, the Telemetry Streaming consumer is unavailable. +Where can I find the BIG-IP TS memory threshold information? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This section contains guidance how to configure the F5 BIG-IP Telemetry Streaming memory usage threshold to help prevent **restnoded** from restarting when too much memory is used. When **restnoded** restarts, the BIG-IP Telemetry Streaming consumer is unavailable. -Telemetry Streaming v1.18 introduced a change in behavior by adding monitor checks that run by default. Memory usage is monitored to prevent **restnoded** from crashing and restarting if memory usage becomes too high. By default (without user configuration), this translates to 90% of total memory allocated for restnoded (1433 MB by default, unless you set the db variables as noted in the workaround section of :ref:`restjavad`). +F5 BIG-IP Telemetry Streaming v1.18 introduced a change in behavior by adding monitor checks that run by default. Memory usage is monitored to prevent **restnoded** from crashing and restarting if memory usage becomes too high. By default (without user configuration), this translates to 90% of total memory allocated for restnoded (1433 MB by default, unless you set the db variables as noted in the workaround section of :ref:`restjavad`). You can configure your memory threshold using the new **memoryThresholdPercent** property in the **Controls** class. For example, to set the memory threshold to 65%, you use: @@ -423,11 +423,11 @@ Monitor checks run by default on intervals depending on %memory usage: .. _splunkmem: -Why do I see memory usage spikes when TS is configured to send data to a Splunk consumer? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -By default, Telemetry Streaming compresses data before sending it to Splunk. Depending on the events per second rate (events from the Event Listener and System Poller), you may see spikes in memory usage. +Why do I see memory usage spikes when BIG-IP TS is configured to send data to a Splunk consumer? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +By default, BIG-IP Telemetry Streaming compresses data before sending it to Splunk. Depending on the events per second rate (events from the Event Listener and System Poller), you may see spikes in memory usage. -Telemetry Streaming 1.19 and later includes the **compressionType** property in the |telemetryconsumer| class. You can set this property to **none** (**gzip** is the default) to help reduce memory usage. +F5 BIG-IP Telemetry Streaming 1.19 and later includes the **compressionType** property in the |telemetryconsumer| class. You can set this property to **none** (**gzip** is the default) to help reduce memory usage. diff --git a/docs/using-ts.rst b/docs/using-ts.rst index ca137487..6ea8291e 100644 --- a/docs/using-ts.rst +++ b/docs/using-ts.rst @@ -1,9 +1,9 @@ -Using Telemetry Streaming -========================= -This section of the document describes how to use Telemetry Streaming. +Using F5 BIG-IP Telemetry Streaming +=================================== +This section of the document describes how to use F5 BIG-IP Telemetry Streaming. -Using Telemetry Streaming Index -------------------------------- +Using F5 BIG-IP Telemetry Streaming Index +----------------------------------------- .. toctree:: :maxdepth: 2 diff --git a/docs/validate.rst b/docs/validate.rst index 0c641ca0..636e56ed 100644 --- a/docs/validate.rst +++ b/docs/validate.rst @@ -2,7 +2,7 @@ Validating a declaration ------------------------ -In this section, we show you how to validate a Telemetry Streaming declaration against the schema using Microsoft |vsc|. Using this type of validation is useful when composing a declaration manually, or to check the accuracy of a declaration before deployment. +In this section, we show you how to validate a F5 BIG-IP Telemetry Streaming declaration against the schema using Microsoft |vsc|. Using this type of validation is useful when composing a declaration manually, or to check the accuracy of a declaration before deployment. For more information on editing JSON with Visual Studio Code, see |json|. @@ -12,9 +12,9 @@ To validate a declaration Use the following procedure to validate a declaration. 1. Download and install |vsc|. -2. Go to the |schema| directory of the AS3 repo on GitHub. +2. Go to the |schema| directory of the BIG-IP AS3 repo on GitHub. - - Click either **latest** or the specific AS3 version you are using. + - Click either **latest** or the specific BIG-IP AS3 version you are using. - Click the **as3-schema.json** file (both files in each directory are the same), and then click the **Raw** tab. - Copy the URL of the raw schema file. diff --git a/examples/declarations/f5_beacon.json b/examples/declarations/f5_beacon.json deleted file mode 100644 index 759c6f98..00000000 --- a/examples/declarations/f5_beacon.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "class":"Telemetry", - "Beacon_Consumer":{ - "class":"Telemetry_Consumer", - "type":"Generic_HTTP", - "host":"ingestion.ovr.prd.f5aas.com", - "protocol":"https", - "port":50443, - "path":"/beacon/v1/ingest-telemetry-streaming", - "method":"POST", - "enable":true, - "trace":false, - "headers":[ - { - "name":"grpc-metadata-x-f5-ingestion-token", - "value":"`>@/passphrase`" - } - ], - "passphrase":{ - "cipherText":"F5 Beacon Access Token" - } - } - } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9dd3742a..3e0be077 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "f5-telemetry", - "version": "1.31.0-2", + "version": "1.32.0-2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -46,6 +46,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "optional": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -54,6 +55,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "optional": true, "requires": { "@babel/types": "^7.15.6", "jsesc": "^2.5.1", @@ -92,12 +94,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -107,12 +111,14 @@ "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "optional": true }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", @@ -140,6 +146,7 @@ "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -177,6 +184,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "optional": true, "requires": { "@babel/types": "^7.15.4" }, @@ -184,12 +192,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -221,6 +231,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "optional": true, "requires": { "@babel/helper-annotate-as-pure": "^7.15.4", "@babel/helper-function-name": "^7.15.4", @@ -234,6 +245,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "optional": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -242,6 +254,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "optional": true, "requires": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", @@ -252,6 +265,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "optional": true, "requires": { "@babel/types": "^7.15.4" } @@ -260,6 +274,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "optional": true, "requires": { "@babel/types": "^7.15.4" } @@ -267,12 +282,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -282,12 +299,14 @@ "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "optional": true }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", @@ -298,6 +317,7 @@ "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -329,6 +349,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "optional": true, "requires": { "@babel/types": "^7.15.4" }, @@ -336,12 +357,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -353,6 +376,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "optional": true, "requires": { "@babel/types": "^7.15.4" }, @@ -360,12 +384,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -420,6 +446,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "optional": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -459,6 +486,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "optional": true, "requires": { "@babel/types": "^7.15.4" } @@ -466,12 +494,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -481,12 +511,14 @@ "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "optional": true }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", @@ -514,6 +546,7 @@ "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -525,6 +558,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "optional": true, "requires": { "@babel/types": "^7.15.4" }, @@ -532,12 +566,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -548,12 +584,14 @@ "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "optional": true }, "@babel/helper-replace-supers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "optional": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.15.4", "@babel/helper-optimise-call-expression": "^7.15.4", @@ -565,6 +603,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "optional": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -573,6 +612,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "optional": true, "requires": { "@babel/types": "^7.15.6", "jsesc": "^2.5.1", @@ -583,6 +623,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "optional": true, "requires": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", @@ -593,6 +634,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "optional": true, "requires": { "@babel/types": "^7.15.4" } @@ -601,6 +643,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "optional": true, "requires": { "@babel/types": "^7.15.4" } @@ -608,12 +651,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -623,12 +668,14 @@ "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "optional": true }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", @@ -639,6 +686,7 @@ "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", @@ -655,6 +703,7 @@ "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -707,7 +756,8 @@ "@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "optional": true }, "@babel/helpers": { "version": "7.15.4", @@ -724,6 +774,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "optional": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -771,12 +822,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "optional": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -786,12 +839,14 @@ "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "optional": true }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "optional": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", @@ -819,6 +874,7 @@ "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "optional": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -1692,6 +1748,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-5.4.1.tgz", "integrity": "sha512-NWO2YvNGjXvZ6yvcpWCDCWRpFjFKUUInUNqnD1rtD4cOnqWX458ViHeHhNsEQ1b5c22zDw/MedAbUwkvudXiWg==", + "optional": true, "requires": { "mutation-testing-metrics": "1.7.5", "mutation-testing-report-schema": "1.7.4", @@ -1701,7 +1758,8 @@ "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "optional": true } } }, @@ -1765,12 +1823,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, "requires": { "color-convert": "^2.0.1" } @@ -1779,6 +1839,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1803,6 +1864,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, "requires": { "color-name": "~1.1.4" } @@ -1810,7 +1872,8 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true }, "commander": { "version": "8.1.0", @@ -1837,6 +1900,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1849,7 +1913,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true }, "inquirer": { "version": "8.1.5", @@ -1935,6 +2000,7 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.1.tgz", "integrity": "sha512-vNenx7gqjPyeKpRnM6S5Ksm/oFTRijWWzYlRON04KaehZ3YjDwEmVjGUGo0TKWVjeNXOujVRlh0K1drUbcdPkw==", + "optional": true, "requires": { "tslib": "~2.1.0" }, @@ -1942,7 +2008,8 @@ "tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "optional": true } } }, @@ -1976,6 +2043,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, "requires": { "ansi-regex": "^5.0.1" } @@ -1984,6 +2052,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, "requires": { "has-flag": "^4.0.0" } @@ -2088,6 +2157,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-5.4.1.tgz", "integrity": "sha512-G0IaLUO15Rk7otvSz8/ayAuUW9AvGRxQZNZnNut44YKR0J1dk3rI1sFhQwaAh3gKFElm6FntToDoChI4eGZElg==", + "optional": true, "requires": { "lodash.flatmap": "~4.5.0" } @@ -3097,7 +3167,8 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true }, "continuation-local-storage": { "version": "3.2.1", @@ -3385,6 +3456,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, "requires": { "once": "^1.4.0" } @@ -5079,7 +5151,8 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "optional": true }, "is-weakref": { "version": "1.0.1", @@ -5439,7 +5512,8 @@ "lodash.flatmap": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" + "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=", + "optional": true }, "lodash.flattendeep": { "version": "4.4.0", @@ -5912,6 +5986,7 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-1.7.5.tgz", "integrity": "sha512-BkXuzaMHzP3V+1QlScJ0es13PWEIXsc48t8/OMuCB/RDyCKKblZNlGb7KpY4oDgU0VIFMR6sBJ4F3IFkY6Elnw==", + "optional": true, "requires": { "mutation-testing-report-schema": "1.7.4" } @@ -5919,7 +5994,8 @@ "mutation-testing-report-schema": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-1.7.4.tgz", - "integrity": "sha512-69CxAaIBprkxvHkZ/1zDJesFOxiXAKUpOeK6xUHAmfqMW3zYfb+nPae40GwTQt9WFFCHj56O6d6GJzR7Qm2ZwQ==" + "integrity": "sha512-69CxAaIBprkxvHkZ/1zDJesFOxiXAKUpOeK6xUHAmfqMW3zYfb+nPae40GwTQt9WFFCHj56O6d6GJzR7Qm2ZwQ==", + "optional": true }, "nan": { "version": "2.14.2", @@ -6098,6 +6174,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "optional": true, "requires": { "path-key": "^3.0.0" }, @@ -6105,7 +6182,8 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "optional": true } } }, @@ -6535,6 +6613,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, "requires": { "color-convert": "^2.0.1" } @@ -6564,6 +6643,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6582,6 +6662,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, "requires": { "color-name": "~1.1.4" } @@ -6589,12 +6670,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true }, "log-symbols": { "version": "4.1.0", @@ -6655,6 +6738,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, "requires": { "has-flag": "^4.0.0" } diff --git a/package.json b/package.json index b2226372..8a828b79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "f5-telemetry", - "version": "1.31.0-2", + "version": "1.32.0-2", "author": "F5 Networks", "license": "Apache-2.0", "repository": { diff --git a/src/lib/consumers/DataDog/index.js b/src/lib/consumers/DataDog/index.js index 39b48480..b4735293 100644 --- a/src/lib/consumers/DataDog/index.js +++ b/src/lib/consumers/DataDog/index.js @@ -22,6 +22,10 @@ const metricsUtil = require('../shared/metricsUtil'); const miscUtil = require('../../utils/misc'); const promiseUtil = require('../../utils/promise'); +const DATA_DOG_TYPES = { + LOGS: 'logs', + METRICS: 'metrics' +}; const DATA_DOG_API_ENDPOINTS = { LOGS: '/api/v2/logs', METRICS: '/api/v2/series' @@ -71,31 +75,31 @@ const compressData = (zlibMethod, data) => new Promise((resolve, reject) => { /** * Get function to compress data * - * @param {string} type - DataDog data type + * @param {string} ddType - DataDog data type * * @returns {function(data):Promise} function */ -const getCompressionFunc = (type) => compressData.bind(null, type === 'log' ? 'gzip' : 'deflate'); +const getCompressionFunc = (ddType) => compressData.bind(null, ddType === DATA_DOG_TYPES.LOGS ? 'gzip' : 'deflate'); /** * Get the correct DataDog Gateway host for the provided DataDog region and telemetry type * * @param {string} region - DataDog region - * @param {string} type - Telemetry type (metrics or log) + * @param {string} ddType - Telemetry type (metrics or logs) * * @returns {string} the correct DataDog Gateway host to send telemetry to */ -const getDataDogHost = (region, ddType) => DATA_DOG_REGIONAL_GATEWAYS[region][ddType === 'log' ? 'LOGS' : 'METRICS']; +const getDataDogHost = (region, ddType) => DATA_DOG_REGIONAL_GATEWAYS[region][ddType === DATA_DOG_TYPES.LOGS ? 'LOGS' : 'METRICS']; /** * Get the correct DataDog API endpoint for the provided telemetry type * - * @param {string} type - Telemetry type (metrics or log) + * @param {string} ddType - Telemetry type (metrics or logs) * * @returns {string} rhe correct DataDog API endpoint to send telemetry to */ -const getDataDogEndpoint = (type) => ( - type === 'log' +const getDataDogEndpoint = (ddType) => ( + ddType === DATA_DOG_TYPES.LOGS ? DATA_DOG_API_ENDPOINTS.LOGS : DATA_DOG_API_ENDPOINTS.METRICS ); @@ -110,7 +114,7 @@ const getDataDogEndpoint = (type) => ( */ const wrapChunks = (chunks, ddType) => { chunks = chunks.getAll(); - if (ddType === 'log') { + if (ddType === DATA_DOG_TYPES.LOGS) { return chunks[0]; } return chunks.map((c) => `{"series":[${c.join('')}]}`); @@ -184,6 +188,7 @@ module.exports = function (context) { // for now use current time, ideally should try to fetch it from event data const timestamp = Math.floor(Date.now() / 1000); const maxChunkSize = needGzip ? DATA_DOG_MAX_GZIP_CHUNK_SIZE : DATA_DOG_MAX_CHUNK_SIZE; + // chunks contains data either for metrics or logs const chunks = new miscUtil.Chunks({ maxChunkSize, serializer(d) { @@ -191,15 +196,24 @@ module.exports = function (context) { return `${this.currentChunkSize && (this.currentChunkSize + d.length <= maxChunkSize) ? ',' : ''}${d}`; } }); + // auxChunks (auxiliary chunks) contains data for logs only, and only if Chunks contains data for metrics + const auxChunks = new miscUtil.Chunks({ + maxChunkSize, + serializer(d) { + d = JSON.stringify(d); + return `${this.currentChunkSize && (this.currentChunkSize + d.length <= maxChunkSize) ? ',' : ''}${d}`; + } + }); let allowSelfSignedCert = false; if (!miscUtil.isObjectEmpty(context.config.proxy) && typeof context.config.proxy.allowSelfSignedCert !== 'undefined') { allowSelfSignedCert = context.config.proxy.allowSelfSignedCert; } let ddType; - + let needAuxData; if (eventType === EVENT_TYPES.EVENT_LISTENER || eventType === EVENT_TYPES.SYSLOG_EVENT) { - ddType = 'log'; + ddType = DATA_DOG_TYPES.LOGS; + needAuxData = false; chunks.add({ ddsource: context.event.type, // usually there is nothing along this data that can be used as a tag @@ -212,7 +226,8 @@ module.exports = function (context) { const defaultTags = Object.assign({}, customTags, { host: hostname }); - ddType = 'metrics'; + ddType = DATA_DOG_TYPES.METRICS; + needAuxData = true; metricsUtil.findMetricsAndTags(data, { collectTags: true, excludeNameFromPath: true, @@ -236,10 +251,11 @@ module.exports = function (context) { } }); } - if (chunks.totalSize === 0) { + + if (chunks.totalSize === 0 || needAuxData) { /** * Looks like no metrics were found, then let's - * transform this event into log message and attach + * transform this event into logs message and attach * all possible tags to it * Ex: LTM data */ @@ -252,66 +268,132 @@ module.exports = function (context) { } }); - ddType = 'log'; - chunks.add({ - ddsource: context.event.type, - ddtags: buildTags(Object.assign(ddtags, customTags), true), - hostname, - message: JSON.stringify(data), - service: ddService - }); + if (chunks.totalSize === 0) { + ddType = DATA_DOG_TYPES.LOGS; + needAuxData = false; + chunks.add({ + ddsource: context.event.type, + ddtags: buildTags(Object.assign(ddtags, customTags), true), + hostname, + message: JSON.stringify(data), + service: ddService + }); + } else { + auxChunks.add({ + ddsource: context.event.type, + ddtags: buildTags(Object.assign(ddtags, customTags), true), + hostname, + message: JSON.stringify(data), + service: ddService + }); + } } const ddData = wrapChunks(chunks, ddType); + let ddAuxData = []; + if (needAuxData) { + // auxiliary is always DATA_DOG_TYPES.LOGS + ddAuxData = wrapChunks(auxChunks, DATA_DOG_TYPES.LOGS); + } if (context.tracer) { context.tracer.write({ data: ddData, - host: getDataDogHost(ddRegion), + host: getDataDogHost(ddRegion, ddType), httpAgentOpts, type: ddType, uri: getDataDogEndpoint(ddType) }); + if (needAuxData) { + context.tracer.write({ + data: ddAuxData, + host: getDataDogHost(ddRegion, DATA_DOG_TYPES.LOGS), + httpAgentOpts, + type: DATA_DOG_TYPES.LOGS, + uri: getDataDogEndpoint(DATA_DOG_TYPES.LOGS) + }); + } } const headers = { 'Content-Type': 'application/json', 'DD-API-KEY': context.config.apiKey }; + const auxHeaders = JSON.parse(JSON.stringify(headers)); let compressDataFn; + let compressAuxDataFn; if (needGzip) { - const encoding = ddType === 'log' ? 'gzip' : 'deflate'; + const encoding = ddType === DATA_DOG_TYPES.LOGS ? 'gzip' : 'deflate'; compressDataFn = getCompressionFunc(ddType); + compressAuxDataFn = getCompressionFunc(DATA_DOG_TYPES.LOGS); Object.assign(headers, { 'Accept-Encoding': encoding, 'Content-Encoding': encoding }); + Object.assign(auxHeaders, { + 'Accept-Encoding': 'gzip', + 'Content-Encoding': 'gzip' + }); } else { compressDataFn = (d) => Promise.resolve(d); + compressAuxDataFn = (d) => Promise.resolve(d); } - return promiseUtil.loopForEach(ddData, (dataChunk) => compressDataFn(dataChunk) - .then((compressedData) => httpUtil.sendToConsumer({ - agent: getHttpAgent(context.config), - allowSelfSignedCert, - body: compressedData, - expectedResponseCode: [200, 202], - headers: Object.assign({}, headers), - hosts: [getDataDogHost(ddRegion, ddType)], - json: false, - logger: context.logger, - method: 'POST', - port: DATA_DOG_PORT, - protocol: DATA_DOG_PROTOCOL, - proxy: context.config.proxy, - uri: getDataDogEndpoint(ddType) - })) - .then(() => { - context.logger.debug(`successfully sent ${dataChunk.length} bytes of data`); + return promiseUtil.allSettled([ + promiseUtil.loopForEach(ddData, (dataChunk) => compressDataFn(dataChunk) + .then((compressedData) => httpUtil.sendToConsumer({ + agent: getHttpAgent(context.config), + allowSelfSignedCert, + body: compressedData, + expectedResponseCode: [200, 202], + headers: Object.assign({}, headers), + hosts: [getDataDogHost(ddRegion, ddType)], + json: false, + logger: context.logger, + method: 'POST', + port: DATA_DOG_PORT, + protocol: DATA_DOG_PROTOCOL, + proxy: context.config.proxy, + uri: getDataDogEndpoint(ddType) + })) + .then(() => { + context.logger.debug(`successfully sent ${dataChunk.length} bytes of data`); + }) + .catch((err) => { + context.logger.error(`Unable to send ${dataChunk.length} bytes of data. Error: ${err.message ? err.message : err}`); + throw err; + })), + promiseUtil.loopForEach(ddAuxData, (dataChunk) => compressAuxDataFn(dataChunk) + .then((compressedData) => httpUtil.sendToConsumer({ + agent: getHttpAgent(context.config), + allowSelfSignedCert, + body: compressedData, + expectedResponseCode: [200, 202], + headers: Object.assign({}, auxHeaders), + hosts: [getDataDogHost(ddRegion, DATA_DOG_TYPES.LOGS)], + json: false, + logger: context.logger, + method: 'POST', + port: DATA_DOG_PORT, + protocol: DATA_DOG_PROTOCOL, + proxy: context.config.proxy, + uri: getDataDogEndpoint(DATA_DOG_TYPES.LOGS) + })) + .then(() => { + context.logger.debug(`successfully sent ${dataChunk.length} bytes of data`); + }) + .catch((err) => { + context.logger.error(`Unable to send ${dataChunk.length} bytes of data. Error: ${err.message ? err.message : err}`); + throw err; + })) + ]) + .then((results) => { + promiseUtil.getValues(results); // throws error if found it + context.logger.debug('success'); }) .catch((err) => { - context.logger.error(`Unable to send ${dataChunk.length} bytes of data. Error: ${err.message ? err.message : err}`); - })); + context.logger.error(`Unable to forward to DataDog consumer. Error: ${err.message ? err.message : err}`); + }); }; /** diff --git a/src/schema/1.32.0/actions_schema.json b/src/schema/1.32.0/actions_schema.json new file mode 100644 index 00000000..c658439b --- /dev/null +++ b/src/schema/1.32.0/actions_schema.json @@ -0,0 +1,187 @@ +{ + "$id": "actions_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Actions schema", + "description": "", + "type": "object", + "definitions": { + "baseActionsChain": { + "title": "Chain of Actions", + "description": "Actions to be performed on the data.", + "type": "array", + "items": { + "$ref": "#/definitions/baseActionObject" + } + }, + "baseActionObject": { + "title": "Base Action object", + "description": "Base object to build actions.", + "type": "object", + "properties": { + "enable": { + "title": "Enable", + "description": "Whether to enable this action in the declaration or not.", + "type": "boolean", + "default": true + } + } + }, + "baseConditionalActionObject": { + "title": "Base Action object with support for conditional statements", + "description": "Base Action object with support for conditional statements.", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseActionObject" }, + { + "anyOf": [ + { + "properties": { + "ifAllMatch": { + "title": "If All Match", + "description": "The conditions that will be checked against. All must be true.", + "type": "object", + "additionalProperties": true + } + }, + "not": { "required": ["ifAnyMatch"] } + }, + { + "properties": { + "ifAnyMatch": { + "title": "If Any Match", + "description": "An array of ifAllMatch objects. Any individual ifAllMatch object may match, but each condition within an ifAllMatch object must be true", + "type": "array" + } + }, + "not": { "required": ["ifAllMatch"] } + } + ] + } + ] + }, + "subLocation": { + "title": "Location", + "description": "Used to specify a location in TS data. Use boolean type with value true to specify the location.", + "oneOf": [ + { + "type": "boolean", + "const": true + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/subLocation" + } + } + ] + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/subLocation" + } + }, + "setTagAction": { + "title": "setTag Action", + "description": "Action to assign a tag(s) to particular or default location", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "setTag": { + "title": "Set Tag", + "description": "The tag values to be added.", + "type": "object", + "additionalProperties": true + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["setTag"] + } + ] + }, + "includeDataAction": { + "title": "includeData Action", + "description": "Action to specify data fields to include in the output", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "includeData": { + "title": "Include Data", + "description": "The data fields to include in the output", + "type": "object", + "additionalProperties": false + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["includeData", "locations"] + } + ] + }, + "excludeDataAction": { + "title": "excludeData Action", + "description": "Action to specify data fields to exclude form the output", + "type": "object", + "allOf": [ + { "$ref": "#/definitions/baseConditionalActionObject" }, + { + "properties": { + "excludeData": { + "title": "Exclude Data", + "description": "The data fields to exclude from the output", + "type": "object", + "additionalProperties": false + }, + "locations": { + "title": "Location", + "description": "The location(s) to apply the action.", + "allOf": [{ "$ref": "#/definitions/locations" }] + }, + "enable": {}, + "ifAllMatch": {}, + "ifAnyMatch": {} + }, + "additionalProperties": false, + "required": ["excludeData", "locations"] + } + ] + }, + "inputDataStreamActionsChain": { + "title": "", + "description": "", + "allOf": [ + { "$ref": "#/definitions/baseActionsChain" }, + { + "items": { + "oneOf": [ + { "$ref": "#/definitions/excludeDataAction" }, + { "$ref": "#/definitions/includeDataAction" }, + { "$ref": "#/definitions/setTagAction" } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/src/schema/1.32.0/base_schema.json b/src/schema/1.32.0/base_schema.json new file mode 100644 index 00000000..c56e85ac --- /dev/null +++ b/src/schema/1.32.0/base_schema.json @@ -0,0 +1,310 @@ +{ + "$id": "base_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming", + "description": "", + "type": "object", + "definitions": { + "enable": { + "title": "Enable", + "description": "This property can be used to enable/disable the poller/listener" , + "type": "boolean" + }, + "trace": { + "title": "Trace", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead" , + "minLength": 1, + "type": ["boolean", "string"] + }, + "traceConfig": { + "title": "Trace (v2)", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead", + "type": "object", + "properties": { + "type": { + "title": "Trace type", + "description": "Trace type - output data or input data", + "type": "string", + "enum": ["output", "input"] + }, + "path": { + "title": "Path to trace file", + "description": "Path to trace file to write data to", + "type": "string", + "minLength": 1 + } + }, + "required": ["type"] + }, + "traceV2": { + "title": "Trace (v2)", + "description": "Enables data dumping to file. Boolean uses pre-defined file location, however value could be a string which contains path to a specific file instead", + "oneOf": [ + { "$ref": "#/definitions/traceConfig" }, + { + "type": "array", + "minItems": 1, + "maxItems": 2, + "uniqueItemProperties": ["type"], + "items": { + "allOf": [{ + "$ref": "#/definitions/traceConfig" + }] + } + } + ] + }, + "secret": { + "title": "Passphrase (secret)", + "description": "" , + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming secret class", + "type": "string", + "enum": [ "Secret" ], + "default": "Secret" + }, + "cipherText": { + "title": "Cipher Text: this contains a secret to encrypt", + "type": "string" + }, + "environmentVar": { + "title": "Environment Variable: this contains the named env var where the secret resides", + "type": "string", + "minLength": 1 + }, + "protected": { + "$comment": "Meta property primarily used to determine if 'cipherText' needs to be encrypted", + "title": "Protected", + "type": "string", + "enum": [ "plainText", "plainBase64", "SecureVault" ], + "default": "plainText" + } + }, + "oneOf": [ + { "required": [ "cipherText" ] }, + { "required": [ "environmentVar" ] } + ], + "f5secret": true + }, + "username": { + "$comment": "Common field for username to use everywhere in scheme", + "title": "Username", + "type": "string", + "minLength": 1 + }, + "stringOrSecret": { + "allOf": [ + { + "if": { "type": "string" }, + "then": {}, + "else": {} + }, + { + "if": { "type": "object" }, + "then": { "$ref": "base_schema.json#/definitions/secret" }, + "else": {} + } + ] + }, + "constants": { + "title": "Constants", + "description": "" , + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming constants class", + "type": "string", + "enum": [ "Constants" ] + } + }, + "additionalProperties": true + }, + "tag": { + "$comment": "Defaults do not get applied for $ref objects, so place defaults alongside instead.", + "title": "Tag", + "description": "" , + "type": "object", + "properties": { + "tenant": { + "title": "Tenant tag", + "type": "string", + "minLength": 1 + }, + "application": { + "title": "Application tag", + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": true + }, + "match": { + "$comment": "Defaults do not get applied for $ref objects, so place defaults alongside instead.", + "title": "Pattern to filter data", + "description": "", + "type": "string" + }, + "enableHostConnectivityCheck": { + "$comment": "This property can be used to enable/disable the host connectivity check in configurations where this is in effect", + "title": "Host", + "description": "" , + "type": "boolean" + }, + "allowSelfSignedCert": { + "$comment": "This property can be used by consumers, system pollers to enable/disable SSL Cert check", + "title": "Allow Self-Signed Certificate", + "description": "" , + "type": "boolean" + }, + "host": { + "$comment": "This property can be used by consumers, system pollers", + "title": "Host", + "description": "" , + "type": "string", + "minLength": 1, + "anyOf": [ + { "format": "ipv4" }, + { "format": "ipv6" }, + { "format": "hostname" } + ], + "hostConnectivityCheck": true + }, + "port": { + "title": "Port", + "description": "" , + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "protocol": { + "title": "Protocol", + "description": "" , + "type": "string", + "enum": [ "http", "https" ] + }, + "proxy": { + "title": "Proxy Configuration", + "description": "", + "type": "object", + "dependencies": { + "passphrase": [ "username" ] + }, + "required": [ "host" ], + "properties": { + "host": { + "$ref": "#/definitions/host" + }, + "port": { + "default": 80, + "allOf": [ + { + "$ref": "#/definitions/port" + } + ] + }, + "protocol": { + "default": "http", + "allOf": [ + { + "$ref": "#/definitions/protocol" + } + ] + }, + "enableHostConnectivityCheck": { + "$ref": "#/definitions/enableHostConnectivityCheck" + }, + "allowSelfSignedCert": { + "$ref": "#/definitions/allowSelfSignedCert" + }, + "username": { + "$ref": "#/definitions/username" + }, + "passphrase": { + "$ref": "#/definitions/secret" + } + }, + "additionalProperties": false + } + }, + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming top level class", + "type": "string", + "enum": [ "Telemetry" ] + }, + "schemaVersion": { + "title": "Schema version", + "description": "Version of ADC Declaration schema this declaration uses", + "type": "string", + "$comment": "IMPORTANT: In enum array, please put current schema version first, oldest-supported version last. Keep enum array sorted most-recent-first.", + "enum": [ "1.32.0", "1.31.0", "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], + "default": "1.32.0" + }, + "$schema": { + "title": "Schema", + "description": "", + "type": "string" + } + }, + "additionalProperties": { + "$comment": "AJV does not resolve defaults inside oneOf/anyOf, so instead use allOf. Any schema refs should also use allOf with an if/then/else on class", + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Telemetry_System", + "Telemetry_System_Poller", + "Telemetry_Listener", + "Telemetry_Consumer", + "Telemetry_Pull_Consumer", + "Telemetry_iHealth_Poller", + "Telemetry_Endpoints", + "Telemetry_Namespace", + "Controls", + "Shared" + ] + } + }, + "allOf": [ + { + "$ref": "system_schema.json#" + }, + { + "$ref": "system_poller_schema.json#" + }, + { + "$ref": "listener_schema.json#" + }, + { + "$ref": "consumer_schema.json#" + }, + { + "$ref": "pull_consumer_schema.json#" + }, + { + "$ref": "ihealth_poller_schema.json#" + }, + { + "$ref": "endpoints_schema.json#" + }, + { + "$ref": "controls_schema.json#" + }, + { + "$ref": "shared_schema.json#" + }, + { + "$ref": "namespace_schema.json#" + } + ] + }, + "required": [ + "class" + ] +} diff --git a/src/schema/1.32.0/consumer_schema.json b/src/schema/1.32.0/consumer_schema.json new file mode 100644 index 00000000..31e6eb96 --- /dev/null +++ b/src/schema/1.32.0/consumer_schema.json @@ -0,0 +1,1485 @@ +{ + "$id": "consumer_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Consumer schema", + "description": "", + "type": "object", + "definitions": { + "jmesPathAction": { + "title": "JMESPath Action", + "description": "Will use a JMESPath expression to modify the incoming data payload", + "type": "object", + "allOf": [ + { "$ref": "actions_schema.json#/definitions/baseActionObject" }, + { + "properties": { + "JMESPath": { + "title": "JMESPath", + "description": "Will use a JMESPath expression to modify the incoming data payload", + "type": "object", + "additionalProperties": false + }, + "expression": { + "title": "Expression", + "description": "The JMESPath expression to be applied to the incoming data payload", + "type": "string", + "minLength": 1 + }, + "enable": {} + }, + "additionalProperties": false, + "required": ["JMESPath", "expression"] + } + ] + }, + "autoTaggingStatsd": { + "title": "Statsd auto tagging", + "description": "Will parse incoming payload for values to automatically add as tags.", + "type": "object", + "properties": { + "method": { + "title": "AutoTagging method", + "description": "AutoTagging method to use to fetch tags", + "type": "string", + "enum": ["sibling"] + } + }, + "additionalProperties": false, + "required": ["method"] + }, + "genericHttpActions": { + "title": "Actions", + "description": "Actions to be performed on the Generic HTTP Consumer.", + "allOf": [ + { "$ref": "actions_schema.json#/definitions/baseActionsChain" }, + { + "items": { + "oneOf": [ + { "$ref": "#/definitions/jmesPathAction" } + ] + } + } + ] + }, + "host": { + "$comment": "Required for certain consumers: standard property", + "title": "Host", + "description": "FQDN or IP address" , + "type": "string", + "minLength": 1, + "anyOf": [ + { "format": "ipv4" }, + { "format": "ipv6" }, + { "format": "hostname" } + ], + "hostConnectivityCheck": true + }, + "protocols": { + "$comment": "Required for certain consumers: standard property", + "title": "Protocols (all)", + "description": "" , + "type": "string", + "enum": [ "https", "http", "tcp", "udp", "binaryTcpTls", "binaryTcp" ] + }, + "port": { + "$comment": "Required for certain consumers: standard property", + "title": "Port", + "description": "" , + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "path": { + "$comment": "Required for certain consumers: standard property", + "title": "Path", + "description": "Path to post data to", + "type": ["string", "object"], + "minLength": 1, + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + }, + "method": { + "$comment": "Required for certain consumers: standard property", + "title": "Method", + "description": "HTTP method to use (limited to sensical choices)" , + "type": "string", + "enum": [ "POST", "GET", "PUT" ] + }, + "headers": { + "$comment": "Required for certain consumers: standard property", + "title": "Headers", + "description": "HTTP headers to use" , + "type": "array", + "items": { + "properties": { + "name": { + "description": "Name of this header", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of this header", + "type": ["string", "object"], + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + } + }, + "customOpts": { + "$comment": "Required for certain consumers: standard property", + "title": "Custom Opts (Client Library Dependent)", + "description": "Additional options for use by consumer client library. Refer to corresponding consumer lib documentation for acceptable keys and values." , + "type": "array", + "items": { + "properties": { + "name": { + "description": "Name of the option", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of the option", + "minLength": 1, + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "allOf": [ + { + "f5expand": true + }, + { + "$ref": "base_schema.json#/definitions/stringOrSecret" + } + ] + } + ] + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + }, + "minItems": 1 + }, + "format": { + "$comment": "Required for certain consumers: Splunk and Azure_Log_Analytics", + "title": "Format (informs consumer additional formatting may be required)", + "description": "", + "type": "string" + }, + "username": { + "$comment": "Required for certain consumers: standard property", + "title": "Username", + "description": "" , + "minLength": 1, + "type": "string", + "f5expand": true + }, + "region": { + "$comment": "Required for certain consumers: AWS_CloudWatch, AWS_S3, Azure_Log_Analytics, Azure_App_Insights, DataDog", + "title": "Region", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "endpointUrl": { + "$comment": "Required for certain consumers: AWS_CloudWatch, AWS_S3", + "title": "endpoint url", + "description": "The full endpoint URL for service requests", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "bucket": { + "$comment": "Required for certain consumers: AWS_S3", + "title": "Bucket", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "maxAwsLogBatchSize": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Maximum Batch Size", + "description": "The maximum number of telemetry items to include in a payload to the ingestion endpoint", + "type": "integer", + "minimum": 1, + "default": 100, + "maximum": 10000 + }, + "logGroup": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Log Group", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "logStream": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Log Stream", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "metricNamespace": { + "$comment": "Required for certain consumers: AWS_CloudWatch", + "title": "Metric Namespace", + "description": "The namespace for the metrics", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "metricPrefix": { + "$comment": "Required for certain consumers: DataDog", + "title": "Metric Prefix", + "description": "The string value(s) to use as a metric prefix", + "type": "array", + "minItems": 1, + "items": { + "allOf": [{ + "type": "string", + "f5expand": true, + "minLength": 1 + }] + } + }, + "workspaceId": { + "$comment": "Required for certain consumers: Azure_Log_Analytics", + "title": "Workspace ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useManagedIdentity": { + "$comment": "Required for certain consumers: Azure_Log_Analytics and Azure_Application_Insights", + "title": "Use Managed Identity", + "description": "Determines whether to use Managed Identity to perform authorization for Azure services", + "type": "boolean", + "default": false + }, + "appInsightsResourceName": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Application Insights Resource Name (Pattern)", + "description": "Name filter used to determine which App Insights resource to send metrics to. If not provided, TS will send metrics to App Insights in the subscription in which the managed identity has permissions to", + "type": "string", + "minLength": 1 + }, + "instrumentationKey": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Instrumentation Key", + "description": "Used to determine which App Insights resource to send metrics to", + "anyOf": [ + { + "type": "string", + "f5expand": true, + "minLength": 1 + }, + { + "type":"array", + "items": { + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "minItems": 1 + } + ] + }, + "maxBatchIntervalMs": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Maximum Batch Interval (ms)", + "description": "The maximum amount of time to wait in milliseconds to for payload to reach maxBatchSize", + "type": "integer", + "minimum": 1000, + "default": 5000 + }, + "maxBatchSize": { + "$comment": "Required for certain consumers: Azure_Application_Insights", + "title": "Maximum Batch Size", + "description": "The maximum number of telemetry items to include in a payload to the ingestion endpoint", + "type": "integer", + "minimum": 1, + "default": 250 + }, + "topic": { + "$comment": "Required for certain consumers: Kafka", + "title": "Topic", + "description": "" , + "type": "string", + "f5expand": true + }, + "index": { + "$comment": "Required for certain consumers: ElasticSearch", + "title": "Index Name", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "apiVersion": { + "$comment": "Required for certain consumers: ElasticSearch", + "title": "API Version", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "dataType": { + "$comment": "Required for certain consumers: AWS_CloudWatch, ElasticSearch", + "title": "Data type", + "description": "" , + "type": "string", + "f5expand": true + }, + "authenticationProtocol": { + "$comment": "Required for certain consumers: Kafka", + "title": "Authentication Protocol", + "description": "" , + "type": "string", + "f5expand": true, + "enum": [ + "SASL-PLAIN", + "TLS", + "None" + ] + }, + "clientCertificate": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Client Certificate", + "description": "Certificate(s) to use when connecting to a secured endpoint.", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "rootCertificate": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Root Certificate", + "description": "Certificate Authority root certificate, used to validate certificate chains.", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "outputMode": { + "$comment": "Required for certain consumers: Generic HTTP", + "title": "output raw data flag", + "description": "Flag to request output of the raw data.", + "type": "string", + "enum": [ "processed", "raw" ] + }, + "projectId": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring", + "title": "Project ID", + "description": "The ID of the relevant project.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "serviceEmail": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Service Email", + "description": "The service email.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKeyId": { + "$comment": "Required for certain consumers when Service Account Token is not used: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Private Key ID", + "description": "The private key ID.", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useServiceAccountToken": { + "$comment": "Used by certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Use Service Account Token", + "description": "Determines whether to use Service Account Token to perform authorization for Google services", + "type": "boolean", + "default": false + }, + "logScope": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging Scope Type", + "description": "" , + "enum": ["projects", "organizations", "billingAccounts", "folders"], + "f5expand": true + }, + "logScopeId": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging Scope ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "logId": { + "$comment": "Required for certain consumers: Google_Cloud_Logging", + "title": "Logging ID", + "description": "" , + "type": "string", + "format": "regex", + "pattern": "^[a-zA-z0-9._-]+$", + "minLength": 1, + "f5expand": true + }, + "privateKey": { + "$comment": "Required for certain consumers: Kafka, Generic HTTP, OpenTelemetry_Exporter", + "title": "Private Key", + "description": "Private Key", + "type": "object", + "f5expand": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/secret" + } + ] + }, + "eventSchemaVersion": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Event Schema Version", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true, + "default": "1" + }, + "f5csTenantId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "F5CS Tenant ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "f5csSensorId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "F5CS Sensor ID", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "payloadSchemaNid": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Namespace ID for payloadSchema", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "serviceAccount": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Service Account", + "description": "Service Account to authentication" , + "type": "object", + "properties": { + "authType": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "SA Type", + "description": "" , + "type": "string", + "enum": ["google-auth" ] + }, + "type": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "SA Type", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "projectId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Project Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKeyId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Private Key Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "privateKey": { + "$ref": "base_schema.json#/definitions/secret" + }, + "clientEmail": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client Email", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "clientId": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client Id", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "authUri": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Auth Uri", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "tokenUri": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Token Uri", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "authProviderX509CertUrl": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Auth Provider X509 Cert Url", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "clientX509CertUrl": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Client X509 Cert Url", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + } + }, + "additionalProperties": false, + "allOf": [ + { + "if": { "properties": { "authType": { "const": "google-auth" } } }, + "then": { + "required": [ + "type", + "projectId", + "privateKeyId", + "privateKey", + "clientEmail", + "clientId", + "authUri", + "tokenUri", + "authProviderX509CertUrl", + "clientX509CertUrl" + ] + }, + "else": {} + } + ] + }, + "targetAudience": { + "$comment": "Required for certain consumers: F5_Cloud", + "title": "Target Audience", + "description": "" , + "type": "string", + "minLength": 1, + "f5expand": true + }, + "useSSL": { + "$comment": "Required for certain consumers: F5_Cloud, OpenTelemetry_Exporter", + "title": "useSSL", + "description": "To decide if GRPC connection should use SSL and then it is secured" , + "type": "boolean", + "f5expand": true + }, + "compressionType": { + "$comment": "Required for certain consumers: DataDog, Splunk", + "title": "Data compression", + "description": "Whether or not to compress data and what compression to use before sending it to destination", + "type": "string", + "enum": ["none", "gzip"] + }, + "reportInstanceMetadata": { + "$comment": "Required for certain consumers: Google_Cloud_Monitoring, Google_Cloud_Logging", + "title": "Instance metadata reporting", + "description": "Enables instance metadata collection and reporting" , + "type": "boolean", + "f5expand": true + }, + "apiKey": { + "$comment": "Required for certain consumers: DataDog", + "title": "API key to use to push data", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "service": { + "$comment": "Required for certain consumers: DataDog", + "title": "The name of the service generating telemetry data", + "type": "string", + "minLength": 1, + "f5expand": true + }, + "convertBooleansToMetrics": { + "$comment": "Required for certain consumers: DataDog, Statsd, OpenTelemetry_Exporter", + "title": "Convert boolean values to metrics", + "description": "Whether or not to convert boolean values to metrics. True becomes 1, False becomes 0" , + "type": "boolean", + "f5expand": true, + "default": false + }, + "customTags": { + "$comment": "Required for certain consumers: DataDog", + "title": "Custom tags", + "description": "A collection of custom tags that are appended to the dynamically generated telemetry tags", + "type": "array", + "minItems": 1, + "items": { + "properties": { + "name": { + "description": "Name of this tag", + "type": "string", + "f5expand": true, + "minLength": 1 + }, + "value": { + "description": "Value of this tag", + "type": "string", + "f5expand": true, + "minLength": 1 + } + }, + "additionalProperties": false + } + }, + "customHttpOpts": { + "items": { + "allOf": [ + { + "if": { "properties": { "name": { "const": "keepAlive" } } }, + "then": { "properties": { "value": { "type": "boolean" } } } + }, + { + "if": { "properties": { "name": { "const": "keepAliveMsecs" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + }, + { + "if": { "properties": { "name": { "const": "maxFreeSockets" } } }, + "then": { "properties": { "value": { "type": "integer", "minimum": 0 } } } + } + ] + } + }, + "otelExporter": { + "$comment": "Required for certain consumers: OpenTelemetry_Exporter", + "title": "Open Telemetry Exporter", + "description": "" , + "type": "string", + "enum": ["grpc", "json", "protobuf" ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Consumer" } } }, + "then": { + "required": [ + "class", + "type" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Consumer class", + "type": "string", + "enum": [ "Telemetry_Consumer" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "type": { + "title": "Type", + "description": "" , + "type": "string", + "enum": [ + "AWS_CloudWatch", + "AWS_S3", + "Azure_Log_Analytics", + "Azure_Application_Insights", + "DataDog", + "default", + "ElasticSearch", + "Generic_HTTP", + "Google_Cloud_Logging", + "Google_Cloud_Monitoring", + "Google_StackDriver", + "Graphite", + "Kafka", + "OpenTelemetry_Exporter", + "Splunk", + "Statsd", + "Sumo_Logic", + "F5_Cloud" + ] + }, + "enableHostConnectivityCheck": { + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "allowSelfSignedCert": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "addTags": {}, + "actions": {}, + "apiKey": {}, + "class": {}, + "customTags": {}, + "enable": {}, + "trace": {}, + "type": {}, + "enableHostConnectivityCheck": {}, + "allowSelfSignedCert": {}, + "host": {}, + "protocol": {}, + "port": {}, + "path": {}, + "method": {}, + "headers": {}, + "customOpts": {}, + "username": {}, + "passphrase": {}, + "format": {}, + "workspaceId": {}, + "useManagedIdentity": {}, + "instrumentationKey": {}, + "appInsightsResourceName": {}, + "maxBatchIntervalMs": {}, + "maxBatchSize": {}, + "region": {}, + "endpointUrl": {}, + "maxAwsLogBatchSize": {}, + "logGroup": {}, + "logStream": {}, + "metricNamespace": {}, + "metricPrefix": {}, + "bucket": {}, + "topic": {}, + "apiVersion": {}, + "index": {}, + "dataType": {}, + "authenticationProtocol": {}, + "projectId": {}, + "serviceEmail": {}, + "privateKey": {}, + "privateKeyId": {}, + "useServiceAccountToken": {}, + "clientCertificate": {}, + "rootCertificate": {}, + "outputMode": {}, + "fallbackHosts": {}, + "eventSchemaVersion": {}, + "f5csTenantId": {}, + "f5csSensorId": {}, + "payloadSchemaNid": {}, + "serviceAccount": {}, + "targetAudience": {}, + "useSSL": {}, + "proxy": {}, + "compressionType": {}, + "logScope": {}, + "logScopeId": {}, + "logId": {}, + "reportInstanceMetadata": {}, + "metricsPath": {}, + "service": {}, + "convertBooleansToMetrics": {}, + "exporter": {} + }, + "additionalProperties": false, + "dependencies": { + "actions": { + "allOf": [ + { + "properties": { "type": { "const": "Generic_HTTP" } } + } + ] + } + } + }, + { + "if": { "properties": { "type": { "const": "default" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Generic_HTTP" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "fallbackHosts": { + "type": "array", + "description": "List FQDNs or IP addresses to be used as fallback hosts" , + "minItems": 1, + "items": { + "allOf": [{ + "$ref": "#/definitions/host" + }] + } + }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/" }, + "method": { "$ref": "#/definitions/method", "default": "POST" }, + "headers": { "$ref": "#/definitions/headers" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" }, + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" }, + "outputMode": { "$ref": "#/definitions/outputMode", "default": "processed" }, + "actions": { "$ref": "#/definitions/genericHttpActions" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "none" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + } + }, + "allOf": [ + { + "if": { "required": [ "clientCertificate" ] }, + "then": { "required": [ "privateKey" ] } + }, + { + "if": { "required": [ "privateKey" ] }, + "then": { "required": [ "clientCertificate" ] } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Splunk" } } }, + "then": { + "required": [ + "host", + "passphrase" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 8088 }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "format": { "$ref": "#/definitions/format", "enum": [ "default", "legacy", "multiMetric" ], "default": "default" }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "gzip" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Azure_Log_Analytics" } } }, + "then": { + "required": [ + "workspaceId" + ], + "properties": { + "workspaceId": { "$ref": "#/definitions/workspaceId" }, + "format": { "$ref": "#/definitions/format", "enum": [ "default", "propertyBased" ], "default": "default" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "useManagedIdentity": { "$ref": "#/definitions/useManagedIdentity", "default": false }, + "region": { "$ref": "#/definitions/region" } + }, + "allOf": [ + { + "dependencies": { + "passphrase": { + "anyOf": [ + { "not": {"required": [ "useManagedIdentity" ] } }, + { "properties": { "useManagedIdentity": { "const": false } } } + ] + } + } + }, + { + "if": { "not": { "required" : [ "useManagedIdentity"] } }, + "then": { "required": ["passphrase"] }, + "else": { + "if": { "properties": { "useManagedIdentity": { "const": true } } }, + "then": { "not": { "required": ["passphrase"] } }, + "else": { "required": ["passphrase"]} + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Azure_Application_Insights" } } }, + "then": { + "properties": { + "instrumentationKey": { "$ref": "#/definitions/instrumentationKey" }, + "maxBatchSize": { "$ref": "#/definitions/maxBatchSize", "default": 250 }, + "maxBatchIntervalMs": { "$ref": "#/definitions/maxBatchIntervalMs", "default": 5000 }, + "customOpts": { "$ref": "#/definitions/customOpts" }, + "useManagedIdentity": { "$ref": "#/definitions/useManagedIdentity", "default": false }, + "appInsightsResourceName": { "$ref": "#/definitions/appInsightsResourceName" }, + "region": { "$ref": "#/definitions/region" } + }, + "allOf": [ + { + "dependencies": { + "instrumentationKey": { + "allOf": [ + { + "anyOf": [ + { "not": { "required": [ "useManagedIdentity" ] } }, + { "properties": { "useManagedIdentity": { "const": false } } } + ] + }, + { + "not": { "required": ["appInsightsResourceName"] } + } + ] + } + } + }, + { + "if": { "not": { "required" : [ "useManagedIdentity"] } }, + "then": { "required": ["instrumentationKey"] }, + "else": { + "if": { "properties": { "useManagedIdentity": { "const": true } } }, + "then": { "not": { "required": ["instrumentationKey"] } }, + "else": { + "allOf": [ + { "required": [ "instrumentationKey" ]}, + { "not": { "required": [ "appInsightsResourceName" ] } } + ] + } + } + }, + { + "if": { "required": [ "appInsightsResourceName" ] }, + "then": { "properties": { "appInsightsResourceName": { "minLength": 1 } }} + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "AWS_CloudWatch" } } }, + "then": { + "required": [ + "region", + "dataType" + ], + "properties": { + "region": { "$ref": "#/definitions/region" }, + "dataType": { "$ref": "#/definitions/dataType", "default": "logs" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "endpointUrl": { "$ref": "#/definitions/endpointUrl" } + }, + "allOf": [ + { "not": { "required": ["username"], "not": { "required": ["passphrase"] }}}, + { "not": { "required": ["passphrase"], "not": { "required": ["username"] }}}, + { + "if": { "properties": { "dataType": { "enum": ["logs", null] } } }, + "then": { + "properties": { + "maxAwsLogBatchSize": { "$ref": "#/definitions/maxAwsLogBatchSize", "default": 100 } + }, + "required": ["maxAwsLogBatchSize"] + } + }, + { "oneOf": + [ + { + "allOf": [ + { + "properties": { + "logGroup": { "$ref": "#/definitions/logGroup" }, + "logStream": { "$ref": "#/definitions/logStream" }, + "dataType": { + "allOf": + [ + { "$ref": "#/definitions/dataType"}, + { "enum": ["logs", null] } + ] + } + } + }, + { "required":[ "logGroup", "logStream" ] }, + { "not": { "required": ["metricNamespace"] }} + ] + }, + { + "allOf": [ + { + "properties": { + "metricNamespace": { "$ref": "#/definitions/metricNamespace" }, + "dataType": { + "allOf": [ + { "$ref": "#/definitions/dataType"}, + { "enum": ["metrics"] } + ] + } + } + }, + { "required":[ "metricNamespace" ] }, + { "not": { "required":[ "maxAwsLogBatchSize" ] }}, + { "not": { "required":[ "logStream" ] }}, + { "not": { "required":[ "logGroup" ] }} + ] + } + ] + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "AWS_S3" } } }, + "then": { + "required": [ + "region", + "bucket" + ], + "properties": { + "region": { "$ref": "#/definitions/region" }, + "bucket": { "$ref": "#/definitions/bucket" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "endpointUrl": { "$ref": "#/definitions/endpointUrl" } + }, + "dependencies": { + "passphrase": [ "username" ], + "username":[ "passphrase" ] + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Graphite" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/events/" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Kafka" } } }, + "then": { + "required": [ + "host", + "topic" + ], + "properties": { + "authenticationProtocol": { "$ref": "#/definitions/authenticationProtocol", "default": "None" }, + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "binaryTcpTls" }, + "port": { "$ref": "#/definitions/port", "default": 9092 }, + "topic": { "$ref": "#/definitions/topic" } + }, + "allOf": [ + { + "if": { "properties": { "authenticationProtocol": { "const": "SASL-PLAIN" } } }, + "then": { + "required": [ + "username" + ], + "properties": { + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" } + }, + "dependencies": { + "passphrase": [ "username" ] + } + }, + "else": {} + }, + { + "if": { "properties": { "authenticationProtocol": { "const": "TLS" } } }, + "then": { + "required": [ + "privateKey", + "clientCertificate" + ], + "allOf": [ + { "not": { "required": [ "username" ] } }, + { "not": { "required": [ "passphrase" ] } } + ], + "properties": { + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" }, + "protocol": { "const": "binaryTcpTls" } + } + }, + "else": {} + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "ElasticSearch" } } }, + "then": { + "required": [ + "host", + "index" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 9200 }, + "path": { "$ref": "#/definitions/path" }, + "username": { "$ref": "#/definitions/username" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" }, + "apiVersion": { "$ref": "#/definitions/apiVersion", "default": "6.0" }, + "index": { "$ref": "#/definitions/index" } + }, + "allOf": [ + { + "if": { "properties": { "apiVersion": { "pattern": "^[0-6][.]|^[0-6]$" } } }, + "then": { + "properties": { + "dataType": { + "$ref": "#/definitions/dataType", + "default": "f5.telemetry", + "minLength": 1 + } + } + }, + "else": { + "if": { "properties": { "apiVersion": { "pattern": "^7[.]|^7$" } } }, + "then": { + "properties": { + "dataType": { + "$ref": "#/definitions/dataType", + "default": "_doc", + "minLength": 1 + } + } + }, + "else": { + "allOf": [ + { "not": { "required": [ "dataType" ] } } + ] + } + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Sumo_Logic" } } }, + "then": { + "required": [ + "host", + "passphrase" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { "$ref": "#/definitions/protocols", "default": "https" }, + "port": { "$ref": "#/definitions/port", "default": 443 }, + "path": { "$ref": "#/definitions/path", "default": "/receiver/v1/http/" }, + "passphrase": { "$ref": "base_schema.json#/definitions/secret" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Statsd" } } }, + "then": { + "required": [ + "host" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "protocol": { + "title": "Protocol", + "type": "string", + "enum": [ "tcp", "udp" ], + "default": "udp" + }, + "port": { "$ref": "#/definitions/port", "default": 8125 }, + "addTags": { "$ref": "#/definitions/autoTaggingStatsd" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" } + } + }, + "else": {} + }, + { + "if": { + "properties": { "type": { "enum": ["Google_Cloud_Monitoring", "Google_StackDriver", "Google_Cloud_Logging"] } } + }, + "then": { + "required": [ + "serviceEmail" + ], + "properties": { + "privateKeyId": { "$ref": "#/definitions/privateKeyId" }, + "serviceEmail": { "$ref": "#/definitions/serviceEmail" }, + "privateKey": { "$ref": "base_schema.json#/definitions/secret" }, + "useServiceAccountToken": { "$ref": "#/definitions/useServiceAccountToken", "default": false }, + "reportInstanceMetadata": { "$ref": "#/definitions/reportInstanceMetadata", "default": false } + }, + "allOf": [ + { + "dependencies": { + "privateKeyId": { + "anyOf": [ + { "not": {"required": [ "useServiceAccountToken" ] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + } + } + }, + { + "dependencies": { + "privateKey": { + "anyOf": [ + { "not": {"required": [ "useServiceAccountToken" ] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + } + } + }, + { + "if": { + "anyOf": [ + { "not": { "required" : [ "useServiceAccountToken"] } }, + { "properties": { "useServiceAccountToken": { "const": false } } } + ] + }, + "then": { "required": ["privateKeyId", "privateKey"] }, + "else": { "not": { "required": ["privateKeyId", "privateKey"] } } + }, + { + "if": { "properties": { "type": { "enum": ["Google_Cloud_Monitoring", "Google_StackDriver"] } } }, + "then": { + "properties": { + "projectId": { "$ref": "#/definitions/projectId"} + }, + "required": ["projectId"] + } + }, + { + "if": { "properties": { "type": { "const": "Google_Cloud_Logging" } } }, + "then": { + "properties": { + "logScope": { "$ref": "#/definitions/logScope", "default": "projects" }, + "logScopeId": { "$ref": "#/definitions/logScopeId"}, + "logId": { "$ref": "#/definitions/logId"} + }, + "required": ["logScope", "logScopeId", "logId"] + } + } + ] + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "F5_Cloud" } } }, + "then": { + "required": [ + "f5csTenantId", + "f5csSensorId", + "payloadSchemaNid", + "serviceAccount", + "targetAudience" + ], + "properties": { + "port": { "$ref": "#/definitions/port", "default": 443 }, + "eventSchemaVersion": { "$ref": "#/definitions/eventSchemaVersion" }, + "f5csTenantId": { "$ref": "#/definitions/f5csTenantId" }, + "f5csSensorId": { "$ref": "#/definitions/f5csSensorId" }, + "payloadSchemaNid": { "$ref": "#/definitions/payloadSchemaNid" }, + "serviceAccount": { "$ref": "#/definitions/serviceAccount" }, + "targetAudience": { "$ref": "#/definitions/targetAudience" }, + "useSSL": { "$ref": "#/definitions/useSSL", "default": true } + }, + "nodeSupportVersion": "8.11.1" + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "DataDog" } } }, + "then": { + "required": [ + "apiKey" + ], + "properties": { + "apiKey": { "$ref": "#/definitions/apiKey" }, + "compressionType": { "$ref": "#/definitions/compressionType", "default": "none" }, + "region": { "$ref": "#/definitions/region", "enum": ["US1", "US3", "EU1", "US1-FED"], "default": "US1" }, + "service": { "$ref": "#/definitions/service", "default": "f5-telemetry" }, + "metricPrefix": { "$ref": "#/definitions/metricPrefix" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, + "customTags": { "$ref": "#/definitions/customTags" }, + "customOpts": { + "allOf": [ + { "$ref": "#/definitions/customOpts" }, + { "$ref": "#/definitions/customHttpOpts" } + ] + }, + "proxy": { "$ref": "base_schema.json#/definitions/proxy" } + } + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "OpenTelemetry_Exporter" } } }, + "then": { + "required": [ + "host", + "port" + ], + "properties": { + "host": { "$ref": "#/definitions/host" }, + "port": { "$ref": "#/definitions/port" }, + "headers": { "$ref": "#/definitions/headers" }, + "metricsPath": { "$ref": "#/definitions/path" }, + "convertBooleansToMetrics": { "$ref": "#/definitions/convertBooleansToMetrics", "default": "false" }, + "exporter": { "$ref": "#/definitions/otelExporter", "default": "protobuf" }, + "privateKey": { "$ref": "#/definitions/privateKey" }, + "clientCertificate": { "$ref": "#/definitions/clientCertificate" }, + "rootCertificate": { "$ref": "#/definitions/rootCertificate" } + }, + "dependencies": { + "clientCertificate": ["privateKey"], + "privateKey": ["clientCertificate"] + }, + "nodeSupportVersion": "8.11.1", + "allOf": [ + { + "if": { "properties": { "exporter": { "const": "grpc" } } } , + "then": { + "properties": { + "useSSL": { "$ref": "#/definitions/useSSL", "default": true } + }, + "allOf": [ + { + "if": { "properties": { "useSSL": { "const": false } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + }, + { + "allOf": [ + { "not": { "required": ["metricsPath"] } }, + { "not": { "required": ["protocol"] } } + ] + } + ] + }, + "else": { + "properties": { + "protocol": { "$ref": "#/definitions/protocols", "default": "http", "enum": ["http", "https"] } + }, + "allOf": [ + { "not": { "required": ["useSSL"] } }, + { + "if": { "properties": { "protocol": { "const": "http" } } }, + "then": { + "allOf": [ + { "not": { "required": ["privateKey"] } }, + { "not": { "required": ["clientCertificate"] } }, + { "not": { "required": ["rootCertificate"] } } + ] + } + } + ] + } + } + ] + }, + "else": {} + } + ] + }, + "else": {} + } + ] +} diff --git a/src/schema/1.32.0/controls_schema.json b/src/schema/1.32.0/controls_schema.json new file mode 100644 index 00000000..2bbfcff8 --- /dev/null +++ b/src/schema/1.32.0/controls_schema.json @@ -0,0 +1,52 @@ +{ + "$id": "controls_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Controls schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Controls" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Controls class", + "type": "string", + "enum": [ "Controls" ] + }, + "logLevel": { + "title": "Logging Level", + "description": "", + "type": "string", + "default": "info", + "enum": [ + "debug", + "info", + "error" + ] + }, + "debug": { + "title": "Enable debug mode", + "description": "", + "type": "boolean", + "default": false + }, + "memoryThresholdPercent": { + "title": "Memory Usage Threshold (Percentage of Available Process Memory)", + "description": "Once memory usage reaches this value, processing may temporarily cease until levels return below threshold. Defaults to 90%", + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 90 + } + }, + "additionalProperties": false + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/endpoints_schema.json b/src/schema/1.32.0/endpoints_schema.json new file mode 100644 index 00000000..1e12b4b3 --- /dev/null +++ b/src/schema/1.32.0/endpoints_schema.json @@ -0,0 +1,190 @@ +{ + "$id": "endpoints_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Endpoints schema", + "description": "", + "type": "object", + "definitions": { + "endpoint": { + "title": "Telemetry Endpoint", + "description": "", + "type": "object", + "properties": { + "enable": { + "title": "Enable endpoint", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "name": { + "title": "Endpoint name", + "type": "string", + "minLength": 1 + }, + "numericalEnums": { + "title": "SNMP Options: print enums numerically", + "type": "boolean" + }, + "path": { + "title": "Path to query data from", + "type": "string", + "minLength": 1 + }, + "protocol": { + "title": "Endpoint protocol used to fetch data", + "type": "string", + "enum": ["http", "snmp"], + "default": "http" + } + }, + "allOf": [ + { + "if": { "properties": { "protocol": { "const": "snmp" } } }, + "then": { + "properties": { + "numericalEnums": { + "default": false + }, + "path": { + "pattern": "^[a-zA-Z0-9.]+$" + } + } + }, + "else": { + "not": { + "required": ["numericalEnums"] + } + } + } + ], + "additionalProperties": false + }, + "endpoints": { + "title": "Telemetry Endpoints", + "description": "", + "type": "object", + "properties": { + "enable": { + "title": "Enable endpoints", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "basePath": { + "title": "Base Path", + "description": "Optional base path value to prepend to each individual endpoint paths", + "type": "string", + "default": "" + }, + "items": { + "title": "Items", + "description": "Object with each property an endpoint with their own properties", + "type": "object", + "additionalProperties": { + "allOf": [ + { + "$ref": "#/definitions/endpoint" + }, + { + "required": [ "path"] + } + ] + }, + "minProperties": 1 + } + } + }, + "endpointsObjectRef": { + "allOf": [ + { + "$ref": "#/definitions/endpoints" + }, + { + "properties": { + "enable": {}, + "basePath": {}, + "items": {} + }, + "required": [ "items" ], + "additionalProperties": false + } + ] + }, + "endpointObjectRef": { + "allOf": [ + { + "$ref": "#/definitions/endpoint" + }, + { + "properties": { + "enable": {}, + "name": {}, + "numericalEnums": {}, + "path": {}, + "protocol": {} + }, + "required": [ "name", "path" ], + "additionalProperties": false + } + ] + }, + "endpointsPointerRef": { + "title": "Telemetry_Endpoints Name", + "description": "Name of the Telemetry_Endpoints object", + "type": "string", + "declarationClass": "Telemetry_Endpoints", + "minLength": 1 + }, + "endpointsItemPointerRef": { + "title": "Telemetry_Endpoints Name and Item Key", + "description": "Name of the Telemetry_Endpoints object and the endpoint item key, e.g endpointsA/item1", + "type": "string", + "declarationClassProp": { + "path" :"Telemetry_Endpoints/items", + "partsNum": 2 + }, + "minLength": 1 + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Endpoints" } } }, + "then": { + "required": [ + "class", + "items" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Endpoints class", + "type": "string", + "enum": [ "Telemetry_Endpoints" ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "basePath": {}, + "items": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/endpoints" + } + ] + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/ihealth_poller_schema.json b/src/schema/1.32.0/ihealth_poller_schema.json new file mode 100644 index 00000000..d5bcb9cf --- /dev/null +++ b/src/schema/1.32.0/ihealth_poller_schema.json @@ -0,0 +1,238 @@ +{ + "$id": "ihealth_poller_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming iHealth Poller schema", + "description": "", + "type": "object", + "definitions": { + "time24hr": { + "title": "Time in HH:MM, 24hr", + "description": "", + "type": "string", + "pattern": "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]?$" + }, + "iHealthPoller": { + "$comment": "system_schema.json should be updated when new property added", + "title": "iHealth Poller", + "description": "", + "type": "object", + "required": [ + "interval", + "username", + "passphrase" + ], + "properties": { + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "proxy": { + "title": "Proxy configuration", + "properties": { + "port": { + "default": 80 + }, + "protocol": { + "default": "http" + } + }, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/proxy" + } + ] + }, + "username": { + "title": "iHealth Username", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "title": "iHealth Passphrase", + "$ref": "base_schema.json#/definitions/secret" + }, + "downloadFolder": { + "title": "Directory to download Qkview to", + "description": "", + "type": "string", + "minLength": 1, + "pathExists": true + }, + "interval": { + "title": "Operating interval", + "description": "" , + "type": "object", + "properties": { + "timeWindow": { + "title": "Two or more hours window in 24hr format that iHealth data can be sent", + "description": "", + "type": "object", + "properties": { + "start": { + "title": "Time when the window starts", + "$ref": "#/definitions/time24hr" + }, + "end": { + "title": "Time when the window ends", + "$ref": "#/definitions/time24hr" + } + }, + "timeWindowMinSize": 120, + "required": [ "start", "end" ], + "additionalProperties": false + }, + "frequency": { + "title": "Interval frequency", + "description": "", + "type": "string", + "default": "daily", + "enum": [ + "daily", + "weekly", + "monthly" + ] + } + + }, + "required": [ + "timeWindow" + ], + "allOf": [ + { + "if": { "properties": { "frequency": { "const": "daily" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {} + }, + "additionalProperties": false + } + }, + { + "if": { "properties": { "frequency": { "const": "weekly" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {}, + "day": { + "title": "", + "description": "", + "oneOf": [ + { + "type": "string", + "pattern": "^([mM]onday|[tT]uesday|[wW]ednesday|[tT]hursday|[fF]riday|[sS]aturday|[sS]unday)$" + }, + { + "$comment": "0 and 7 eq. Sunday", + "type": "integer", + "minimum": 0, + "maximum": 7 + } + ] + } + }, + "required": [ "day" ], + "additionalProperties": false + } + }, + { + "if": { "properties": { "frequency": { "const": "monthly" } } }, + "then": { + "properties": { + "timeWindow": {}, + "frequency": {}, + "day": { + "title": "", + "description": "", + "type": "integer", + "minimum": 1, + "maximum": 31 + } + }, + "required": [ "day" ], + "additionalProperties": false + } + } + ] + } + } + }, + "iHealthPollerPointerRef": { + "type": "string", + "minLength": 1, + "declarationClass": "Telemetry_iHealth_Poller" + }, + "iHealthPollerObjectRef": { + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "enable": {}, + "trace": {}, + "interval": {}, + "proxy": {}, + "username": {}, + "passphrase": {}, + "downloadFolder": {} + }, + "additionalProperties": false + }, + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPoller" + } + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_iHealth_Poller" } } }, + "then": { + "required": [ + "class", + "username", + "passphrase" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming iHealth Poller class", + "type": "string", + "enum": [ "Telemetry_iHealth_Poller" ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "interval": {}, + "proxy": {}, + "username": {}, + "passphrase": {}, + "downloadFolder": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/iHealthPoller" + } + ] + }, + "else": {}, + "$comment": "Telemetry_iHealth_Poller should be either built-in within Telemetry_System or referenced by Telemetry_System(s), otherwise it will be treated as disabled" + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/listener_schema.json b/src/schema/1.32.0/listener_schema.json new file mode 100644 index 00000000..d3b9434e --- /dev/null +++ b/src/schema/1.32.0/listener_schema.json @@ -0,0 +1,85 @@ +{ + "$id": "listener_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming event listener schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Listener" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Event Listener class", + "type": "string", + "enum": [ "Telemetry_Listener" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "oneOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + }, + { + "$ref": "base_schema.json#/definitions/traceV2" + } + ] + }, + "port": { + "minimum": 1024, + "maximum": 65535, + "default": 6514, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "tag": { + "$comment": "Deprecated! Use actions with a setTag action.", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/tag" + } + ] + }, + "match": { + "default": "", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/match" + } + ] + }, + "actions": { + "title": "Actions", + "description": "Actions to be performed on the listener.", + "default": [ + { + "setTag": { + "tenant": "`T`", + "application": "`A`" + } + } + ], + "allOf": [{ "$ref": "actions_schema.json#/definitions/inputDataStreamActionsChain" }] + } + }, + "additionalProperties": false + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/namespace_schema.json b/src/schema/1.32.0/namespace_schema.json new file mode 100644 index 00000000..f6cb09fc --- /dev/null +++ b/src/schema/1.32.0/namespace_schema.json @@ -0,0 +1,92 @@ +{ + "$id": "namespace_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Namespace schema", + "description": "", + "type": "object", + "definitions": { + "namespace": { + "required": [ + "class" + ], + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Namespace class", + "type": "string", + "enum": [ "Telemetry_Namespace" ] + } + }, + "additionalProperties": { + "$comment": "All objects supported under a Telemetry Namespace", + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Telemetry_System", + "Telemetry_System_Poller", + "Telemetry_Listener", + "Telemetry_Consumer", + "Telemetry_Pull_Consumer", + "Telemetry_iHealth_Poller", + "Telemetry_Endpoints", + "Shared" + ] + } + }, + "allOf": [ + { + "$ref": "system_schema.json#" + }, + { + "$ref": "system_poller_schema.json#" + }, + { + "$ref": "listener_schema.json#" + }, + { + "$ref": "consumer_schema.json#" + }, + { + "$ref": "pull_consumer_schema.json#" + }, + { + "$ref": "ihealth_poller_schema.json#" + }, + { + "$ref": "endpoints_schema.json#" + }, + { + "$ref": "shared_schema.json#" + } + ] + } + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Namespace" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Namespace class", + "type": "string", + "enum": [ "Telemetry_Namespace" ] + } + }, + "allOf": [ + { + "$ref": "#/definitions/namespace" + } + ] + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/pull_consumer_schema.json b/src/schema/1.32.0/pull_consumer_schema.json new file mode 100644 index 00000000..0747cbfd --- /dev/null +++ b/src/schema/1.32.0/pull_consumer_schema.json @@ -0,0 +1,101 @@ +{ + "$id": "pull_consumer_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming Pull Consumer schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_Pull_Consumer" } } }, + "then": { + "required": [ + "class", + "type", + "systemPoller" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming Pull Consumer class", + "type": "string", + "enum": [ "Telemetry_Pull_Consumer" ] + }, + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/trace" + } + ] + }, + "type": { + "title": "Type", + "description": "" , + "type": "string", + "enum": [ + "default", + "Prometheus" + ] + }, + "systemPoller": { + "title": "Pointer to System Poller(s)", + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + } + ] + }, + "minItems": 1 + } + ] + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "type": {}, + "systemPoller": {} + }, + "additionalProperties": false + }, + { + "if": { "properties": { "type": { "const": "default" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + }, + { + "if": { "properties": { "type": { "const": "Prometheus" } } }, + "then": { + "required": [], + "properties": {} + }, + "else": {} + } + ] + }, + "else": {} + } + ] +} diff --git a/src/schema/1.32.0/shared_schema.json b/src/schema/1.32.0/shared_schema.json new file mode 100644 index 00000000..aa96cb2e --- /dev/null +++ b/src/schema/1.32.0/shared_schema.json @@ -0,0 +1,50 @@ +{ + "$id": "shared_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry streaming Shared schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Shared" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry streaming Shared class", + "type": "string", + "enum": [ "Shared" ] + } + }, + "additionalProperties": { + "properties": { + "class": { + "title": "Class", + "type": "string", + "enum": [ + "Constants", + "Secret" + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Constants" } } }, + "then": { "$ref": "base_schema.json#/definitions/constants" }, + "else": {} + }, + { + "if": { "properties": { "class": { "const": "Secret" } } }, + "then": { "$ref": "base_schema.json#/definitions/secret" }, + "else": {} + } + ] + } + }, + "else": {} + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/system_poller_schema.json b/src/schema/1.32.0/system_poller_schema.json new file mode 100644 index 00000000..dcb3a454 --- /dev/null +++ b/src/schema/1.32.0/system_poller_schema.json @@ -0,0 +1,242 @@ +{ + "$id": "system_poller_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming system poller schema", + "description": "", + "type": "object", + "definitions": { + "systemPoller": { + "$comment": "system_schema.json should be updated when new property added", + "title": "System Poller", + "description": "", + "type": "object", + "properties": { + "enable": { + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "interval": { + "title": "Collection interval (in seconds)", + "description": "If endpointList is specified, minimum=1. Without endpointList, minimum=60 and maximum=60000. Allows setting interval=0 to not poll on an interval.", + "type": "integer", + "default": 300 + }, + "trace": { + "$ref": "base_schema.json#/definitions/trace" + }, + "tag": { + "$comment": "Deprecated! Use actions with a setTag action.", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/tag" + } + ] + }, + "actions": { + "title": "Actions", + "description": "Actions to be performed on the systemPoller.", + "default": [ + { + "setTag": { + "tenant": "`T`", + "application": "`A`" + } + } + ], + "allOf": [{ "$ref": "actions_schema.json#/definitions/inputDataStreamActionsChain" }] + }, + "endpointList": { + "title": "Endpoint List", + "description": "List of endpoints to use in data collection", + "oneOf": [ + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "endpoints_schema.json#/definitions/endpointsPointerRef" + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsItemPointerRef" + }, + { + "if": { "required": [ "items" ]}, + "then": { + "$ref": "endpoints_schema.json#/definitions/endpointsObjectRef" + }, + "else": { + "$ref": "endpoints_schema.json#/definitions/endpointObjectRef" + } + } + + ] + }, + "minItems": 1 + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsPointerRef" + }, + { + "$ref": "endpoints_schema.json#/definitions/endpointsObjectRef" + } + ] + } + }, + "oneOf": [ + { + "allOf": [ + { + "if": { "required": [ "endpointList" ] }, + "then": { + "properties": { + "interval": { + "minimum": 1 + } + } + }, + "else": { + "properties":{ + "interval": { + "minimum": 60, + "maximum": 6000 + } + } + } + } + ] + }, + { + "allOf": [ + { + "properties": { + "interval": { + "enum": [0] + } + } + } + ] + } + ] + }, + "systemPollerPointerRef": { + "type": "string", + "minLength": 1, + "declarationClass": "Telemetry_System_Poller" + }, + "systemPollerObjectRef": { + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "enable": {}, + "trace": {}, + "interval": {}, + "tag": {}, + "actions": {}, + "endpointList": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/systemPoller" + } + ] + } + }, + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_System_Poller" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming System Poller class", + "type": "string", + "enum": [ "Telemetry_System_Poller" ] + }, + "host": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": "localhost", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/host" + } + ] + }, + "port": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": 8100, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "protocol": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "default": "http", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/protocol" + } + ] + }, + "allowSelfSignedCert": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "title": "Allow Self-Signed Certificate", + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + }, + "enableHostConnectivityCheck": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "username": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "$comment": "Deprecated! Use Telemetry_System to define target device", + "$ref": "base_schema.json#/definitions/secret" + } + }, + "allOf": [ + { + "$comment": "This allows enforcement of no additional properties in this nested schema - could reuse above properties but prefer a separate block", + "properties": { + "class": {}, + "enable": {}, + "trace": {}, + "interval": {}, + "tag": {}, + "host": {}, + "port": {}, + "protocol": {}, + "allowSelfSignedCert": {}, + "enableHostConnectivityCheck": {}, + "username": {}, + "passphrase": {}, + "actions": {}, + "endpointList": {} + }, + "additionalProperties": false + }, + { + "$ref": "#/definitions/systemPoller" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/src/schema/1.32.0/system_schema.json b/src/schema/1.32.0/system_schema.json new file mode 100644 index 00000000..cba58faa --- /dev/null +++ b/src/schema/1.32.0/system_schema.json @@ -0,0 +1,121 @@ +{ + "$id": "system_schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Telemetry Streaming System schema", + "description": "", + "type": "object", + "allOf": [ + { + "if": { "properties": { "class": { "const": "Telemetry_System" } } }, + "then": { + "required": [ + "class" + ], + "properties": { + "class": { + "title": "Class", + "description": "Telemetry Streaming System class", + "type": "string", + "enum": [ "Telemetry_System" ] + }, + "enable": { + "title": "Enable all pollers attached to device", + "default": true, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/enable" + } + ] + }, + "trace": { + "$ref": "base_schema.json#/definitions/trace" + }, + "host": { + "title": "System connection address", + "default": "localhost", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/host" + } + ] + }, + "port": { + "title": "System connection port", + "default": 8100, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/port" + } + ] + }, + "protocol": { + "title": "System connection protocol", + "default": "http", + "allOf": [ + { + "$ref": "base_schema.json#/definitions/protocol" + } + ] + }, + "allowSelfSignedCert": { + "title": "Allow Self-Signed Certificate", + "default": false, + "allOf": [ + { + "$ref": "base_schema.json#/definitions/allowSelfSignedCert" + } + ] + }, + "enableHostConnectivityCheck": { + "$ref": "base_schema.json#/definitions/enableHostConnectivityCheck" + }, + "username": { + "title": "System Username", + "$ref": "base_schema.json#/definitions/username" + }, + "passphrase": { + "title": "System Passphrase", + "$ref": "base_schema.json#/definitions/secret" + }, + "systemPoller": { + "title": "System Poller declaration", + "oneOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + }, + { + "$ref": "system_poller_schema.json#/definitions/systemPollerObjectRef" + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "system_poller_schema.json#/definitions/systemPollerObjectRef" + }, + { + "$ref": "system_poller_schema.json#/definitions/systemPollerPointerRef" + } + ] + }, + "minItems": 1 + } + ] + }, + "iHealthPoller": { + "title": "iHealth Poller declaration", + "oneOf": [ + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPollerPointerRef" + }, + { + "$ref": "ihealth_poller_schema.json#/definitions/iHealthPollerObjectRef" + } + ] + } + }, + "additionalProperties": false + } + } + ] +} \ No newline at end of file diff --git a/src/schema/latest/base_schema.json b/src/schema/latest/base_schema.json index 6602711b..c56e85ac 100644 --- a/src/schema/latest/base_schema.json +++ b/src/schema/latest/base_schema.json @@ -242,8 +242,8 @@ "description": "Version of ADC Declaration schema this declaration uses", "type": "string", "$comment": "IMPORTANT: In enum array, please put current schema version first, oldest-supported version last. Keep enum array sorted most-recent-first.", - "enum": [ "1.31.0", "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], - "default": "1.31.0" + "enum": [ "1.32.0", "1.31.0", "1.30.0", "1.29.0", "1.28.0", "1.27.1", "1.27.0", "1.26.0", "1.25.0", "1.24.0", "1.23.0", "1.22.0", "1.21.0", "1.20.1", "1.20.0", "1.19.0", "1.18.0", "1.17.0", "1.16.0", "1.15.0", "1.14.0", "1.13.0", "1.12.0", "1.11.0", "1.10.0", "1.9.0", "1.8.0", "1.7.0", "1.6.0", "1.5.0", "1.4.0", "1.3.0", "1.2.0", "1.1.0", "1.0.0", "0.9.0" ], + "default": "1.32.0" }, "$schema": { "title": "Schema", diff --git a/test/unit/consumers/dataDogConsumerTests.js b/test/unit/consumers/dataDogConsumerTests.js index a84ef306..36f56656 100644 --- a/test/unit/consumers/dataDogConsumerTests.js +++ b/test/unit/consumers/dataDogConsumerTests.js @@ -388,6 +388,54 @@ describe('DataDog', () => { }); }); + it('should verify that AVR with metric sends data to the metrics endpoint', () => { + // there is another test with the same input that checks the logs endpoint + const context = testUtil.buildConsumerContext({ + eventType: 'AVR', + config: addGzipConfigIfNeed(defaultConsumerConfig, compressionType) + }); + context.config.region = region; + context.event.data = { + someMetric: 777 + }; + const reqConfig = getRequestConfig(DATA_DOG_TYPES.METRICS, region); + + setupDataDogMockEndpoint(addGzipReqHeadersIfNeed(reqConfig, compressionType, 'deflate')); + return dataDogIndex(context) + .then(() => { + const timeSeries = dataDogRequestData[0].request.series; + assert.strictEqual(timeSeries[0].metric, 'someMetric'); + assert.strictEqual(timeSeries[0].points[0].value, 777); + assert.lengthOf(dataDogRequestData, 1, 'should log 1 request'); + assert.isNotEmpty(timeSeries, 'should have some metric data'); + checkGzipReqHeadersIfNeeded(dataDogRequestData[0], compressionType, 'deflate'); + }); + }); + + it('should verify that AVR with metric sends data to the logs endpoint', () => { + // there is another test with the same input that checks the metrics endpoint + const context = testUtil.buildConsumerContext({ + eventType: 'AVR', + config: addGzipConfigIfNeed(defaultConsumerConfig, compressionType) + }); + context.config.region = region; + context.event.data = { + someMetric: 777 + }; + const reqConfig = getRequestConfig(DATA_DOG_TYPES.LOGS, region); + + setupDataDogMockEndpoint(addGzipReqHeadersIfNeed(reqConfig, compressionType, 'gzip')); + return dataDogIndex(context) + .then(() => { + assert.lengthOf(dataDogRequestData, 1, 'should log 1 request'); + assert.deepStrictEqual(dataDogRequestData[0].request.message, '{"someMetric":777}', 'should get the message'); + assert.deepStrictEqual(dataDogRequestData[0].request.ddsource, 'AVR', 'should set source type to AVR'); + assert.deepStrictEqual(dataDogRequestData[0].request.service, 'f5-telemetry', 'should set service to default'); + assert.strictEqual(dataDogRequestData[0].request.ddtags, 'telemetryEventCategory:AVR', 'should set tags from event data'); + checkGzipReqHeadersIfNeeded(dataDogRequestData[0], compressionType, 'gzip'); + }); + }); + it('should process event listener event without metrics (LTM)', () => { const context = testUtil.buildConsumerContext({ config: addGzipConfigIfNeed(defaultConsumerConfig, compressionType) @@ -541,7 +589,7 @@ describe('DataDog', () => { }); }); - it('should trace data', () => { + it('should trace data to logs', () => { const context = testUtil.buildConsumerContext({ config: defaultConsumerConfig }); @@ -555,6 +603,30 @@ describe('DataDog', () => { .then(() => { const traceData = context.tracer.write.firstCall.args[0]; assert.deepStrictEqual(JSON.parse(traceData.data[0]).ddsource, 'syslog'); + assert.deepStrictEqual(JSON.parse(traceData.data[0]).message, 'plain data'); + }); + }); + + it('should trace data to metrics and logs', () => { + const context = testUtil.buildConsumerContext({ + config: defaultConsumerConfig + }); + context.event.type = 'systemInfo'; + context.event.data = { + system: { + cpu: 5 + } + }; + return dataDogIndex(context) + .then(() => { + // tracing for metrics + const traceData = context.tracer.write.firstCall.args[0]; + assert.strictEqual(JSON.parse(traceData.data[0]).series[0].metric, 'cpu'); + assert.strictEqual(JSON.parse(traceData.data[0]).series[0].points[0].value, 5); + + // tracing for logs + const traceDataLogs = context.tracer.write.secondCall.args[0]; + assert.strictEqual(JSON.parse(JSON.parse(traceDataLogs.data[0]).message).system.cpu, 5); }); }); @@ -597,6 +669,28 @@ describe('DataDog', () => { ); }); }); + + it('confirm that logs endpoint is also called when the metrics endpoint is primary)', () => { + /* systemInfo goes to metrics endpoints, but also is duplicated to the log endpoint. + gzip is exclusively associated with the log endpoint. + By catching gzip error wee verify that the data was duplicated to the log endpoint. */ + const context = testUtil.buildConsumerContext({ + eventType: 'systemInfo', + config: addGzipConfigIfNeed(defaultConsumerConfig, 'gzip') + }); + sinon.stub(zlib, 'gzip').onFirstCall().callsFake((data, cb) => { + cb(new Error('zlib.gzip expected error')); + }); + + return dataDogIndex(context) + .then(() => { + assert.match( + context.logger.error.firstCall.args[0], + /zlib.gzip expected error/, + 'should log error message' + ); + }); + }); }); describe('proxy options', () => { diff --git a/versions.json b/versions.json index 49ce5361..ca25f8e1 100644 --- a/versions.json +++ b/versions.json @@ -1,7 +1,7 @@ { "versionMetaTimestamp": 1540928503, "latestVersion": { - "name": "1.31 (non-LTS)", + "name": "1.32 (non-LTS)", "url": "/products/extensions/f5-telemetry-streaming/latest/" }, "otherVersions": [