---
title: "Cisco eStreamer collector"
canonical: "https://docs.devo.com/space/latest/94655746/Cisco%20eStreamer%20collector"
format: markdown
---
> Macro (toc)

> ❌ The eStreamer collector is deprecated.  There is no schedule for removal of the collector.

## <span style="color: #172b4d">Service description</span>

The [Cisco Event Streamer](https://www.cisco.com/c/en/us/td/docs/security/firepower/660/api/eStreamer/EventStreamerIntegrationGuide_660.pdf) (also known as Cisco eStreamer) allows you to stream Firepower System events to external client applications. You can stream host, discovery, correlation, compliance allow list, intrusion, user activity, file, malware, and connection data from a Management Center and you can stream intrusion data from 7000 and 8000 series devices.

## <span style="color: #172b4d">Data source description</span>

Currently, the Cisco eStreamer collector generates host, discovery, correlation, compliance allow list, intrusion, user activity, file, malware, and connection events. The collector processes the eStreamer responses and sends them to the Devo platform, which will categorize all the information received on the following tables:

| **Group name** | **Details** | **Data tables** |
| --- | --- | --- |
| Metadata | <span style="color: #58585b">Context information for codes and numeric identifiers in the event records</span> | `firewall.cisco.fmc_estreamer.metadata` |
| Packet | <span style="color: #58585b">Packets associated with intrusion events</span> | `firewall.cisco.fmc_estreamer.packet` |
| Intrusion | <span style="color: #58585b">Intrusion events generated by managed devices</span> | `firewall.cisco.fmc_estreamer.intrusion` |
| File malware | Malware events | `firewall.cisco.fmc_estreamer.file_malware` |
| Correlation | <span style="color: #58585b">Correlation and allow list events</span> | `firewall.cisco.fmc_estreamer.correlation` |
| Connection | Connection events | `firewall.cisco.fmc_estreamer.connection` |
| RNA | Realtime Network Awareness events | `firewall.cisco.fmc_estreamer.rna` |
| RUA | <span style="color: #555555">Realtime User Awareness events</span> | `firewall.cisco.fmc_estreamer.rua` |
| Event | <span style="color: #58585b">Additional data for intrusion events</span> | `firewall.cisco.fmc_estreamer.event` |

> ℹ️ <span style="color: #172b4d">For more info about the Cisco eStreamer, visit the </span><span style="color: #172b4d">[Firepower System Event Streamer Integration Guide](https://www.cisco.com/c/en/us/td/docs/security/firepower/670/api/eStreamer/EventStreamerIntegrationGuide/Intro.html)</span><span style="color: #172b4d">.</span>

## Setup

The Cisco eStreamer data collector works over the Cisco FMC (Firepower Management Center) devices. To start receiving data from the eStreamer protocol, you need to set up the eStreamer service in the FMC.

### Setting up eStreamer

1. Access the FMC web console.
2. Go to **System → Integration → eStreamer**
3. Check the events that you want to receive and save the changes.
4. Create a new client and save the certificate (and password) to use later in the collector. Using a password is mandatory. The IP to use is the IP of the collector, the client, not the one from FMC server.

> ⚠️ Note that if you are using the collector through the Cloud collector, you must use a public IP. Internal IP addresses will not work if you are using the on-premise collector.

![image](media://ef11687a-bc67-4f73-a259-ebcccf7edf3f)

## Run the collector

Once the data source is configured, you can either send us the required information if you want us to host and manage the collector for you (<u>Cloud collector</u>), or deploy and host the collector in your own machine using a Docker image (<u>On-premise collector</u>).

> Macro (rw-ui-tabs-macro)
> 
> > Macro (rw-tab)
> 
> We use a piece of software called Collector Server to host and manage all our available collectors.
> 
> To enable the collector for a customer:
> 
> 1. In the **Collector Server** **GUI**, access the **domain** in which you want this instance to be created
> 2. Click **Add Collector** and find the one you wish to add.
> 3. In the **Version** field, select the latest value.
> 4. In the **Collector Name** field, set the value you prefer (this name must be unique inside the same Collector Server domain).
> 5. In the sending method select **Direct Send. Direct Send** configuration is optional for collectors that create `Table` events, but mandatory for those that create `Lookups`.
> 6. In the **Parameters** section, establish the **Collector Parameters** as follows below:
> 
> ### Editing the JSON configuration
> 
> ```
> {
>   "cisco_estreamer": {
>     "id": "<short_unique_identifier_1>",
>     "enabled": true,
>     "requests_per_second": 5,
>     "services": {
>       "event_estreamer": {
>         "request_period_in_seconds": 300,
>         "servers": {
>           "server1": {
>             "start_time": "2020-01-01T00:00:00",
>             "force_start_time": false,
>             "host": "<host_ip>",
>             "pkcs12base64": "<base64 string>",
>             "pkcs12Password": "<my_secure_password>",
>             "port": 8302,
>             "tlsVersion": 1.2
>           }
>         }
>       }
>     }
>   }
> }
> ```
> 
> > ℹ️ Replace the placeholders `<short_unique_identifier>`,` <tenant_id_value>`, `<client_id_value>`, and `<client_secret_value>` with the proper values (obtained in previous sections of this document, except the `<short_unique_identifier>` value** **that can have the value of your choice).
> 
> ![Cisco estreamer_10.png](media://06f66a2b-e3db-4074-90e9-030d21000b34)
> 
> > Macro (rw-tab)
> 
> This data collector can be run in any machine that has the Docker service available because it should be executed as a docker container. The following sections explain how to prepare all the required setup for having the data collector running.
> 
> ### Structure
> 
> The following directory structure should be created for being used when running the Cisco eStreamer collector:
> 
> ```
> <any_directory>
> └── devo-collectors/
>     └── cisco/
>         ├── certs/
>         │   ├── chain.crt
>         │   ├── <your_domain>.key
>         │   └── <your_domain>.crt
>         └── config/ 
>             └── config-cisco.yaml
> ```
> 
> ### Devo credentials
> 
> In Devo, go to **Administration → Credentials → X.509 Certificates**, download the **Certificate**, **Private key** and **Chain CA** and save them in `<any directory>/devo-collectors/cisco/certs`. Learn more about security credentials in Devo [here](https://devodocs.atlassian.net/wiki/spaces/latest/pages/94763741).
> 
> ![image](media://fbeba22d-58f8-4fcc-91d7-57051c7acd69)
> 
> ### Editing the config-cisco.yaml file
> 
> In the **config-cisco.yaml** file, replace the `<tenant_id_value>`, `<client_id_value>`, `<client_id> and` `<client_secret_value>`  values and enter the ones that you got in the previous steps. In the `<short_unique_identifier>` placeholder, enter the value that you choose.
> 
> ```
> globals:
>   debug: false
>   id: not_used
>   name: cisco_col
>   persistence:
>     type: filesystem                                                  # File system persistence ON
>     config:
>       directory_name: state                                           # Directory where the persistence will be saved in case of using filesystem
> outputs:
>   devo_1:
>     type: devo_platform
>     config:
>       address: collector-eu.devo.io                                   # Cloud Devo config EU (for US use collector-us.devo.io)
>       port: 443
>       type: SSL
>       chain: chain.crt
>       cert: <devo_domain>.crt
>       key: <devo_domain>.key
> inputs:
>   cisco_estreamer:
>     id: <short_unique_identifier>                                     # The value of this field will be used internally for having independent persistence areas
>     enabled: true
>     requests_per_second: 5                                            # Setup how many request API por second
>     services:                                                         # Services available
>       event_estreamer:
>         request_period_in_seconds: 300                                # Setting up time interval between API requests.
>         servers:
>           server1: 
>             start_time: 2020-01-01T00:00:00                           # Collector Initial time. Must follow the format showed in the sample
>             #force_start_time: true                                    # OPTIONAL. Forces to retrieve the data from the given start_time
>             host: 192.168.0.1                                         # Firewall Management Center IP
>             pkcs12Filepath: credentials/<credentials_file_name>       # eStreamer client certificate. Must be in "credentials" folder
>             #pkcs12base64: credentials_in_base64                       # Base64 client certificate string. Optional field
>             pkcs12Password: mysecurepassword                          # Client certificate password/passphrase
>             port: 8302                                                # eStreamer port
>             tlsVersion: 1.2                                           # Used TLS version
> ```
> 
> > ⚠️ The `start_time` value must have the following format:
> > ⚠️ 
> > ⚠️ `“start_time” format: 0000-00-00T00:00:00`
> 
> ### Download the Docker image
> 
> The collector should be deployed as a Docker container. Download the Docker image of the collector as a .tgz file by clicking the link in the following table:
> 
> | Collector Docker image | SHA-256 hash |
> | --- | --- |
> | [collector-cisco-docker-image-1.3.0.tgz](https://drive.google.com/file/d/1btnK8L6zBy_o-XTetfoSxlV_I3OGyF1F/view?usp=drive_link) | `8a5f3a5e509d9cbaa7058d11573d230a08bc8075231c8ff7f770a126313fc450` |
> 
> Use the following command to add the Docker image to the system:
> 
> ```
> gunzip -c collector-cisco-docker-image-<version>.tgz | docker load
> ```
> 
> > ℹ️ Once the Docker image is imported, it will show the real name of the Docker image (including version info). Replace `<version>` with a proper value.
> 
> The Docker image can be deployed on the following services:
> 
> #### Docker
> 
> Execute the following command on the root directory `<any_directory>/devo-collectors/cisco/`
> 
> ```
> docker run \
> --name collector-cisco \
> --volume $PWD/certs:/devo-collector/certs \
> --volume $PWD/credentials:/devo-collector/credentials \
> --volume $PWD/config:/devo-collector/config \
> --volume $PWD/state:/devo-collector/state \
> --env CONFIG_FILE=config-cisco.yaml \
> --rm -it docker.devo.internal/collector/cisco_collector:<version>
> ```
> 
> > ⚠️ Replace `<version>` with a proper value.
> 
> #### Docker Compose
> 
> The following Docker Compose file can be used to execute the Docker container. It must be created in the `<any_directory>/devo-collectors/cisco/` directory.
> 
> ```
> version: '3'
> services:
>   collector-cisco:
>     image: docker.devo.internal/collector/cisco_collector:${IMAGE_VERSION:-latest}
>     container_name: collector-cisco
>     volumes:
>       - ./certs:/devo-collector/certs
>       - ./config:/devo-collector/config
>       - ./credentials:/devo-collector/credentials
>       - ./state:/devo-collector/state
>     environment:
>       - CONFIG_FILE=${CONFIG_FILE:-config-cisco.yaml}
> ```
> 
> To run the container using docker-compose, execute the following command from the `<any_directory>/devo-collectors/cisco/` directory:
> 
> ```
> IMAGE_VERSION=<version> docker-compose up -d
> ```

## Troubleshooting

Some common points to check in case of problems:

- Doublecheck that the IP of the FMC is the parameter `host`, and the certificate was created for the IP of the client (the collector).
- The FMC has the API server listening and the IP address that is used can be checked by executing this command from a terminal in the FMC: `netstat -an | grep 8302`
- It is needed that both FMC and the collector have network visibility. Check if there is a firewall between the FMC and the collector. Port 8302 must be open for the collector. You can check it by installing `nmap` utility in the collector computer (for instance, in Ubuntu or Debian, `sudo apt install nmap`). Then execute from a terminal in the collector computer: `nmap -p8302 x.y.ip.fmc` where `x.y.ip.fmc` should be the IP of the FMC.
- The certificate generated should use a password. A password-less certificate can cause an error in the collector
- It is possible to discover if the FMC is rejecting the certificate. Execute in a terminal in the FMC the command `cat /var/log/messages | grep "EventStreamer" | grep "Certificate"` or `cat /var/log/messages | grep "EventStreamer" | grep "Certificate" | grep ERROR`
- Other interesting points to check can be found [on this website.](https://www.cisco.com/c/en/us/support/docs/security/firesight-management-center/118071-troubleshoot-firesight-00.html)

## Change log

| **Release** | **Released on** | **Release type** | **Details** | **Recommendations** |
| --- | --- | --- | --- | --- |
| `v1.3.0` | 7/5/2023 | [IMPROVEMENTS] | **Improvements:**<br>- Upgraded DCSDK from 1.6.1 to 1.8.0:
  - Ability to validate collector setup and exit without pulling any data
  - Ability to store in the persistence the messages that couldn't be sent after the collector stopped
  - Ability to send messages from the persistence when the collector starts and before the puller begins working
  - Ensure special characters are properly sent to the platform
  - Added a lock to enhance sender object
  - Added new class attrs to the **setstate** and **getstate** queue methods
  - Fix sending attribute value to the **setstate** and **getstate** queue methods
  - Added log traces when queues are full and have to wait
  - Added log traces of queues time waiting every minute in debug mode
  - Added method to calculate queue size in bytes
  - Block incoming events in queues when there are no space left
  - Send telemetry events to Devo platform
  - Upgraded internal Python dependency Redis to v4.5.4
  - pgraded internal Python dependency DevoSDK to v5.1.3
  - Fixed obfuscation not working when messages are sent from templates
  - New method to figure out if a puller thread is stopping
  - pgraded internal Python dependency DevoSDK to v5.0.6
  - Improved logging on messages/bytes sent to Devo platform
  - Fixed wrong bytes size calculation for queues
  - New functionality to count bytes sent to Devo Platform (shown in console log)
  - Upgraded internal Python dependency DevoSDK to v5.0.4
  - Fixed bug in persistence management process, related to persistence reset
  - Aligned source code typing to be aligned with Python 3.9.x | `Recommended version` |
| `v1.2.0` | 2/16/2023 | [IMPROVEMENTS] | **Improvements:**<br>- Enabled additional logs for the eStreamer client.
- DevoCollectorSDK upgraded to 1.6.1:
  - Added
    - A new key called `@devo_environment` will be added to the event(only for JSON events).
    - Obfuscation service can be now configured from user config and module definition.
    - Obfuscation service can now obfuscate items inside arrays. | `Upgrade` |
| `v1.1.3` | 7/11/2022 | [BUG FIX] | **Bug fixes:**<br>- Fixed a bug that prevented the use of the functionality to read the Cisco certificate file from the /certificates folder when running on-prem. | `Recommended version` |
| `v1.1.2` | 5/24/2022 | [IMPROVEMENTS] | **Improvements:**<br>- Validated base64 variables from config.yaml. A new function was created to check if the base64 token in the configuration file has a valid format.
- Added standard exceptions (InitVariablesError, PrePullError, PullError...) to improve the troubleshooting. The collector was throwing generic exceptions. | `Upgrade` |
| `v1.1.0` | 4/13/2022 | [IMPROVEMENTS]<br>[VULNS] | **Improvements:**<br>- The underlay IFC SDK has been updated from `v1.1.2` to `v1.1.3`.
- The resilience has been improved with a new feature that restart the collector when the Devo connections is lost and it cannot be recovered.<br>**Vulnerabilities mitigation:**<br>- All `critical` and `high` vulnerabilities have been mitigated. | `Upgrade` |