From 05d049b33c0505720538f561a43a403d670cd291 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 11:22:29 -0600 Subject: [PATCH 001/122] update shasums for ISOs for v6.0.1 --- docs/web/download.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/web/download.md b/docs/web/download.md index acc7d44dd..c2329b247 100644 --- a/docs/web/download.md +++ b/docs/web/download.md @@ -16,7 +16,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.0GiB) | [`xxxxxxxx`](/iso/malcolm-6.0.1.iso.sha256.txt) | +| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`89359b1d47b3d8a03ede102fb0d0cda99c2f78de3196a888d06d384d3961aeed`](/iso/malcolm-6.0.1.iso.sha256.txt) | ## Hedgehog Linux @@ -26,7 +26,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.3GiB) | [`xxxxxxxx`](/iso/hedgehog-6.0.1.iso.sha256.txt) | +| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`40da23397e25397d56bc6a2a03d1fc035ec873820b8bdeeb40c6340da86a12f3`](/iso/hedgehog-6.0.1.iso.sha256.txt) | ## Warning From 8a1ef5b544c524cfecc4fbd9ad8837abd4b457ec Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 11:45:31 -0600 Subject: [PATCH 002/122] bump version v6.0.2 development --- README.md | 6 +++--- docker-compose-standalone.yml | 2 +- docker-compose.yml | 2 +- docs/web/download.md | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a0b0a3134..def0cf673 100644 --- a/README.md +++ b/README.md @@ -1248,7 +1248,7 @@ OpenSearch Dashboards supports two query syntaxes: the legacy [Lucene](https://w | IPv6 values |`(ip.src == EXISTS! || ip.dst == EXISTS!) && (ip != 0.0.0.0/0)`|`(_exists_:source.ip AND NOT source.ip:"0.0.0.0/0") OR (_exists_:destination.ip AND NOT destination.ip:"0.0.0.0/0")`|`(source.ip:* and not source.ip:"0.0.0.0/0") or (destination.ip:* and not destination.ip:"0.0.0.0/0")`| | GeoIP information available |`country == EXISTS!`|`_exists_:destination.geo OR _exists_:source.geo`|`destination.geo:* or source.geo:*`| | Zeek log type |`event.dataset == notice`|`event.dataset:notice`|`event.dataset:notice`| -| IP CIDR Subnets |`ip.src == 172.16.0.0/12`|`source.ip:"172.16.0.0/12"`|`source.ip:"172.16.0.0/12"`| +| IP CIDR Subnets |`ip.src == 172.1/12`|`source.ip:"172.1/12"`|`source.ip:"172.1/12"`| | Search time frame |Use Arkime time bounding controls under the search bar|Use OpenSearch Dashboards time range controls in the upper right-hand corner|Use OpenSearch Dashboards time range controls in the upper right-hand corner| When building complex queries, it is **strongly recommended** that you enclose search terms and expressions in parentheses to control order of operations. @@ -1384,7 +1384,7 @@ Each non-comment line (not beginning with a `#`), defines an subnet-to-name mapp 192.168.50.0/24,192.168.40.0/24,10.0.0.0/8|corporate| 192.168.100.0/24|control| 192.168.200.0/24|dmz| -172.16.0.0/12|virtualized|testbed +172.1/12|virtualized|testbed ``` Each line consists of three `|`-separated fields: CIDR-formatted subnet IP range(s), subnet name, and, optionally, a tag which, if specified, must belong to a log for the matching to occur. @@ -1627,7 +1627,7 @@ Returns version information about Malcolm and version/[health](https://opensearc "build_snapshot": false, "build_type": "tar", "lucene_version": "8.10.1", - "minimum_index_compatibility_version": "6.0.0-beta1", + "minimum_index_compatibility_version": "-beta1", "minimum_wire_compatibility_version": "6.8.0", "number": "7.10.2" } diff --git a/docker-compose-standalone.yml b/docker-compose-standalone.yml index 218e2dcd2..230705aef 100644 --- a/docker-compose-standalone.yml +++ b/docker-compose-standalone.yml @@ -92,7 +92,7 @@ x-suricata-variables: &suricata-variables SURICATA_CUSTOM_RULES_ONLY: 'false' # suricata_config_populate.py can use MANY more environment variables to tweak # suricata.yaml (see https://github.com/OISF/suricata/blob/master/suricata.yaml.in and - # https://suricata.readthedocs.io/en/suricata-6.0.0/configuration/suricata-yaml.html). + # https://suricata.readthedocs.io/en/suricata-/configuration/suricata-yaml.html). # DEFAULT_VARS in that script defines those variables (albeit without the # required `SURICATA_` prefixing each) diff --git a/docker-compose.yml b/docker-compose.yml index abd123bb8..581d3b2f9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -92,7 +92,7 @@ x-suricata-variables: &suricata-variables SURICATA_CUSTOM_RULES_ONLY: 'false' # suricata_config_populate.py can use MANY more environment variables to tweak # suricata.yaml (see https://github.com/OISF/suricata/blob/master/suricata.yaml.in and - # https://suricata.readthedocs.io/en/suricata-6.0.0/configuration/suricata-yaml.html). + # https://suricata.readthedocs.io/en/suricata-/configuration/suricata-yaml.html). # DEFAULT_VARS in that script defines those variables (albeit without the # required `SURICATA_` prefixing each) diff --git a/docs/web/download.md b/docs/web/download.md index c2329b247..e05f2ca90 100644 --- a/docs/web/download.md +++ b/docs/web/download.md @@ -16,7 +16,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`89359b1d47b3d8a03ede102fb0d0cda99c2f78de3196a888d06d384d3961aeed`](/iso/malcolm-6.0.1.iso.sha256.txt) | +| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`xxxxxxxx`](/iso/malcolm-6.0.1.iso.sha256.txt) | ## Hedgehog Linux @@ -26,7 +26,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`40da23397e25397d56bc6a2a03d1fc035ec873820b8bdeeb40c6340da86a12f3`](/iso/hedgehog-6.0.1.iso.sha256.txt) | +| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`xxxxxxxx`](/iso/hedgehog-6.0.1.iso.sha256.txt) | ## Warning From 4e432ef6300454e1aa597be93a61842445632c31 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 12:20:18 -0600 Subject: [PATCH 003/122] Revert "bump version v6.0.2 development" This reverts commit 8a1ef5b544c524cfecc4fbd9ad8837abd4b457ec. --- README.md | 6 +++--- docker-compose-standalone.yml | 2 +- docker-compose.yml | 2 +- docs/web/download.md | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index def0cf673..a0b0a3134 100644 --- a/README.md +++ b/README.md @@ -1248,7 +1248,7 @@ OpenSearch Dashboards supports two query syntaxes: the legacy [Lucene](https://w | IPv6 values |`(ip.src == EXISTS! || ip.dst == EXISTS!) && (ip != 0.0.0.0/0)`|`(_exists_:source.ip AND NOT source.ip:"0.0.0.0/0") OR (_exists_:destination.ip AND NOT destination.ip:"0.0.0.0/0")`|`(source.ip:* and not source.ip:"0.0.0.0/0") or (destination.ip:* and not destination.ip:"0.0.0.0/0")`| | GeoIP information available |`country == EXISTS!`|`_exists_:destination.geo OR _exists_:source.geo`|`destination.geo:* or source.geo:*`| | Zeek log type |`event.dataset == notice`|`event.dataset:notice`|`event.dataset:notice`| -| IP CIDR Subnets |`ip.src == 172.1/12`|`source.ip:"172.1/12"`|`source.ip:"172.1/12"`| +| IP CIDR Subnets |`ip.src == 172.16.0.0/12`|`source.ip:"172.16.0.0/12"`|`source.ip:"172.16.0.0/12"`| | Search time frame |Use Arkime time bounding controls under the search bar|Use OpenSearch Dashboards time range controls in the upper right-hand corner|Use OpenSearch Dashboards time range controls in the upper right-hand corner| When building complex queries, it is **strongly recommended** that you enclose search terms and expressions in parentheses to control order of operations. @@ -1384,7 +1384,7 @@ Each non-comment line (not beginning with a `#`), defines an subnet-to-name mapp 192.168.50.0/24,192.168.40.0/24,10.0.0.0/8|corporate| 192.168.100.0/24|control| 192.168.200.0/24|dmz| -172.1/12|virtualized|testbed +172.16.0.0/12|virtualized|testbed ``` Each line consists of three `|`-separated fields: CIDR-formatted subnet IP range(s), subnet name, and, optionally, a tag which, if specified, must belong to a log for the matching to occur. @@ -1627,7 +1627,7 @@ Returns version information about Malcolm and version/[health](https://opensearc "build_snapshot": false, "build_type": "tar", "lucene_version": "8.10.1", - "minimum_index_compatibility_version": "-beta1", + "minimum_index_compatibility_version": "6.0.0-beta1", "minimum_wire_compatibility_version": "6.8.0", "number": "7.10.2" } diff --git a/docker-compose-standalone.yml b/docker-compose-standalone.yml index 230705aef..218e2dcd2 100644 --- a/docker-compose-standalone.yml +++ b/docker-compose-standalone.yml @@ -92,7 +92,7 @@ x-suricata-variables: &suricata-variables SURICATA_CUSTOM_RULES_ONLY: 'false' # suricata_config_populate.py can use MANY more environment variables to tweak # suricata.yaml (see https://github.com/OISF/suricata/blob/master/suricata.yaml.in and - # https://suricata.readthedocs.io/en/suricata-/configuration/suricata-yaml.html). + # https://suricata.readthedocs.io/en/suricata-6.0.0/configuration/suricata-yaml.html). # DEFAULT_VARS in that script defines those variables (albeit without the # required `SURICATA_` prefixing each) diff --git a/docker-compose.yml b/docker-compose.yml index 581d3b2f9..abd123bb8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -92,7 +92,7 @@ x-suricata-variables: &suricata-variables SURICATA_CUSTOM_RULES_ONLY: 'false' # suricata_config_populate.py can use MANY more environment variables to tweak # suricata.yaml (see https://github.com/OISF/suricata/blob/master/suricata.yaml.in and - # https://suricata.readthedocs.io/en/suricata-/configuration/suricata-yaml.html). + # https://suricata.readthedocs.io/en/suricata-6.0.0/configuration/suricata-yaml.html). # DEFAULT_VARS in that script defines those variables (albeit without the # required `SURICATA_` prefixing each) diff --git a/docs/web/download.md b/docs/web/download.md index e05f2ca90..c2329b247 100644 --- a/docs/web/download.md +++ b/docs/web/download.md @@ -16,7 +16,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`xxxxxxxx`](/iso/malcolm-6.0.1.iso.sha256.txt) | +| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`89359b1d47b3d8a03ede102fb0d0cda99c2f78de3196a888d06d384d3961aeed`](/iso/malcolm-6.0.1.iso.sha256.txt) | ## Hedgehog Linux @@ -26,7 +26,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`xxxxxxxx`](/iso/hedgehog-6.0.1.iso.sha256.txt) | +| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`40da23397e25397d56bc6a2a03d1fc035ec873820b8bdeeb40c6340da86a12f3`](/iso/hedgehog-6.0.1.iso.sha256.txt) | ## Warning From 5acf2b059ef13412b2f30ba14f48b61c390bdfa1 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 12:32:32 -0600 Subject: [PATCH 004/122] bump version v6.0.2 development --- README.md | 70 +++++++++++++++++------------------ docker-compose-standalone.yml | 34 ++++++++--------- docker-compose.yml | 34 ++++++++--------- docs/web/download.md | 4 +- sensor-iso/README.md | 2 +- 5 files changed, 72 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index a0b0a3134..29b714895 100644 --- a/README.md +++ b/README.md @@ -184,23 +184,23 @@ You can then observe that the images have been retrieved by running `docker imag ``` $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE -malcolmnetsec/api 6.0.1 xxxxxxxxxxxx 3 days ago 158MB -malcolmnetsec/arkime 6.0.1 xxxxxxxxxxxx 3 days ago 816MB -malcolmnetsec/dashboards 6.0.1 xxxxxxxxxxxx 3 days ago 1.02GB -malcolmnetsec/dashboards-helper 6.0.1 xxxxxxxxxxxx 3 days ago 184MB -malcolmnetsec/filebeat-oss 6.0.1 xxxxxxxxxxxx 3 days ago 624MB -malcolmnetsec/file-monitor 6.0.1 xxxxxxxxxxxx 3 days ago 588MB -malcolmnetsec/file-upload 6.0.1 xxxxxxxxxxxx 3 days ago 259MB -malcolmnetsec/freq 6.0.1 xxxxxxxxxxxx 3 days ago 132MB -malcolmnetsec/htadmin 6.0.1 xxxxxxxxxxxx 3 days ago 242MB -malcolmnetsec/logstash-oss 6.0.1 xxxxxxxxxxxx 3 days ago 1.35GB -malcolmnetsec/name-map-ui 6.0.1 xxxxxxxxxxxx 3 days ago 143MB -malcolmnetsec/nginx-proxy 6.0.1 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/opensearch 6.0.1 xxxxxxxxxxxx 3 days ago 1.17GB -malcolmnetsec/pcap-capture 6.0.1 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/pcap-monitor 6.0.1 xxxxxxxxxxxx 3 days ago 213MB -malcolmnetsec/suricata 6.0.1 xxxxxxxxxxxx 3 days ago 278MB -malcolmnetsec/zeek 6.0.1 xxxxxxxxxxxx 3 days ago 1GB +malcolmnetsec/api 6.0.2 xxxxxxxxxxxx 3 days ago 158MB +malcolmnetsec/arkime 6.0.2 xxxxxxxxxxxx 3 days ago 816MB +malcolmnetsec/dashboards 6.0.2 xxxxxxxxxxxx 3 days ago 1.02GB +malcolmnetsec/dashboards-helper 6.0.2 xxxxxxxxxxxx 3 days ago 184MB +malcolmnetsec/filebeat-oss 6.0.2 xxxxxxxxxxxx 3 days ago 624MB +malcolmnetsec/file-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 588MB +malcolmnetsec/file-upload 6.0.2 xxxxxxxxxxxx 3 days ago 259MB +malcolmnetsec/freq 6.0.2 xxxxxxxxxxxx 3 days ago 132MB +malcolmnetsec/htadmin 6.0.2 xxxxxxxxxxxx 3 days ago 242MB +malcolmnetsec/logstash-oss 6.0.2 xxxxxxxxxxxx 3 days ago 1.35GB +malcolmnetsec/name-map-ui 6.0.2 xxxxxxxxxxxx 3 days ago 143MB +malcolmnetsec/nginx-proxy 6.0.2 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/opensearch 6.0.2 xxxxxxxxxxxx 3 days ago 1.17GB +malcolmnetsec/pcap-capture 6.0.2 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/pcap-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 213MB +malcolmnetsec/suricata 6.0.2 xxxxxxxxxxxx 3 days ago 278MB +malcolmnetsec/zeek 6.0.2 xxxxxxxxxxxx 3 days ago 1GB ``` #### Import from pre-packaged tarballs @@ -3429,7 +3429,7 @@ Building the ISO may take 30 minutes or more depending on your system. As the bu ``` … -Finished, created "/malcolm-build/malcolm-iso/malcolm-6.0.1.iso" +Finished, created "/malcolm-build/malcolm-iso/malcolm-6.0.2.iso" … ``` @@ -3831,23 +3831,23 @@ Pulling zeek ... done user@host:~/Malcolm$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE -malcolmnetsec/api 6.0.1 xxxxxxxxxxxx 3 days ago 158MB -malcolmnetsec/arkime 6.0.1 xxxxxxxxxxxx 3 days ago 816MB -malcolmnetsec/dashboards 6.0.1 xxxxxxxxxxxx 3 days ago 1.02GB -malcolmnetsec/dashboards-helper 6.0.1 xxxxxxxxxxxx 3 days ago 184MB -malcolmnetsec/filebeat-oss 6.0.1 xxxxxxxxxxxx 3 days ago 624MB -malcolmnetsec/file-monitor 6.0.1 xxxxxxxxxxxx 3 days ago 588MB -malcolmnetsec/file-upload 6.0.1 xxxxxxxxxxxx 3 days ago 259MB -malcolmnetsec/freq 6.0.1 xxxxxxxxxxxx 3 days ago 132MB -malcolmnetsec/htadmin 6.0.1 xxxxxxxxxxxx 3 days ago 242MB -malcolmnetsec/logstash-oss 6.0.1 xxxxxxxxxxxx 3 days ago 1.35GB -malcolmnetsec/name-map-ui 6.0.1 xxxxxxxxxxxx 3 days ago 143MB -malcolmnetsec/nginx-proxy 6.0.1 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/opensearch 6.0.1 xxxxxxxxxxxx 3 days ago 1.17GB -malcolmnetsec/pcap-capture 6.0.1 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/pcap-monitor 6.0.1 xxxxxxxxxxxx 3 days ago 213MB -malcolmnetsec/suricata 6.0.1 xxxxxxxxxxxx 3 days ago 278MB -malcolmnetsec/zeek 6.0.1 xxxxxxxxxxxx 3 days ago 1GB +malcolmnetsec/api 6.0.2 xxxxxxxxxxxx 3 days ago 158MB +malcolmnetsec/arkime 6.0.2 xxxxxxxxxxxx 3 days ago 816MB +malcolmnetsec/dashboards 6.0.2 xxxxxxxxxxxx 3 days ago 1.02GB +malcolmnetsec/dashboards-helper 6.0.2 xxxxxxxxxxxx 3 days ago 184MB +malcolmnetsec/filebeat-oss 6.0.2 xxxxxxxxxxxx 3 days ago 624MB +malcolmnetsec/file-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 588MB +malcolmnetsec/file-upload 6.0.2 xxxxxxxxxxxx 3 days ago 259MB +malcolmnetsec/freq 6.0.2 xxxxxxxxxxxx 3 days ago 132MB +malcolmnetsec/htadmin 6.0.2 xxxxxxxxxxxx 3 days ago 242MB +malcolmnetsec/logstash-oss 6.0.2 xxxxxxxxxxxx 3 days ago 1.35GB +malcolmnetsec/name-map-ui 6.0.2 xxxxxxxxxxxx 3 days ago 143MB +malcolmnetsec/nginx-proxy 6.0.2 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/opensearch 6.0.2 xxxxxxxxxxxx 3 days ago 1.17GB +malcolmnetsec/pcap-capture 6.0.2 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/pcap-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 213MB +malcolmnetsec/suricata 6.0.2 xxxxxxxxxxxx 3 days ago 278MB +malcolmnetsec/zeek 6.0.2 xxxxxxxxxxxx 3 days ago 1GB ``` Finally, we can start Malcolm. When Malcolm starts it will stream informational and debug messages to the console. If you wish, you can safely close the console or use `Ctrl+C` to stop these messages; Malcolm will continue running in the background. diff --git a/docker-compose-standalone.yml b/docker-compose-standalone.yml index 218e2dcd2..00dff2496 100644 --- a/docker-compose-standalone.yml +++ b/docker-compose-standalone.yml @@ -163,7 +163,7 @@ x-pcap-capture-variables: &pcap-capture-variables services: opensearch: - image: malcolmnetsec/opensearch:6.0.1 + image: malcolmnetsec/opensearch:6.0.2 restart: "no" stdin_open: false tty: true @@ -203,7 +203,7 @@ services: retries: 3 start_period: 180s dashboards-helper: - image: malcolmnetsec/dashboards-helper:6.0.1 + image: malcolmnetsec/dashboards-helper:6.0.2 restart: "no" stdin_open: false tty: true @@ -233,7 +233,7 @@ services: retries: 3 start_period: 30s dashboards: - image: malcolmnetsec/dashboards:6.0.1 + image: malcolmnetsec/dashboards:6.0.2 restart: "no" stdin_open: false tty: true @@ -256,7 +256,7 @@ services: retries: 3 start_period: 210s logstash: - image: malcolmnetsec/logstash-oss:6.0.1 + image: malcolmnetsec/logstash-oss:6.0.2 restart: "no" stdin_open: false tty: true @@ -301,7 +301,7 @@ services: retries: 3 start_period: 600s filebeat: - image: malcolmnetsec/filebeat-oss:6.0.1 + image: malcolmnetsec/filebeat-oss:6.0.2 restart: "no" stdin_open: false tty: true @@ -333,7 +333,7 @@ services: retries: 3 start_period: 60s arkime: - image: malcolmnetsec/arkime:6.0.1 + image: malcolmnetsec/arkime:6.0.2 restart: "no" stdin_open: false tty: true @@ -373,7 +373,7 @@ services: retries: 3 start_period: 210s zeek: - image: malcolmnetsec/zeek:6.0.1 + image: malcolmnetsec/zeek:6.0.2 restart: "no" stdin_open: false tty: true @@ -404,7 +404,7 @@ services: retries: 3 start_period: 60s suricata: - image: malcolmnetsec/suricata:6.0.1 + image: malcolmnetsec/suricata:6.0.2 restart: "no" stdin_open: false tty: true @@ -429,7 +429,7 @@ services: retries: 3 start_period: 120s file-monitor: - image: malcolmnetsec/file-monitor:6.0.1 + image: malcolmnetsec/file-monitor:6.0.2 restart: "no" stdin_open: false tty: true @@ -454,7 +454,7 @@ services: retries: 3 start_period: 60s pcap-capture: - image: malcolmnetsec/pcap-capture:6.0.1 + image: malcolmnetsec/pcap-capture:6.0.2 restart: "no" stdin_open: false tty: true @@ -474,7 +474,7 @@ services: volumes: - ./pcap/upload:/pcap pcap-monitor: - image: malcolmnetsec/pcap-monitor:6.0.1 + image: malcolmnetsec/pcap-monitor:6.0.2 restart: "no" stdin_open: false tty: true @@ -499,7 +499,7 @@ services: retries: 3 start_period: 90s upload: - image: malcolmnetsec/file-upload:6.0.1 + image: malcolmnetsec/file-upload:6.0.2 restart: "no" stdin_open: false tty: true @@ -527,7 +527,7 @@ services: retries: 3 start_period: 60s htadmin: - image: malcolmnetsec/htadmin:6.0.1 + image: malcolmnetsec/htadmin:6.0.2 restart: "no" stdin_open: false tty: true @@ -551,7 +551,7 @@ services: retries: 3 start_period: 60s freq: - image: malcolmnetsec/freq:6.0.1 + image: malcolmnetsec/freq:6.0.2 restart: "no" stdin_open: false tty: true @@ -571,7 +571,7 @@ services: retries: 3 start_period: 60s name-map-ui: - image: malcolmnetsec/name-map-ui:6.0.1 + image: malcolmnetsec/name-map-ui:6.0.2 restart: "no" stdin_open: false tty: true @@ -594,7 +594,7 @@ services: retries: 3 start_period: 60s api: - image: malcolmnetsec/api:6.0.1 + image: malcolmnetsec/api:6.0.2 command: gunicorn --bind 0:5000 manage:app restart: "no" stdin_open: false @@ -614,7 +614,7 @@ services: retries: 3 start_period: 60s nginx-proxy: - image: malcolmnetsec/nginx-proxy:6.0.1 + image: malcolmnetsec/nginx-proxy:6.0.2 restart: "no" stdin_open: false tty: true diff --git a/docker-compose.yml b/docker-compose.yml index abd123bb8..4df1cc600 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -166,7 +166,7 @@ services: build: context: . dockerfile: Dockerfiles/opensearch.Dockerfile - image: malcolmnetsec/opensearch:6.0.1 + image: malcolmnetsec/opensearch:6.0.2 restart: "no" stdin_open: false tty: true @@ -209,7 +209,7 @@ services: build: context: . dockerfile: Dockerfiles/dashboards-helper.Dockerfile - image: malcolmnetsec/dashboards-helper:6.0.1 + image: malcolmnetsec/dashboards-helper:6.0.2 restart: "no" stdin_open: false tty: true @@ -242,7 +242,7 @@ services: build: context: . dockerfile: Dockerfiles/dashboards.Dockerfile - image: malcolmnetsec/dashboards:6.0.1 + image: malcolmnetsec/dashboards:6.0.2 restart: "no" stdin_open: false tty: true @@ -268,7 +268,7 @@ services: build: context: . dockerfile: Dockerfiles/logstash.Dockerfile - image: malcolmnetsec/logstash-oss:6.0.1 + image: malcolmnetsec/logstash-oss:6.0.2 restart: "no" stdin_open: false tty: true @@ -319,7 +319,7 @@ services: build: context: . dockerfile: Dockerfiles/filebeat.Dockerfile - image: malcolmnetsec/filebeat-oss:6.0.1 + image: malcolmnetsec/filebeat-oss:6.0.2 restart: "no" stdin_open: false tty: true @@ -354,7 +354,7 @@ services: build: context: . dockerfile: Dockerfiles/arkime.Dockerfile - image: malcolmnetsec/arkime:6.0.1 + image: malcolmnetsec/arkime:6.0.2 restart: "no" stdin_open: false tty: true @@ -400,7 +400,7 @@ services: build: context: . dockerfile: Dockerfiles/zeek.Dockerfile - image: malcolmnetsec/zeek:6.0.1 + image: malcolmnetsec/zeek:6.0.2 restart: "no" stdin_open: false tty: true @@ -435,7 +435,7 @@ services: build: context: . dockerfile: Dockerfiles/suricata.Dockerfile - image: malcolmnetsec/suricata:6.0.1 + image: malcolmnetsec/suricata:6.0.2 restart: "no" stdin_open: false tty: true @@ -463,7 +463,7 @@ services: build: context: . dockerfile: Dockerfiles/file-monitor.Dockerfile - image: malcolmnetsec/file-monitor:6.0.1 + image: malcolmnetsec/file-monitor:6.0.2 restart: "no" stdin_open: false tty: true @@ -491,7 +491,7 @@ services: build: context: . dockerfile: Dockerfiles/pcap-capture.Dockerfile - image: malcolmnetsec/pcap-capture:6.0.1 + image: malcolmnetsec/pcap-capture:6.0.2 restart: "no" stdin_open: false tty: true @@ -514,7 +514,7 @@ services: build: context: . dockerfile: Dockerfiles/pcap-monitor.Dockerfile - image: malcolmnetsec/pcap-monitor:6.0.1 + image: malcolmnetsec/pcap-monitor:6.0.2 restart: "no" stdin_open: false tty: true @@ -542,7 +542,7 @@ services: build: context: . dockerfile: Dockerfiles/file-upload.Dockerfile - image: malcolmnetsec/file-upload:6.0.1 + image: malcolmnetsec/file-upload:6.0.2 restart: "no" stdin_open: false tty: true @@ -570,7 +570,7 @@ services: retries: 3 start_period: 60s htadmin: - image: malcolmnetsec/htadmin:6.0.1 + image: malcolmnetsec/htadmin:6.0.2 build: context: . dockerfile: Dockerfiles/htadmin.Dockerfile @@ -597,7 +597,7 @@ services: retries: 3 start_period: 60s freq: - image: malcolmnetsec/freq:6.0.1 + image: malcolmnetsec/freq:6.0.2 build: context: . dockerfile: Dockerfiles/freq.Dockerfile @@ -620,7 +620,7 @@ services: retries: 3 start_period: 60s name-map-ui: - image: malcolmnetsec/name-map-ui:6.0.1 + image: malcolmnetsec/name-map-ui:6.0.2 build: context: . dockerfile: Dockerfiles/name-map-ui.Dockerfile @@ -646,7 +646,7 @@ services: retries: 3 start_period: 60s api: - image: malcolmnetsec/api:6.0.1 + image: malcolmnetsec/api:6.0.2 build: context: . dockerfile: Dockerfiles/api.Dockerfile @@ -672,7 +672,7 @@ services: build: context: . dockerfile: Dockerfiles/nginx.Dockerfile - image: malcolmnetsec/nginx-proxy:6.0.1 + image: malcolmnetsec/nginx-proxy:6.0.2 restart: "no" stdin_open: false tty: true diff --git a/docs/web/download.md b/docs/web/download.md index c2329b247..c398eb03e 100644 --- a/docs/web/download.md +++ b/docs/web/download.md @@ -16,7 +16,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [malcolm-6.0.1.iso](/iso/malcolm-6.0.1.iso) (4.3GiB) | [`89359b1d47b3d8a03ede102fb0d0cda99c2f78de3196a888d06d384d3961aeed`](/iso/malcolm-6.0.1.iso.sha256.txt) | +| [malcolm-6.0.2.iso](/iso/malcolm-6.0.2.iso) (4.3GiB) | [`xxxxxxxx`](/iso/malcolm-6.0.2.iso.sha256.txt) | ## Hedgehog Linux @@ -26,7 +26,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [hedgehog-6.0.1.iso](/iso/hedgehog-6.0.1.iso) (2.32iB) | [`40da23397e25397d56bc6a2a03d1fc035ec873820b8bdeeb40c6340da86a12f3`](/iso/hedgehog-6.0.1.iso.sha256.txt) | +| [hedgehog-6.0.2.iso](/iso/hedgehog-6.0.2.iso) (2.32iB) | [`xxxxxxxx`](/iso/hedgehog-6.0.2.iso.sha256.txt) | ## Warning diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 72c9ec1f6..1fcb090d0 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -429,7 +429,7 @@ Building the ISO may take 90 minutes or more depending on your system. As the bu ``` … -Finished, created "/sensor-build/hedgehog-6.0.1.iso" +Finished, created "/sensor-build/hedgehog-6.0.2.iso" … ``` From d2eeb9255e3cd00dce05407ba6c054de131fc29b Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 15:26:11 -0600 Subject: [PATCH 005/122] arkime field actions --- arkime/patch/field_actions.patch | 1210 ++++++++++++++++++++++++++++++ arkime/wise/source.zeeklogs.js | 38 +- 2 files changed, 1229 insertions(+), 19 deletions(-) create mode 100644 arkime/patch/field_actions.patch diff --git a/arkime/patch/field_actions.patch b/arkime/patch/field_actions.patch new file mode 100644 index 000000000..235598b0b --- /dev/null +++ b/arkime/patch/field_actions.patch @@ -0,0 +1,1210 @@ +diff --git a/CHANGELOG b/CHANGELOG +index 96145ded..8dc406d6 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -23,6 +23,10 @@ Node Versions: + NOTICE: Restart wiseService before capture when upgrading + NOTICE: Cross-cluster Shortcuts require you to not restart all your viewers at once after upgrading + ++4.0.0 2022/04/xx ++ - capture - New ecsEventDatset setting ++ - viewer - field-actions to display configurable menu items on field labels ++ + 3.4.2 2022/03/31 + - release - node 16.14.2 + - viewer - Packets/s, Sessions/s, Dropped/s didn't have correct total/average +diff --git a/capture/plugins/wise.js b/capture/plugins/wise.js +index 02e71ce4..03ac9949 100644 +--- a/capture/plugins/wise.js ++++ b/capture/plugins/wise.js +@@ -51,7 +51,29 @@ exports.init = function (Config, emitter) { + }); + + emitter.on('makeRightClick', function (cb) { +- const url = baseURL + '/rightClicks'; ++ const url = baseURL + '/valueActions'; ++ const req = client.request(url, function (res) { ++ let body = ''; ++ res.on('data', function (chunk) { ++ body += chunk; ++ }); ++ res.on('end', function () { ++ if (res.statusCode !== 200) { ++ return cb(null, {}); ++ } ++ const result = JSON.parse(body); ++ return cb(null, result); ++ }); ++ }); ++ req.on('error', function (err) { ++ console.log('WISE Right Click ERROR', err); ++ return cb(err, {}); ++ }); ++ req.end(); ++ }); ++ ++ emitter.on('makeFieldActions', function (cb) { ++ const url = baseURL + '/fieldActions'; + const req = client.request(url, function (res) { + let body = ''; + res.on('data', function (chunk) { +diff --git a/tests/config.test.ini b/tests/config.test.ini +index 65dd4bf7..a0332e52 100644 +--- a/tests/config.test.ini ++++ b/tests/config.test.ini +@@ -287,12 +287,11 @@ format=tagger + #type=domain + #reload=60 + +-[right-click] ++[value-actions] + VTIP=url:https://www.virustotal.com/en/ip-address/%TEXT%/information/;name:Virus Total IP;category:ip + VTHOST=url:https://www.virustotal.com/en/domain/%HOST%/information/;name:Virus Total Host;category:host + VTURL=url:https://www.virustotal.com/latest-scan/%URL%;name:Virus Total URL;category:url + +- + [custom-fields] + iscool=kind:termfield;count:true;friendly:Is cool;db:iscool;help:Is Cool String + sample.md5=db:sample.md5;kind:lotermfield;friendly:Sample MD5;count:true;help:MD5 of the sample +diff --git a/viewer/apiMisc.js b/viewer/apiMisc.js +index 9d3c4a5f..cf255236 100644 +--- a/viewer/apiMisc.js ++++ b/viewer/apiMisc.js +@@ -220,6 +220,35 @@ module.exports = (Config, Db, internals, sessionAPIs, userAPIs, ViewerUtils) => + return res.send(actions); + }; + ++ /** ++ * GET - /api/fieldactions ++ * ++ * Retrives the actions that can be preformed on fields. ++ * @name /fieldactions ++ * @returns {object} - The list of actions that can be preformed on fields. ++ */ ++ miscAPIs.getFieldActions = (req, res) => { ++ if (!req.user || !req.user.userId) { ++ return res.send({}); ++ } ++ ++ const actions = {}; ++ ++ for (const key in internals.fieldActions) { ++ const action = internals.fieldActions[key]; ++ if (action.notUsers && action.notUsers[req.user.userId]) { ++ continue; ++ } ++ if (!action.users || action.users[req.user.userId]) { ++ actions[key] = action; ++ } ++ ++ delete actions[key].users; ++ } ++ ++ return res.send(actions); ++ }; ++ + // reverse dns apis --------------------------------------------------------- + /** + * GET - /api/reversedns +diff --git a/viewer/internals.js b/viewer/internals.js +index 76850978..260ae1d1 100644 +--- a/viewer/internals.js ++++ b/viewer/internals.js +@@ -25,6 +25,7 @@ module.exports = (app, Config) => { + caTrustCerts: {}, + cronRunning: false, + rightClicks: {}, ++ fieldActions: {}, + pluginEmitter: new EventEmitter(), + writers: {}, + oldDBFields: {}, +diff --git a/viewer/viewer.js b/viewer/viewer.js +index 9ae6e92e..34c7605c 100755 +--- a/viewer/viewer.js ++++ b/viewer/viewer.js +@@ -398,8 +398,8 @@ function createSessionDetail () { + }); + } + +-function createRightClicks () { +- const mrc = Config.configMap('right-click'); ++function createActions (configKey, emitter, internalsKey) { ++ const mrc = Config.configMap(configKey); + for (const key in mrc) { + if (mrc[key].fields) { + mrc[key].fields = mrc[key].fields.split(','); +@@ -412,7 +412,7 @@ function createRightClicks () { + mrc[key].users = users; + } + } +- const makers = internals.pluginEmitter.listeners('makeRightClick'); ++ const makers = internals.pluginEmitter.listeners(emitter); + async.each(makers, function (cb, nextCb) { + cb(function (err, items) { + for (const k in items) { +@@ -424,7 +424,7 @@ function createRightClicks () { + return nextCb(); + }); + }, function () { +- internals.rightClicks = mrc; ++ internals[internalsKey] = mrc; + }); + } + +@@ -1945,13 +1945,19 @@ app.get( // titleconfig endpoint + miscAPIs.getPageTitle + ); + +-// value actions apis --------------------------------------------------------- ++// menu actions apis --------------------------------------------------------- + app.get( // value actions endpoint + ['/api/valueactions', '/api/valueActions', '/molochRightClick'], + [ArkimeUtil.noCacheJson, checkPermissions(['webEnabled'])], + miscAPIs.getValueActions + ); + ++app.get( // field actions endpoint ++ ['/api/fieldactions', '/api/fieldActions'], ++ [ArkimeUtil.noCacheJson, User.checkPermissions(['webEnabled'])], ++ miscAPIs.getFieldActions ++); ++ + // reverse dns apis ----------------------------------------------------------- + app.get( // reverse dns endpoint + ['/api/reversedns', '/reverseDNS.txt'], +@@ -2413,8 +2419,10 @@ async function main () { + setInterval(expireCheckAll, 60 * 1000); + } + +- createRightClicks(); +- setInterval(createRightClicks, 150 * 1000); // Check every 2.5 minutes ++ createActions('value-actions', 'makeRightClick', 'rightClick'); ++ setInterval(() => createActions('value-actions', 'makeRightClick', 'rightClick'), 150 * 1000); // Check every 2.5 minutes ++ createActions('field-actions', 'makeFieldActions', 'fieldActions'); ++ setInterval(() => createActions('field-actions', 'makeFieldActions', 'fieldActions'), 150 * 1000); // Check every 2.5 minutes + + if (Config.get('cronQueries', false)) { // this viewer will process the cron queries + console.log('This node will process Periodic Queries, delayed by', internals.cronTimeout, 'seconds'); +diff --git a/viewer/views/mixins.pug b/viewer/views/mixins.pug +index 81b3ac9e..8c47be68 100644 +--- a/viewer/views/mixins.pug ++++ b/viewer/views/mixins.pug +@@ -20,6 +20,11 @@ mixin clickableLabel(field, title) + | Toggle #{title} in Info column + b-dropdown-item(@click="fieldExists('" + field + "', '==')") + | Add #{title} EXISTS! to query ++ +clickableFieldActions(field, true) ++ ++//- Display a clickable field action in the field menu ++mixin clickableFieldActions(fieldExpr, sep) ++ field-actions(:expr=`'${fieldExpr}'`, :separator=`${sep}`) + + mixin arrayPrint(container, field, expr) + if ((container && container[field])) +diff --git a/viewer/views/sessionDetail.pug b/viewer/views/sessionDetail.pug +index 7a97fde7..66285f8a 100644 +--- a/viewer/views/sessionDetail.pug ++++ b/viewer/views/sessionDetail.pug +@@ -97,6 +97,7 @@ dl + | Open Src Packets SPI Graph + b-dropdown-item(@click="fieldExists('packets.src', '==')") + | Add Src Packets EXISTS! to query ++ +clickableFieldActions('packets.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('bytes.src', 0)") + | Export Unique Src Bytes +@@ -106,6 +107,7 @@ dl + | Open Src Bytes SPI Graph + b-dropdown-item(@click="fieldExists('bytes.src', '==')") + | Add Src Bytes EXISTS! to query ++ +clickableFieldActions('bytes.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('databytes.src', 0)") + | Export Unique Src Databytes +@@ -115,6 +117,7 @@ dl + | Open Src Databytes SPI Graph + b-dropdown-item(@click="fieldExists('databytes.src', '==')") + | Add Src Databytes EXISTS! to query ++ +clickableFieldActions('databytes.src', false) + dd + strong.medium.ml-1 Packets + +clickableValue('packets.src', session.source.packets) +@@ -133,6 +136,7 @@ dl + | Open Dst Packets SPI Graph + b-dropdown-item(@click="fieldExists('packets.dst', '==')") + | Add Dst Packets EXISTS! to query ++ +clickableFieldActions('packets.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('bytes.dst', 0)") + | Export Unique Dst Bytes +@@ -142,6 +146,7 @@ dl + | Open Dst Bytes SPI Graph + b-dropdown-item(@click="fieldExists('bytes.dst', '==')") + | Add Dst Bytes EXISTS! to query ++ +clickableFieldActions('bytes.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('databytes.dst', 0)") + | Export Unique Dst Databytes +@@ -151,6 +156,7 @@ dl + | Open Dst Databytes SPI Graph + b-dropdown-item(@click="fieldExists('databytes.dst', '==')") + | Add Dst Databytes EXISTS! to query ++ +clickableFieldActions('databytes.dst', false) + dd + strong.medium.ml-1 Packets + +clickableValue('packets.dst', session.destination.packets) +@@ -170,6 +176,7 @@ dl + | Open Src Mac SPI Graph + b-dropdown-item(@click="fieldExists('mac.src', '==')") + | Add Src Mac EXISTS! to query ++ +clickableFieldActions('mac.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('oui.src', 0)") + | Export Unique Src OUI +@@ -179,6 +186,7 @@ dl + | Open Src OUI SPI Graph + b-dropdown-item(@click="fieldExists('oui.src', '==')") + | Add Src OUI EXISTS! to query ++ +clickableFieldActions('oui.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('mac.dst', 0)") + | Export Unique Dst Mac +@@ -188,6 +196,7 @@ dl + | Open Dst Mac SPI Graph + b-dropdown-item(@click="fieldExists('mac.dst', '==')") + | Add Dst Mac EXISTS! to query ++ +clickableFieldActions('mac.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('oui.dst', 0)") + | Export Unique Dst OUI +@@ -197,6 +206,7 @@ dl + | Open Dst OUI SPI Graph + b-dropdown-item(@click="fieldExists('oui.dst', '==')") + | Add Dst OUI EXISTS! to query ++ +clickableFieldActions('oui.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('vlan', 0)") + | Export Unique VLan +@@ -206,6 +216,7 @@ dl + | Open VLan SPI Graph + b-dropdown-item(@click="fieldExists('vlan', '==')") + | Add VLAN EXISTS! to query ++ +clickableFieldActions('vlan', false) + dd + strong.medium.ml-1 Src Mac + +arrayPrint(session.source, "mac", "mac.src", true) +@@ -237,6 +248,7 @@ dl + | Export Unique Src IP#{sep}Port with counts + b-dropdown-item(@click="openSpiGraph('ip.src')") + | Open Src IPv6 SPI Graph ++ +clickableFieldActions('ip.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('port.src', 0)") + | Export Unique Src Port +@@ -244,6 +256,7 @@ dl + | Export Unique Src Port with counts + b-dropdown-item(@click="openSpiGraph('port.src')") + | Open Src Port SPI Graph ++ +clickableFieldActions('port.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('country.src', 0)") + | Export Unique Src Country +@@ -253,6 +266,7 @@ dl + | Open Src Country SPI Graph + b-dropdown-item(@click="fieldExists('country.src', '==')") + | Add Src Country EXISTS! to query ++ +clickableFieldActions('country.src', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('source.as.full', 0)") + | Export Unique Src ASN +@@ -262,6 +276,7 @@ dl + | Open Src ASN SPI Graph + b-dropdown-item(@click="fieldExists('source.as.full', '==')") + | Add Src ASN EXISTS! to query ++ +clickableFieldActions('source.as.full', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('rir.src', 0)") + | Export Unique Src RIR +@@ -271,6 +286,7 @@ dl + | Open Src RIR SPI Graph + b-dropdown-item(@click="fieldExists('rir.src', '==')") + | Add Src RIR EXISTS! to query ++ +clickableFieldActions('rir.src', false) + + dd + +ipPrint(session, session.source.ip, session.source.port, session.source.geo.country_iso_code, session.source.as.full, session.srcRIR, "src") +@@ -287,6 +303,7 @@ dl + | Export Unique Dst IP#{sep}Port with counts + b-dropdown-item(@click="openSpiGraph('ip.dst')") + | Open Dst IPv6 SPI Graph ++ +clickableFieldActions('ip.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('port.dst', 0)") + | Export Unique Dst Port +@@ -294,6 +311,7 @@ dl + | Export Unique Dst Port with counts + b-dropdown-item(@click="openSpiGraph('port.dst')") + | Open Dst Port SPI Graph ++ +clickableFieldActions('port.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('country.dst', 0)") + | Export Unique Dst Country +@@ -303,6 +321,7 @@ dl + | Open Dst Country SPI Graph + b-dropdown-item(@click="fieldExists('country.dst', '==')") + | Add Dst Country EXISTS! to query ++ +clickableFieldActions('country.dst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('destination.as.full', 0)") + | Export Unique Dst ASN +@@ -312,6 +331,7 @@ dl + | Open Dst ASN SPI Graph + b-dropdown-item(@click="fieldExists('destination.as.full', '==')") + | Add Dst ASN EXISTS! to query ++ +clickableFieldActions('destination.as.full', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('rir.dst', 0)") + | Export Unique Dst RIR +@@ -321,6 +341,7 @@ dl + | Open Dst RIR SPI Graph + b-dropdown-item(@click="fieldExists('rir.dst', '==')") + | Add Dst RIR EXISTS! to query ++ +clickableFieldActions('rir.dst', false) + + dd + +ipPrint(session, session.destination.ip, session.destination.port, session.destination.geo.country_iso_code, session.destination.as.full, session.dstRIR, "dst") +@@ -336,6 +357,7 @@ dl + | Open Src Payload8 SPI Graph + b-dropdown-item(@click="fieldExists('payload8.src.hex', '==')") + | Add Src Payload8 EXISTS! to query ++ +clickableFieldActions('payload8.src.hex', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('payload8.dst.hex', 0)") + | Export Unique Dst Payload8 +@@ -345,6 +367,7 @@ dl + | Open Dst Payload8 SPI Graph + b-dropdown-item(@click="fieldExists('payload8.dst.hex', '==')") + | Add Dst Payload8 EXISTS! to query ++ +clickableFieldActions('payload8.dst.hex', false) + + dd + - function isprint(char) { return !( /[\x00-\x08\x0E-\x1F\x80-\xFF]/.test(char)); } +@@ -392,6 +415,7 @@ dl + | Open Socks Dst SPI Graph + b-dropdown-item(@click="fieldExists('ip.socks', '==')") + | Add Socks Dst EXISTS! to query ++ +clickableFieldActions('ip.socks', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('port.socks', 0)") + | Export Unique Socks Port +@@ -401,6 +425,7 @@ dl + | Open Socks Port SPI Graph + b-dropdown-item(@click="fieldExists('port.socks', '==')") + | Add Socks Port EXISTS! to query ++ +clickableFieldActions('port.socks', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('country.socks', 0)") + | Export Unique Socks Country +@@ -410,6 +435,7 @@ dl + | Open Socks Country SPI Graph + b-dropdown-item(@click="fieldExists('country.socks', '==')") + | Add Socks Country EXISTS! to query ++ +clickableFieldActions('country.socks', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('socks.ip', 0)") + | Export Unique Socks ASN +@@ -419,6 +445,7 @@ dl + | Open Socks ASN SPI Graph + b-dropdown-item(@click="fieldExists('socks.ip', '==')") + | Add Socks ASN EXISTS! to query ++ +clickableFieldActions('socks.ip', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('rir.socks', 0)") + | Export Unique Socks RIR +@@ -428,6 +455,7 @@ dl + | Open Socks RIR SPI Graph + b-dropdown-item(@click="fieldExists('rir.socks', '==')") + | Add Socks RIR EXISTS! to query ++ +clickableFieldActions('rir.socks', false) + + dd + +ipPrint(session, session.socks.ip, session.socks.port, session.socks.GEO, session.socks.ASN, session.socks.RIR, "socks") +@@ -442,6 +470,7 @@ dl + | Open Socks Host SPI Graph + b-dropdown-item(@click="fieldExists('host.socks', '==')") + | Add Socks Host EXISTS! to query ++ +clickableFieldActions('host.socks', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('port.socks', 0)") + | Export Unique Socks Port +@@ -451,6 +480,7 @@ dl + | Open Socks Port SPI Graph + b-dropdown-item(@click="fieldExists('port.socks', '==')") + | Add Socks Port EXISTS! to query ++ +clickableFieldActions('port.socks', false) + + dd + +clickableValue('host.socks', session.socks.host) +@@ -477,6 +507,7 @@ dl + | Open SYN SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.syn', '==')") + | Add SYN EXISTS! to query ++ +clickableFieldActions('tcpflags.syn', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.syn-ack', 0)") + | Export Unique SYN-ACK +@@ -486,6 +517,7 @@ dl + | Open SYN-ACK SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.syn-ack', '==')") + | Add SYN-ACK EXISTS! to query ++ +clickableFieldActions('tcpflags.syn-ack', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.ack', 0)") + | Export Unique ACK +@@ -495,6 +527,7 @@ dl + | Open ACK SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.ack', '==')") + | Add ACK EXISTS! to query ++ +clickableFieldActions('tcpflags.ack', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.psh', 0)") + | Export Unique PSH +@@ -504,6 +537,7 @@ dl + | Open PSH SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.psh', '==')") + | Add PSH EXISTS! to query ++ +clickableFieldActions('tcpflags.psh', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.rst', 0)") + | Export Unique RST +@@ -513,6 +547,7 @@ dl + | Open RST SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.rst', '==')") + | Add RST EXISTS! to query ++ +clickableFieldActions('tcpflags.rst', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.fin', 0)") + | Export Unique FIN +@@ -522,6 +557,7 @@ dl + | Open FIN SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.fin', '==')") + | Add FIN EXISTS! to query ++ +clickableFieldActions('tcpflags.fin', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('tcpflags.urg', 0)") + | Export Unique URG +@@ -531,6 +567,7 @@ dl + | Open URG SPI Graph + b-dropdown-item(@click="fieldExists('tcpflags.urg', '==')") + | Add URG EXISTS! to query ++ +clickableFieldActions('tcpflags.urg', false) + dd + strong.medium.ml-1 SYN + +clickableValue('tcpflags.syn', session.tcpflags.syn) +@@ -556,6 +593,7 @@ dl + | Export Unique ICMP Type with counts + b-dropdown-item(@click="fieldExists('icmp.type', '==')") + | Add ICMP Type EXISTS! to query ++ +clickableFieldActions('icmp.type', false) + b-dropdown-divider + b-dropdown-item(@click="exportUnique('icmp.code', 0)") + | Export Unique ICMP Code +@@ -563,6 +601,7 @@ dl + | Export Unique ICMP Code with counts + b-dropdown-item(@click="fieldExists('icmp.code', '==')") + | Add ICMP Code EXISTS! to query ++ +clickableFieldActions('icmp.code', false) + dd + strong.medium.ml-1 Type + +arrayPrint(session.icmp, "type", "icmp.type") +@@ -577,11 +616,13 @@ dl + | Export Unique DSCP Src + b-dropdown-item(@click="exportUnique('dscp.src', 1)") + | Export Unique DSCP Src with counts ++ +clickableFieldActions('dscp.src', false) + if (session.dstDscp) + b-dropdown-item(@click="exportUnique('dscp.dst', 0)") + | Export Unique DSCP Dst + b-dropdown-item(@click="exportUnique('dscp.dst', 1)") + | Export Unique DSCP Dst with counts ++ +clickableFieldActions('dscp.dst', false) + dd + if (session.srcDscp) + strong.medium.ml-1 Src +diff --git a/viewer/vueapp/src/components/sessions/FieldActions.vue b/viewer/vueapp/src/components/sessions/FieldActions.vue +new file mode 100644 +index 00000000..35ca45b7 +--- /dev/null ++++ b/viewer/vueapp/src/components/sessions/FieldActions.vue +@@ -0,0 +1,125 @@ ++ ++ ++ +diff --git a/viewer/vueapp/src/components/sessions/Sessions.vue b/viewer/vueapp/src/components/sessions/Sessions.vue +index 3d3fdb9d..19f4437e 100644 +--- a/viewer/vueapp/src/components/sessions/Sessions.vue ++++ b/viewer/vueapp/src/components/sessions/Sessions.vue +@@ -372,6 +372,11 @@ + @click="pivot(header.dbField, header.exp)"> + Pivot on {{ header.friendlyName }} + ++ ++ + + + + + +@@ -564,6 +574,7 @@ import MolochSessionDetail from './SessionDetail'; + import MolochCollapsible from '../utils/CollapsibleWrapper'; + import MolochVisualizations from '../visualizations/Visualizations'; + import MolochStickySessions from './StickySessions'; ++import FieldActions from './FieldActions'; + // import external + import Sortable from 'sortablejs'; + +@@ -701,7 +712,8 @@ export default { + MolochSessionDetail, + MolochVisualizations, + MolochStickySessions, +- MolochCollapsible ++ MolochCollapsible, ++ FieldActions + }, + data: function () { + return { +@@ -735,6 +747,7 @@ export default { + }, + created: function () { + this.getSessionsConfig(); // IMPORTANT: kicks off the initial search query! ++ ConfigService.getFieldActions(); + + // watch for window resizing and update the info column width + // this is only registered when the user has not set widths for any +diff --git a/viewer/vueapp/src/components/spiview/Spiview.vue b/viewer/vueapp/src/components/spiview/Spiview.vue +index 3b7fe969..0766e231 100644 +--- a/viewer/vueapp/src/components/spiview/Spiview.vue ++++ b/viewer/vueapp/src/components/spiview/Spiview.vue +@@ -273,6 +273,10 @@ + @click="openSpiGraph(field.dbField)"> + Open {{ field.friendlyName }} SPI Graph + ++ + + + +@@ -321,6 +325,10 @@ + @click="pivot(value)"> + Pivot on {{ value.field.friendlyName }} + ++ + + + +@@ -392,6 +400,7 @@ + import Vue from 'vue'; + + import SessionsService from '../sessions/SessionsService'; ++import ConfigService from '../utils/ConfigService'; + import FieldService from '../search/FieldService'; + import UserService from '../users/UserService'; + +@@ -399,6 +408,7 @@ import MolochError from '../utils/Error'; + import MolochSearch from '../search/Search'; + import MolochVisualizations from '../visualizations/Visualizations'; + import MolochCollapsible from '../utils/CollapsibleWrapper'; ++import FieldActions from '../sessions/FieldActions'; + + // import utils + import Utils from '../utils/utils'; +@@ -424,7 +434,8 @@ export default { + MolochError, + MolochSearch, + MolochVisualizations, +- MolochCollapsible ++ MolochCollapsible, ++ FieldActions + }, + data: function () { + return { +@@ -491,6 +502,8 @@ export default { + } else { + this.issueQueries(); + } ++ ++ ConfigService.getFieldActions(); + }, + methods: { + /* exposed page functions ---------------------------------------------- */ +diff --git a/viewer/vueapp/src/components/utils/ConfigService.js b/viewer/vueapp/src/components/utils/ConfigService.js +index ee6dc616..7f200bee 100644 +--- a/viewer/vueapp/src/components/utils/ConfigService.js ++++ b/viewer/vueapp/src/components/utils/ConfigService.js +@@ -5,6 +5,7 @@ let _molochClustersCache; + let getMolochClustersQIP; + let _molochClickablesCache; + let getMolochClickablesQIP; ++let getFieldActionsQIP; + + export default { + /** +@@ -58,7 +59,7 @@ export default { + if (getMolochClickablesQIP) { return getMolochClickablesQIP; } + + getMolochClickablesQIP = new Promise((resolve, reject) => { +- if (_molochClickablesCache) { resolve(_molochClickablesCache); } ++ if (_molochClickablesCache) { return resolve(_molochClickablesCache); } + + Vue.axios.get('api/valueactions') + .then((response) => { +@@ -77,16 +78,49 @@ export default { + } + + _molochClickablesCache = response.data; +- resolve(response.data); ++ return resolve(response.data); + }, (error) => { + getMolochClickablesQIP = undefined; +- reject(error); ++ return reject(error); + }); + }); + + return getMolochClickablesQIP; + }, + ++ /** ++ * Gets the available field actions to add to field dropdown menus ++ * and caches the result (in store) ++ * @returns {Promise} Promise A promise object that signals the completion ++ * or rejection of the request. ++ */ ++ getFieldActions: function () { ++ if (getFieldActionsQIP) { return getFieldActionsQIP; } ++ ++ getFieldActionsQIP = new Promise((resolve, reject) => { ++ const fieldActions = store.getters.getFieldActions; ++ if (fieldActions && Object.keys(fieldActions).length > 0) { ++ return resolve(fieldActions); ++ } ++ ++ Vue.axios.get('api/fieldactions').then((response) => { ++ getFieldActionsQIP = undefined; ++ for (const key in response.data) { ++ const item = response.data[key]; ++ if (item.category !== undefined && !Array.isArray(item.category)) { ++ item.category = item.category.split(','); ++ } ++ } ++ ++ store.commit('setFieldActions', response.data); ++ return resolve(response.data); ++ }).catch((error) => { ++ getFieldActionsQIP = undefined; ++ return reject(error); ++ }); ++ }); ++ }, ++ + /** + * Cancels any es tasks whose X-Opaque-Id equal this cancel id + * @param {string} cancelId The X-Opaque-Id set for the es tasks to cancel +diff --git a/viewer/vueapp/src/store.js b/viewer/vueapp/src/store.js +index 60b24452..f900265d 100644 +--- a/viewer/vueapp/src/store.js ++++ b/viewer/vueapp/src/store.js +@@ -49,7 +49,8 @@ const store = new Vuex.Store({ + sortsParam: 'firstPacket:desc', + stickySessionsBtn: false, + showCapStartTimes: true, +- capStartTimes: [{ nodeName: 'none', startTime: 1 }] ++ capStartTimes: [{ nodeName: 'none', startTime: 1 }], ++ fieldActions: {} + }, + getters: { + sessionsTableState (state) { +@@ -57,6 +58,9 @@ const store = new Vuex.Store({ + state.sessionsTableState = Utils.getDefaultTableState(); + } + return state.sessionsTableState; ++ }, ++ getFieldActions (state) { ++ return state.fieldActions; + } + }, + mutations: { +@@ -238,6 +242,9 @@ const store = new Vuex.Store({ + state.fieldsAliasMap[alias] = field; + }); + } ++ }, ++ setFieldActions (state, value) { ++ state.fieldActions = value; + } + } + }); +diff --git a/wiseService/source.fieldactions.js b/wiseService/source.fieldactions.js +new file mode 100644 +index 00000000..8851535b +--- /dev/null ++++ b/wiseService/source.fieldactions.js +@@ -0,0 +1,273 @@ ++/******************************************************************************/ ++/* ++ * ++ * Copyright 2012-2016 AOL Inc. All rights reserved. ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this Software except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++'use strict'; ++ ++const fs = require('fs'); ++const WISESource = require('./wiseSource.js'); ++const ini = require('iniparser'); ++const axios = require('axios'); ++const ArkimeUtil = require('../common/arkimeUtil'); ++ ++class FieldActionsSource extends WISESource { ++ // ---------------------------------------------------------------------------- ++ constructor (api, section) { ++ super(api, section, { }); ++ ++ if (section === 'right-click') { ++ this.process(api.getConfigSection(section)); ++ return; ++ } ++ ++ this.url = api.getConfig(section, 'url', api.getConfig(section, 'file')); ++ ++ if (this.url === undefined) { ++ console.log(this.section, '- ERROR not loading', this.section, 'since no url specified in config file'); ++ return; ++ } ++ ++ if (this.url.startsWith('file:///')) { ++ this.url = this.url.substring(7); ++ } ++ ++ if (this.url[0] === '/' || this.url.startsWith('./') || this.url.startsWith('../')) { ++ if (!fs.existsSync(this.url)) { ++ console.log(this.section, '- ERROR not loading', this.section, 'since', this.url, "doesn't exist"); ++ return; ++ } ++ this.load = this.loadFile; ++ this.getSourceRaw = this.getSourceRawFile; ++ this.putSourceRaw = this.putSourceRawFile; ++ } else if (this.url.startsWith('elasticsearch://') || this.url.startsWith('elasticsearchs://')) { ++ this.url = this.url.replace('elasticsearch', 'http'); ++ if (!this.url.includes('/_doc/')) { ++ throw new Error('Missing _doc in url, should be format elasticsearch://user:pass@host:port/INDEX/_doc/DOC'); ++ } ++ this.load = this.loadES; ++ this.getSourceRaw = this.getSourceRawES; ++ this.putSourceRaw = this.putSourceRawES; ++ } else if (this.url.startsWith('redis')) { ++ this.load = this.loadRedis; ++ this.getSourceRaw = this.getSourceRawRedis; ++ this.putSourceRaw = this.putSourceRawRedis; ++ const redisParts = this.url.split('/'); ++ if (redisParts.length !== 5) { ++ throw new Error(`Invalid redis url - ${redisParts[0]}//[:pass@]redishost[:redisport]/redisDbNum/key`); ++ } ++ this.key = redisParts.pop(); ++ this.client = ArkimeUtil.createRedisClient(redisParts.join('/'), section); ++ } else { ++ console.log(this.section, '- ERROR not loading', this.section, 'don\'t know how to open', this.url); ++ return; ++ } ++ ++ this.api.addSource(section, this, []); ++ ++ setImmediate(this.load.bind(this)); ++ ++ if (this.url[0] === '/' || this.url.startsWith('../')) { ++ this.watchFile(); ++ } else { ++ setInterval(this.load.bind(this), 5 * 1000 * 60); ++ } ++ } ++ ++ // ---------------------------------------------------------------------------- ++ process (data) { ++ const keys = Object.keys(data); ++ if (!keys) { return; } ++ ++ keys.forEach((key) => { ++ const obj = {}; ++ data[key].split(';').forEach((element) => { ++ const i = element.indexOf(':'); ++ if (i === -1) { ++ return; ++ } ++ ++ const parts = [element.slice(0, i), element.slice(i + 1)]; ++ if (parts[1] === 'true') { ++ parts[1] = true; ++ } else if (parts[1] === 'false') { ++ parts[1] = false; ++ } ++ obj[parts[0]] = parts[1]; ++ }); ++ if (obj.fields) { ++ obj.fields = obj.fields.split(',').map(item => item.trim()); ++ } ++ if (obj.users) { ++ const users = {}; ++ obj.users.split(',').map(item => item.trim()).forEach((item) => { ++ users[item] = 1; ++ }); ++ obj.users = users; ++ } ++ if (obj.notUsers) { ++ const users = {}; ++ obj.notUsers.split(',').map(item => item.trim()).forEach((item) => { ++ users[item] = 1; ++ }); ++ obj.notUsers = users; ++ } ++ this.api.addFieldAction(key, obj); ++ }); ++ }; ++ ++ // ---------------------------------------------------------------------------- ++ watchFile () { ++ // Watch file for changes, combine multiple changes into one, on move restart watch after a pause ++ this.watchTimeout = null; ++ const watchCb = (e, filename) => { ++ clearTimeout(this.watchTimeout); ++ if (e === 'rename') { ++ this.watch.close(); ++ setTimeout(() => { ++ this.load(); ++ this.watch = fs.watch(this.url, watchCb); ++ }, 500); ++ } else { ++ this.watchTimeout = setTimeout(() => { ++ this.watchTimeout = null; ++ this.load(); ++ }, 2000); ++ } ++ }; ++ this.watch = fs.watch(this.url, watchCb); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ loadFile () { ++ if (!fs.existsSync(this.url)) { ++ console.log(this.section, '- ERROR not loading', this.section, 'since', this.url, "doesn't exist"); ++ return; ++ } ++ ++ const config = ini.parseSync(this.url); ++ const data = config.fieldactions || config; ++ ++ this.process(data); ++ }; ++ ++ // ---------------------------------------------------------------------------- ++ getSourceRawFile (cb) { ++ fs.readFile(this.url, (err, body) => { ++ if (err) { ++ return cb(err); ++ } ++ return cb(null, body); ++ }); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ putSourceRawFile (body, cb) { ++ fs.writeFile(this.url, body, (err) => { ++ this.process(ini.parseString(body)); ++ return cb(err); ++ }); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ loadRedis () { ++ if (this.client && this.key) { ++ this.client.get(this.key, (err, data) => { ++ if (err) { ++ console.log(this.section, '- ERROR', err); ++ return; ++ } ++ if (data === null) { data = ''; } ++ this.process(ini.parseString(data)); ++ }); ++ } ++ }; ++ ++ // ---------------------------------------------------------------------------- ++ getSourceRawRedis (cb) { ++ this.client.get(this.key, cb); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ putSourceRawRedis (file, cb) { ++ this.client.set(this.key, file, (err) => { ++ this.load(); ++ cb(err); ++ }); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ loadES () { ++ axios.get(this.url) ++ .then((response) => { ++ return this.process(ini.parseString(response.data._source.ini || '')); ++ }) ++ .catch((error) => { ++ if (error.response && error.response.status === 404) { ++ return this.process({}); ++ } ++ console.log(this.section, '- ERROR', error); ++ }); ++ }; ++ ++ // ---------------------------------------------------------------------------- ++ getSourceRawES (cb) { ++ axios.get(this.url) ++ .then((response) => { ++ cb(null, response.data._source.ini || ''); ++ }) ++ .catch((error) => { ++ if (error.response && error.response.status === 404) { ++ return cb(null, ''); ++ } ++ return cb(error); ++ }); ++ } ++ ++ // ---------------------------------------------------------------------------- ++ putSourceRawES (file, cb) { ++ axios.post(this.url, JSON.stringify({ ini: file }), { headers: { 'Content-Type': 'application/json' } }) ++ .then((response) => { ++ this.process(ini.parseString(file)); ++ cb(null); ++ }) ++ .catch((error) => { ++ cb(error); ++ }); ++ } ++} ++ ++// ---------------------------------------------------------------------------- ++exports.initSource = function (api) { ++ api.addSourceConfigDef('fieldactions', { ++ singleton: false, ++ name: 'fieldactions', ++ description: "This source monitors configured files, redis or elasticsearch for field actions to send to all the viewer instances that connect to this WISE Server. It isn't really a source in the true WISE sense, but makes it easy to edit.", ++ link: 'https://arkime.com/wise#fieldactions', ++ cacheable: false, ++ editable: true, ++ types: [], // This is a fake source, no types ++ format: 'valueactions', // Which vueapp editor to use ++ fields: [ ++ { name: 'url', required: true, help: 'The file to load, can be a file path, redis url (Format is redis://[:password@]host:port/db-number/key, redis-sentinel://[[sentinelPassword]:[password]@]host[:port]/redis-name/db-number/key, or redis-cluster://[:password@]host:port/db-number/key), or elasticsearch url (elasticsearch://host:9200/INDEX/_doc/DOCNAME)' } ++ ] ++ }); ++ ++ const sections = api.getConfigSections().filter((e) => { return e.match(/^(right-click$|right-click:|fieldactions:)/); }); ++ sections.forEach((section) => { ++ return new FieldActionsSource(api, section); ++ }); ++}; ++// ---------------------------------------------------------------------------- +diff --git a/wiseService/wiseService.js b/wiseService/wiseService.js +index 2f625e66..fe0e843c 100644 +--- a/wiseService/wiseService.js ++++ b/wiseService/wiseService.js +@@ -93,6 +93,7 @@ const internals = { + types: { + }, + views: {}, ++ fieldActions: {}, + valueActions: {}, + workers: 1, + regressionTests: false, +@@ -610,6 +611,15 @@ class WISESourceAPI { + internals.valueActions[actionName] = action; + } + ++ /** ++ * Add a field action set ++ * @params {string} actionName - The globally unique name of this action, not shown to user ++ * @params {WISESourceAPI~ValueAction} action - The action ++ */ ++ addFieldAction (actionName, action) { ++ internals.fieldActions[actionName] = action; ++ } ++ + isWebConfig () { + return internals.webconfig; + } +@@ -739,6 +749,16 @@ app.get('/views', [ArkimeUtil.noCacheJson], function (req, res) { + app.get(['/rightClicks', '/valueActions'], [ArkimeUtil.noCacheJson], function (req, res) { + res.send(internals.valueActions); + }); ++// ---------------------------------------------------------------------------- ++/** ++ * GET - Used by viewer to retrieve all the field actions created by wise sources ++ * ++ * @name "/fieldActions" ++ * @returns {object|array} All the field actions ++ */ ++app.get('/fieldActions', [ArkimeUtil.noCacheJson], function (req, res) { ++ res.send(internals.fieldActions); ++}); + + // ---------------------------------------------------------------------------- + function globalAllowed (value) { diff --git a/arkime/wise/source.zeeklogs.js b/arkime/wise/source.zeeklogs.js index e58b9c71c..477f9347d 100644 --- a/arkime/wise/source.zeeklogs.js +++ b/arkime/wise/source.zeeklogs.js @@ -29,7 +29,7 @@ class MalcolmSource extends WISESource { // todo: look at expressions for things that have parents (tunnelling, parent files, etc.) // todo: look at IP types and use ipPrint? - // add right-clicks + // add field actions and value actions var allFields = [ "client.bytes", "client.domain", @@ -1693,42 +1693,42 @@ class MalcolmSource extends WISESource { var protoFieldsStr = allFields.filter(value => /^(network\.transport|ip\.protocol)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_proto", { name: "Protocol Registry", url: 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml', fields: protoFieldsStr }); - // add right-click for searching IANA for services + // add value action for searching IANA for services var serviceFieldsStr = allFields.filter(value => /^(protocols?|network\.protocol)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_service", { name: "Service Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', fields: serviceFieldsStr }); - // add right-click for searching VirusTotal for other IP addresses + // add value action for searching VirusTotal for other IP addresses var ipFieldsStr = allFields.filter(value => /[_\.-](h|ip)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_ip", { name: "VirusTotal IP", url: "https://www.virustotal.com/en/ip-address/%TEXT%/information", fields: ipFieldsStr }); - // add right-click for searching IANA for ports + // add value action for searching IANA for ports var portFieldsStr = allFields.filter(value => /(^|src|dst|source|dest|destination|[\b_\.-])p(ort)?s?$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_port", { name: "Port Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', fields: portFieldsStr }); this.api.addValueAction("malcolm_websearch_port_arkime", { name: "Port Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', category: "port" }); - // add right-click for searching VirusTotal for hash signatures + // add value action for searching VirusTotal for hash signatures var hashFieldsStr = allFields.filter(value => /(^|[\b_\.-])(md5|sha(1|256|384|512))\b/i.test(value)).join(','); this.api.addValueAction("malcolm_vt_fields_hash", { name: "VirusTotal Hash", url: "https://www.virustotal.com/gui/file/%TEXT%/detection", fields: hashFieldsStr }); this.api.addValueAction("malcolm_vt_fields_hash_arkime", { name: "VirusTotal Hash", url: "https://www.virustotal.com/gui/file/%TEXT%/detection", category: "md5" }); - // add right-click for searching the web for signature IDs + // add value action for searching the web for signature IDs var sigFieldsStr = allFields.filter(value => /(^|[\b_\.-])(hit|signature(_?id))?s?$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_sig", { name: "Web Search", url: 'https://duckduckgo.com/?q="%TEXT%"', fields: sigFieldsStr }); - // add right-click for searching ARIN for ASN + // add value action for searching ARIN for ASN var asnFieldsStr = allFields.filter(value => /(as\.number|(src|dst)ASN|asn\.(src|dst))$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_asn", { name: "ARIN ASN", url: 'https://search.arin.net/rdap/?query=%TEXT%&searchFilter=asn', fields: asnFieldsStr }); - // add right-click for searching mime/media/content types + // add value action for searching mime/media/content types var mimeFieldsStr = allFields.filter(value => /mime[_\.-]?type/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_mime", { name: "Media Type Registry", url: 'https://www.iana.org/assignments/media-types/%TEXT%', fields: mimeFieldsStr }); - // add right-click for extracted/quarantined files from zeek + // add value action for extracted/quarantined files from zeek var carvedFieldsStr = allFields.filter(value => /^zeek\.files\.extracted$/i.test(value)).join(','); this.api.addValueAction("malcolm_carved_file_quarantined", { name: "Download (if quarantined)", url: "/dl-extracted-files/quarantine/%TEXT%", fields: carvedFieldsStr }); this.api.addValueAction("malcolm_carved_file_preserved", { name: "Download (if preserved)", url: "/dl-extracted-files/preserved/%TEXT%", fields: carvedFieldsStr }); - // add right-clicks for pivoting into dashboards from Arkime (see nginx.conf) + // add value actions for pivoting into dashboards from Arkime (see nginx.conf) var filterLabel = "OpenSearch Dashboards %DBFIELD%"; var filterUrl = "idark2dash/filter?start=%ISOSTART%&stop=%ISOSTOP%&field=%DBFIELD%&value=%TEXT%"; @@ -1740,18 +1740,18 @@ class MalcolmSource extends WISESource { this.api.addValueAction("malcolm_dashboards_cat_user", { name: filterLabel, url: filterUrl, category: "user" }); this.api.addValueAction("malcolm_dashboards_fields_zeek", { name: filterLabel, url: filterUrl, fields: allFieldsStr }); - // add rick-click for opening malcolm agg api + // add field action for opening malcolm agg api var apiLabel = "Aggregate %DBFIELD%"; var apiURL = "mapi/agg/%DBFIELD%?from=%ISOSTART%&to=%ISOSTOP%"; - this.api.addValueAction("malcolm_mapi_cat_ip", { name: apiLabel, url: apiURL, category: "ip" }); - this.api.addValueAction("malcolm_mapi_cat_port", { name: apiLabel, url: apiURL, category: "port" }); - this.api.addValueAction("malcolm_mapi_cat_country", { name: apiLabel, url: apiURL, category: "country" }); - this.api.addValueAction("malcolm_mapi_cat_host", { name: apiLabel, url: apiURL, category: "host" }); - this.api.addValueAction("malcolm_mapi_cat_md5", { name: apiLabel, url: apiURL, category: "md5" }); - this.api.addValueAction("malcolm_mapi_cat_user", { name: apiLabel, url: apiURL, category: "user" }); - this.api.addValueAction("malcolm_mapi_fields_zeek", { name: apiLabel, url: apiURL, fields: allFieldsStr }); + this.api.addFieldAction("malcolm_mapi_cat_ip", { name: apiLabel, url: apiURL, category: "ip" }); + this.api.addFieldAction("malcolm_mapi_cat_port", { name: apiLabel, url: apiURL, category: "port" }); + this.api.addFieldAction("malcolm_mapi_cat_country", { name: apiLabel, url: apiURL, category: "country" }); + this.api.addFieldAction("malcolm_mapi_cat_host", { name: apiLabel, url: apiURL, category: "host" }); + this.api.addFieldAction("malcolm_mapi_cat_md5", { name: apiLabel, url: apiURL, category: "md5" }); + this.api.addFieldAction("malcolm_mapi_cat_user", { name: apiLabel, url: apiURL, category: "user" }); + this.api.addFieldAction("malcolm_mapi_fields_zeek", { name: apiLabel, url: apiURL, fields: allFieldsStr }); - // add right-click for viewing original JSON document + // add value action for viewing original JSON document this.api.addValueAction("malcolm_json_source", { name: "%DBFIELD% Document(s) JSON", url: "mapi/document?filter={\"%DBFIELD%\":\"%TEXT%\"}", fields: "communityId,event.id,id,network.community_id,rootId,zeek.fuid,zeek.uid" }); this.api.addView("malcolm_common", From a5808aea6f1f61f5807f60d8add8c52781e7d946 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 25 May 2022 15:40:04 -0600 Subject: [PATCH 006/122] Revert "arkime field actions" This reverts commit d2eeb9255e3cd00dce05407ba6c054de131fc29b. --- arkime/patch/field_actions.patch | 1210 ------------------------------ arkime/wise/source.zeeklogs.js | 38 +- 2 files changed, 19 insertions(+), 1229 deletions(-) delete mode 100644 arkime/patch/field_actions.patch diff --git a/arkime/patch/field_actions.patch b/arkime/patch/field_actions.patch deleted file mode 100644 index 235598b0b..000000000 --- a/arkime/patch/field_actions.patch +++ /dev/null @@ -1,1210 +0,0 @@ -diff --git a/CHANGELOG b/CHANGELOG -index 96145ded..8dc406d6 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -23,6 +23,10 @@ Node Versions: - NOTICE: Restart wiseService before capture when upgrading - NOTICE: Cross-cluster Shortcuts require you to not restart all your viewers at once after upgrading - -+4.0.0 2022/04/xx -+ - capture - New ecsEventDatset setting -+ - viewer - field-actions to display configurable menu items on field labels -+ - 3.4.2 2022/03/31 - - release - node 16.14.2 - - viewer - Packets/s, Sessions/s, Dropped/s didn't have correct total/average -diff --git a/capture/plugins/wise.js b/capture/plugins/wise.js -index 02e71ce4..03ac9949 100644 ---- a/capture/plugins/wise.js -+++ b/capture/plugins/wise.js -@@ -51,7 +51,29 @@ exports.init = function (Config, emitter) { - }); - - emitter.on('makeRightClick', function (cb) { -- const url = baseURL + '/rightClicks'; -+ const url = baseURL + '/valueActions'; -+ const req = client.request(url, function (res) { -+ let body = ''; -+ res.on('data', function (chunk) { -+ body += chunk; -+ }); -+ res.on('end', function () { -+ if (res.statusCode !== 200) { -+ return cb(null, {}); -+ } -+ const result = JSON.parse(body); -+ return cb(null, result); -+ }); -+ }); -+ req.on('error', function (err) { -+ console.log('WISE Right Click ERROR', err); -+ return cb(err, {}); -+ }); -+ req.end(); -+ }); -+ -+ emitter.on('makeFieldActions', function (cb) { -+ const url = baseURL + '/fieldActions'; - const req = client.request(url, function (res) { - let body = ''; - res.on('data', function (chunk) { -diff --git a/tests/config.test.ini b/tests/config.test.ini -index 65dd4bf7..a0332e52 100644 ---- a/tests/config.test.ini -+++ b/tests/config.test.ini -@@ -287,12 +287,11 @@ format=tagger - #type=domain - #reload=60 - --[right-click] -+[value-actions] - VTIP=url:https://www.virustotal.com/en/ip-address/%TEXT%/information/;name:Virus Total IP;category:ip - VTHOST=url:https://www.virustotal.com/en/domain/%HOST%/information/;name:Virus Total Host;category:host - VTURL=url:https://www.virustotal.com/latest-scan/%URL%;name:Virus Total URL;category:url - -- - [custom-fields] - iscool=kind:termfield;count:true;friendly:Is cool;db:iscool;help:Is Cool String - sample.md5=db:sample.md5;kind:lotermfield;friendly:Sample MD5;count:true;help:MD5 of the sample -diff --git a/viewer/apiMisc.js b/viewer/apiMisc.js -index 9d3c4a5f..cf255236 100644 ---- a/viewer/apiMisc.js -+++ b/viewer/apiMisc.js -@@ -220,6 +220,35 @@ module.exports = (Config, Db, internals, sessionAPIs, userAPIs, ViewerUtils) => - return res.send(actions); - }; - -+ /** -+ * GET - /api/fieldactions -+ * -+ * Retrives the actions that can be preformed on fields. -+ * @name /fieldactions -+ * @returns {object} - The list of actions that can be preformed on fields. -+ */ -+ miscAPIs.getFieldActions = (req, res) => { -+ if (!req.user || !req.user.userId) { -+ return res.send({}); -+ } -+ -+ const actions = {}; -+ -+ for (const key in internals.fieldActions) { -+ const action = internals.fieldActions[key]; -+ if (action.notUsers && action.notUsers[req.user.userId]) { -+ continue; -+ } -+ if (!action.users || action.users[req.user.userId]) { -+ actions[key] = action; -+ } -+ -+ delete actions[key].users; -+ } -+ -+ return res.send(actions); -+ }; -+ - // reverse dns apis --------------------------------------------------------- - /** - * GET - /api/reversedns -diff --git a/viewer/internals.js b/viewer/internals.js -index 76850978..260ae1d1 100644 ---- a/viewer/internals.js -+++ b/viewer/internals.js -@@ -25,6 +25,7 @@ module.exports = (app, Config) => { - caTrustCerts: {}, - cronRunning: false, - rightClicks: {}, -+ fieldActions: {}, - pluginEmitter: new EventEmitter(), - writers: {}, - oldDBFields: {}, -diff --git a/viewer/viewer.js b/viewer/viewer.js -index 9ae6e92e..34c7605c 100755 ---- a/viewer/viewer.js -+++ b/viewer/viewer.js -@@ -398,8 +398,8 @@ function createSessionDetail () { - }); - } - --function createRightClicks () { -- const mrc = Config.configMap('right-click'); -+function createActions (configKey, emitter, internalsKey) { -+ const mrc = Config.configMap(configKey); - for (const key in mrc) { - if (mrc[key].fields) { - mrc[key].fields = mrc[key].fields.split(','); -@@ -412,7 +412,7 @@ function createRightClicks () { - mrc[key].users = users; - } - } -- const makers = internals.pluginEmitter.listeners('makeRightClick'); -+ const makers = internals.pluginEmitter.listeners(emitter); - async.each(makers, function (cb, nextCb) { - cb(function (err, items) { - for (const k in items) { -@@ -424,7 +424,7 @@ function createRightClicks () { - return nextCb(); - }); - }, function () { -- internals.rightClicks = mrc; -+ internals[internalsKey] = mrc; - }); - } - -@@ -1945,13 +1945,19 @@ app.get( // titleconfig endpoint - miscAPIs.getPageTitle - ); - --// value actions apis --------------------------------------------------------- -+// menu actions apis --------------------------------------------------------- - app.get( // value actions endpoint - ['/api/valueactions', '/api/valueActions', '/molochRightClick'], - [ArkimeUtil.noCacheJson, checkPermissions(['webEnabled'])], - miscAPIs.getValueActions - ); - -+app.get( // field actions endpoint -+ ['/api/fieldactions', '/api/fieldActions'], -+ [ArkimeUtil.noCacheJson, User.checkPermissions(['webEnabled'])], -+ miscAPIs.getFieldActions -+); -+ - // reverse dns apis ----------------------------------------------------------- - app.get( // reverse dns endpoint - ['/api/reversedns', '/reverseDNS.txt'], -@@ -2413,8 +2419,10 @@ async function main () { - setInterval(expireCheckAll, 60 * 1000); - } - -- createRightClicks(); -- setInterval(createRightClicks, 150 * 1000); // Check every 2.5 minutes -+ createActions('value-actions', 'makeRightClick', 'rightClick'); -+ setInterval(() => createActions('value-actions', 'makeRightClick', 'rightClick'), 150 * 1000); // Check every 2.5 minutes -+ createActions('field-actions', 'makeFieldActions', 'fieldActions'); -+ setInterval(() => createActions('field-actions', 'makeFieldActions', 'fieldActions'), 150 * 1000); // Check every 2.5 minutes - - if (Config.get('cronQueries', false)) { // this viewer will process the cron queries - console.log('This node will process Periodic Queries, delayed by', internals.cronTimeout, 'seconds'); -diff --git a/viewer/views/mixins.pug b/viewer/views/mixins.pug -index 81b3ac9e..8c47be68 100644 ---- a/viewer/views/mixins.pug -+++ b/viewer/views/mixins.pug -@@ -20,6 +20,11 @@ mixin clickableLabel(field, title) - | Toggle #{title} in Info column - b-dropdown-item(@click="fieldExists('" + field + "', '==')") - | Add #{title} EXISTS! to query -+ +clickableFieldActions(field, true) -+ -+//- Display a clickable field action in the field menu -+mixin clickableFieldActions(fieldExpr, sep) -+ field-actions(:expr=`'${fieldExpr}'`, :separator=`${sep}`) - - mixin arrayPrint(container, field, expr) - if ((container && container[field])) -diff --git a/viewer/views/sessionDetail.pug b/viewer/views/sessionDetail.pug -index 7a97fde7..66285f8a 100644 ---- a/viewer/views/sessionDetail.pug -+++ b/viewer/views/sessionDetail.pug -@@ -97,6 +97,7 @@ dl - | Open Src Packets SPI Graph - b-dropdown-item(@click="fieldExists('packets.src', '==')") - | Add Src Packets EXISTS! to query -+ +clickableFieldActions('packets.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('bytes.src', 0)") - | Export Unique Src Bytes -@@ -106,6 +107,7 @@ dl - | Open Src Bytes SPI Graph - b-dropdown-item(@click="fieldExists('bytes.src', '==')") - | Add Src Bytes EXISTS! to query -+ +clickableFieldActions('bytes.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('databytes.src', 0)") - | Export Unique Src Databytes -@@ -115,6 +117,7 @@ dl - | Open Src Databytes SPI Graph - b-dropdown-item(@click="fieldExists('databytes.src', '==')") - | Add Src Databytes EXISTS! to query -+ +clickableFieldActions('databytes.src', false) - dd - strong.medium.ml-1 Packets - +clickableValue('packets.src', session.source.packets) -@@ -133,6 +136,7 @@ dl - | Open Dst Packets SPI Graph - b-dropdown-item(@click="fieldExists('packets.dst', '==')") - | Add Dst Packets EXISTS! to query -+ +clickableFieldActions('packets.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('bytes.dst', 0)") - | Export Unique Dst Bytes -@@ -142,6 +146,7 @@ dl - | Open Dst Bytes SPI Graph - b-dropdown-item(@click="fieldExists('bytes.dst', '==')") - | Add Dst Bytes EXISTS! to query -+ +clickableFieldActions('bytes.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('databytes.dst', 0)") - | Export Unique Dst Databytes -@@ -151,6 +156,7 @@ dl - | Open Dst Databytes SPI Graph - b-dropdown-item(@click="fieldExists('databytes.dst', '==')") - | Add Dst Databytes EXISTS! to query -+ +clickableFieldActions('databytes.dst', false) - dd - strong.medium.ml-1 Packets - +clickableValue('packets.dst', session.destination.packets) -@@ -170,6 +176,7 @@ dl - | Open Src Mac SPI Graph - b-dropdown-item(@click="fieldExists('mac.src', '==')") - | Add Src Mac EXISTS! to query -+ +clickableFieldActions('mac.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('oui.src', 0)") - | Export Unique Src OUI -@@ -179,6 +186,7 @@ dl - | Open Src OUI SPI Graph - b-dropdown-item(@click="fieldExists('oui.src', '==')") - | Add Src OUI EXISTS! to query -+ +clickableFieldActions('oui.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('mac.dst', 0)") - | Export Unique Dst Mac -@@ -188,6 +196,7 @@ dl - | Open Dst Mac SPI Graph - b-dropdown-item(@click="fieldExists('mac.dst', '==')") - | Add Dst Mac EXISTS! to query -+ +clickableFieldActions('mac.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('oui.dst', 0)") - | Export Unique Dst OUI -@@ -197,6 +206,7 @@ dl - | Open Dst OUI SPI Graph - b-dropdown-item(@click="fieldExists('oui.dst', '==')") - | Add Dst OUI EXISTS! to query -+ +clickableFieldActions('oui.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('vlan', 0)") - | Export Unique VLan -@@ -206,6 +216,7 @@ dl - | Open VLan SPI Graph - b-dropdown-item(@click="fieldExists('vlan', '==')") - | Add VLAN EXISTS! to query -+ +clickableFieldActions('vlan', false) - dd - strong.medium.ml-1 Src Mac - +arrayPrint(session.source, "mac", "mac.src", true) -@@ -237,6 +248,7 @@ dl - | Export Unique Src IP#{sep}Port with counts - b-dropdown-item(@click="openSpiGraph('ip.src')") - | Open Src IPv6 SPI Graph -+ +clickableFieldActions('ip.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('port.src', 0)") - | Export Unique Src Port -@@ -244,6 +256,7 @@ dl - | Export Unique Src Port with counts - b-dropdown-item(@click="openSpiGraph('port.src')") - | Open Src Port SPI Graph -+ +clickableFieldActions('port.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('country.src', 0)") - | Export Unique Src Country -@@ -253,6 +266,7 @@ dl - | Open Src Country SPI Graph - b-dropdown-item(@click="fieldExists('country.src', '==')") - | Add Src Country EXISTS! to query -+ +clickableFieldActions('country.src', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('source.as.full', 0)") - | Export Unique Src ASN -@@ -262,6 +276,7 @@ dl - | Open Src ASN SPI Graph - b-dropdown-item(@click="fieldExists('source.as.full', '==')") - | Add Src ASN EXISTS! to query -+ +clickableFieldActions('source.as.full', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('rir.src', 0)") - | Export Unique Src RIR -@@ -271,6 +286,7 @@ dl - | Open Src RIR SPI Graph - b-dropdown-item(@click="fieldExists('rir.src', '==')") - | Add Src RIR EXISTS! to query -+ +clickableFieldActions('rir.src', false) - - dd - +ipPrint(session, session.source.ip, session.source.port, session.source.geo.country_iso_code, session.source.as.full, session.srcRIR, "src") -@@ -287,6 +303,7 @@ dl - | Export Unique Dst IP#{sep}Port with counts - b-dropdown-item(@click="openSpiGraph('ip.dst')") - | Open Dst IPv6 SPI Graph -+ +clickableFieldActions('ip.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('port.dst', 0)") - | Export Unique Dst Port -@@ -294,6 +311,7 @@ dl - | Export Unique Dst Port with counts - b-dropdown-item(@click="openSpiGraph('port.dst')") - | Open Dst Port SPI Graph -+ +clickableFieldActions('port.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('country.dst', 0)") - | Export Unique Dst Country -@@ -303,6 +321,7 @@ dl - | Open Dst Country SPI Graph - b-dropdown-item(@click="fieldExists('country.dst', '==')") - | Add Dst Country EXISTS! to query -+ +clickableFieldActions('country.dst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('destination.as.full', 0)") - | Export Unique Dst ASN -@@ -312,6 +331,7 @@ dl - | Open Dst ASN SPI Graph - b-dropdown-item(@click="fieldExists('destination.as.full', '==')") - | Add Dst ASN EXISTS! to query -+ +clickableFieldActions('destination.as.full', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('rir.dst', 0)") - | Export Unique Dst RIR -@@ -321,6 +341,7 @@ dl - | Open Dst RIR SPI Graph - b-dropdown-item(@click="fieldExists('rir.dst', '==')") - | Add Dst RIR EXISTS! to query -+ +clickableFieldActions('rir.dst', false) - - dd - +ipPrint(session, session.destination.ip, session.destination.port, session.destination.geo.country_iso_code, session.destination.as.full, session.dstRIR, "dst") -@@ -336,6 +357,7 @@ dl - | Open Src Payload8 SPI Graph - b-dropdown-item(@click="fieldExists('payload8.src.hex', '==')") - | Add Src Payload8 EXISTS! to query -+ +clickableFieldActions('payload8.src.hex', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('payload8.dst.hex', 0)") - | Export Unique Dst Payload8 -@@ -345,6 +367,7 @@ dl - | Open Dst Payload8 SPI Graph - b-dropdown-item(@click="fieldExists('payload8.dst.hex', '==')") - | Add Dst Payload8 EXISTS! to query -+ +clickableFieldActions('payload8.dst.hex', false) - - dd - - function isprint(char) { return !( /[\x00-\x08\x0E-\x1F\x80-\xFF]/.test(char)); } -@@ -392,6 +415,7 @@ dl - | Open Socks Dst SPI Graph - b-dropdown-item(@click="fieldExists('ip.socks', '==')") - | Add Socks Dst EXISTS! to query -+ +clickableFieldActions('ip.socks', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('port.socks', 0)") - | Export Unique Socks Port -@@ -401,6 +425,7 @@ dl - | Open Socks Port SPI Graph - b-dropdown-item(@click="fieldExists('port.socks', '==')") - | Add Socks Port EXISTS! to query -+ +clickableFieldActions('port.socks', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('country.socks', 0)") - | Export Unique Socks Country -@@ -410,6 +435,7 @@ dl - | Open Socks Country SPI Graph - b-dropdown-item(@click="fieldExists('country.socks', '==')") - | Add Socks Country EXISTS! to query -+ +clickableFieldActions('country.socks', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('socks.ip', 0)") - | Export Unique Socks ASN -@@ -419,6 +445,7 @@ dl - | Open Socks ASN SPI Graph - b-dropdown-item(@click="fieldExists('socks.ip', '==')") - | Add Socks ASN EXISTS! to query -+ +clickableFieldActions('socks.ip', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('rir.socks', 0)") - | Export Unique Socks RIR -@@ -428,6 +455,7 @@ dl - | Open Socks RIR SPI Graph - b-dropdown-item(@click="fieldExists('rir.socks', '==')") - | Add Socks RIR EXISTS! to query -+ +clickableFieldActions('rir.socks', false) - - dd - +ipPrint(session, session.socks.ip, session.socks.port, session.socks.GEO, session.socks.ASN, session.socks.RIR, "socks") -@@ -442,6 +470,7 @@ dl - | Open Socks Host SPI Graph - b-dropdown-item(@click="fieldExists('host.socks', '==')") - | Add Socks Host EXISTS! to query -+ +clickableFieldActions('host.socks', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('port.socks', 0)") - | Export Unique Socks Port -@@ -451,6 +480,7 @@ dl - | Open Socks Port SPI Graph - b-dropdown-item(@click="fieldExists('port.socks', '==')") - | Add Socks Port EXISTS! to query -+ +clickableFieldActions('port.socks', false) - - dd - +clickableValue('host.socks', session.socks.host) -@@ -477,6 +507,7 @@ dl - | Open SYN SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.syn', '==')") - | Add SYN EXISTS! to query -+ +clickableFieldActions('tcpflags.syn', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.syn-ack', 0)") - | Export Unique SYN-ACK -@@ -486,6 +517,7 @@ dl - | Open SYN-ACK SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.syn-ack', '==')") - | Add SYN-ACK EXISTS! to query -+ +clickableFieldActions('tcpflags.syn-ack', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.ack', 0)") - | Export Unique ACK -@@ -495,6 +527,7 @@ dl - | Open ACK SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.ack', '==')") - | Add ACK EXISTS! to query -+ +clickableFieldActions('tcpflags.ack', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.psh', 0)") - | Export Unique PSH -@@ -504,6 +537,7 @@ dl - | Open PSH SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.psh', '==')") - | Add PSH EXISTS! to query -+ +clickableFieldActions('tcpflags.psh', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.rst', 0)") - | Export Unique RST -@@ -513,6 +547,7 @@ dl - | Open RST SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.rst', '==')") - | Add RST EXISTS! to query -+ +clickableFieldActions('tcpflags.rst', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.fin', 0)") - | Export Unique FIN -@@ -522,6 +557,7 @@ dl - | Open FIN SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.fin', '==')") - | Add FIN EXISTS! to query -+ +clickableFieldActions('tcpflags.fin', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('tcpflags.urg', 0)") - | Export Unique URG -@@ -531,6 +567,7 @@ dl - | Open URG SPI Graph - b-dropdown-item(@click="fieldExists('tcpflags.urg', '==')") - | Add URG EXISTS! to query -+ +clickableFieldActions('tcpflags.urg', false) - dd - strong.medium.ml-1 SYN - +clickableValue('tcpflags.syn', session.tcpflags.syn) -@@ -556,6 +593,7 @@ dl - | Export Unique ICMP Type with counts - b-dropdown-item(@click="fieldExists('icmp.type', '==')") - | Add ICMP Type EXISTS! to query -+ +clickableFieldActions('icmp.type', false) - b-dropdown-divider - b-dropdown-item(@click="exportUnique('icmp.code', 0)") - | Export Unique ICMP Code -@@ -563,6 +601,7 @@ dl - | Export Unique ICMP Code with counts - b-dropdown-item(@click="fieldExists('icmp.code', '==')") - | Add ICMP Code EXISTS! to query -+ +clickableFieldActions('icmp.code', false) - dd - strong.medium.ml-1 Type - +arrayPrint(session.icmp, "type", "icmp.type") -@@ -577,11 +616,13 @@ dl - | Export Unique DSCP Src - b-dropdown-item(@click="exportUnique('dscp.src', 1)") - | Export Unique DSCP Src with counts -+ +clickableFieldActions('dscp.src', false) - if (session.dstDscp) - b-dropdown-item(@click="exportUnique('dscp.dst', 0)") - | Export Unique DSCP Dst - b-dropdown-item(@click="exportUnique('dscp.dst', 1)") - | Export Unique DSCP Dst with counts -+ +clickableFieldActions('dscp.dst', false) - dd - if (session.srcDscp) - strong.medium.ml-1 Src -diff --git a/viewer/vueapp/src/components/sessions/FieldActions.vue b/viewer/vueapp/src/components/sessions/FieldActions.vue -new file mode 100644 -index 00000000..35ca45b7 ---- /dev/null -+++ b/viewer/vueapp/src/components/sessions/FieldActions.vue -@@ -0,0 +1,125 @@ -+ -+ -+ -diff --git a/viewer/vueapp/src/components/sessions/Sessions.vue b/viewer/vueapp/src/components/sessions/Sessions.vue -index 3d3fdb9d..19f4437e 100644 ---- a/viewer/vueapp/src/components/sessions/Sessions.vue -+++ b/viewer/vueapp/src/components/sessions/Sessions.vue -@@ -372,6 +372,11 @@ - @click="pivot(header.dbField, header.exp)"> - Pivot on {{ header.friendlyName }} - -+ -+ - - - - - -@@ -564,6 +574,7 @@ import MolochSessionDetail from './SessionDetail'; - import MolochCollapsible from '../utils/CollapsibleWrapper'; - import MolochVisualizations from '../visualizations/Visualizations'; - import MolochStickySessions from './StickySessions'; -+import FieldActions from './FieldActions'; - // import external - import Sortable from 'sortablejs'; - -@@ -701,7 +712,8 @@ export default { - MolochSessionDetail, - MolochVisualizations, - MolochStickySessions, -- MolochCollapsible -+ MolochCollapsible, -+ FieldActions - }, - data: function () { - return { -@@ -735,6 +747,7 @@ export default { - }, - created: function () { - this.getSessionsConfig(); // IMPORTANT: kicks off the initial search query! -+ ConfigService.getFieldActions(); - - // watch for window resizing and update the info column width - // this is only registered when the user has not set widths for any -diff --git a/viewer/vueapp/src/components/spiview/Spiview.vue b/viewer/vueapp/src/components/spiview/Spiview.vue -index 3b7fe969..0766e231 100644 ---- a/viewer/vueapp/src/components/spiview/Spiview.vue -+++ b/viewer/vueapp/src/components/spiview/Spiview.vue -@@ -273,6 +273,10 @@ - @click="openSpiGraph(field.dbField)"> - Open {{ field.friendlyName }} SPI Graph - -+ - - - -@@ -321,6 +325,10 @@ - @click="pivot(value)"> - Pivot on {{ value.field.friendlyName }} - -+ - - - -@@ -392,6 +400,7 @@ - import Vue from 'vue'; - - import SessionsService from '../sessions/SessionsService'; -+import ConfigService from '../utils/ConfigService'; - import FieldService from '../search/FieldService'; - import UserService from '../users/UserService'; - -@@ -399,6 +408,7 @@ import MolochError from '../utils/Error'; - import MolochSearch from '../search/Search'; - import MolochVisualizations from '../visualizations/Visualizations'; - import MolochCollapsible from '../utils/CollapsibleWrapper'; -+import FieldActions from '../sessions/FieldActions'; - - // import utils - import Utils from '../utils/utils'; -@@ -424,7 +434,8 @@ export default { - MolochError, - MolochSearch, - MolochVisualizations, -- MolochCollapsible -+ MolochCollapsible, -+ FieldActions - }, - data: function () { - return { -@@ -491,6 +502,8 @@ export default { - } else { - this.issueQueries(); - } -+ -+ ConfigService.getFieldActions(); - }, - methods: { - /* exposed page functions ---------------------------------------------- */ -diff --git a/viewer/vueapp/src/components/utils/ConfigService.js b/viewer/vueapp/src/components/utils/ConfigService.js -index ee6dc616..7f200bee 100644 ---- a/viewer/vueapp/src/components/utils/ConfigService.js -+++ b/viewer/vueapp/src/components/utils/ConfigService.js -@@ -5,6 +5,7 @@ let _molochClustersCache; - let getMolochClustersQIP; - let _molochClickablesCache; - let getMolochClickablesQIP; -+let getFieldActionsQIP; - - export default { - /** -@@ -58,7 +59,7 @@ export default { - if (getMolochClickablesQIP) { return getMolochClickablesQIP; } - - getMolochClickablesQIP = new Promise((resolve, reject) => { -- if (_molochClickablesCache) { resolve(_molochClickablesCache); } -+ if (_molochClickablesCache) { return resolve(_molochClickablesCache); } - - Vue.axios.get('api/valueactions') - .then((response) => { -@@ -77,16 +78,49 @@ export default { - } - - _molochClickablesCache = response.data; -- resolve(response.data); -+ return resolve(response.data); - }, (error) => { - getMolochClickablesQIP = undefined; -- reject(error); -+ return reject(error); - }); - }); - - return getMolochClickablesQIP; - }, - -+ /** -+ * Gets the available field actions to add to field dropdown menus -+ * and caches the result (in store) -+ * @returns {Promise} Promise A promise object that signals the completion -+ * or rejection of the request. -+ */ -+ getFieldActions: function () { -+ if (getFieldActionsQIP) { return getFieldActionsQIP; } -+ -+ getFieldActionsQIP = new Promise((resolve, reject) => { -+ const fieldActions = store.getters.getFieldActions; -+ if (fieldActions && Object.keys(fieldActions).length > 0) { -+ return resolve(fieldActions); -+ } -+ -+ Vue.axios.get('api/fieldactions').then((response) => { -+ getFieldActionsQIP = undefined; -+ for (const key in response.data) { -+ const item = response.data[key]; -+ if (item.category !== undefined && !Array.isArray(item.category)) { -+ item.category = item.category.split(','); -+ } -+ } -+ -+ store.commit('setFieldActions', response.data); -+ return resolve(response.data); -+ }).catch((error) => { -+ getFieldActionsQIP = undefined; -+ return reject(error); -+ }); -+ }); -+ }, -+ - /** - * Cancels any es tasks whose X-Opaque-Id equal this cancel id - * @param {string} cancelId The X-Opaque-Id set for the es tasks to cancel -diff --git a/viewer/vueapp/src/store.js b/viewer/vueapp/src/store.js -index 60b24452..f900265d 100644 ---- a/viewer/vueapp/src/store.js -+++ b/viewer/vueapp/src/store.js -@@ -49,7 +49,8 @@ const store = new Vuex.Store({ - sortsParam: 'firstPacket:desc', - stickySessionsBtn: false, - showCapStartTimes: true, -- capStartTimes: [{ nodeName: 'none', startTime: 1 }] -+ capStartTimes: [{ nodeName: 'none', startTime: 1 }], -+ fieldActions: {} - }, - getters: { - sessionsTableState (state) { -@@ -57,6 +58,9 @@ const store = new Vuex.Store({ - state.sessionsTableState = Utils.getDefaultTableState(); - } - return state.sessionsTableState; -+ }, -+ getFieldActions (state) { -+ return state.fieldActions; - } - }, - mutations: { -@@ -238,6 +242,9 @@ const store = new Vuex.Store({ - state.fieldsAliasMap[alias] = field; - }); - } -+ }, -+ setFieldActions (state, value) { -+ state.fieldActions = value; - } - } - }); -diff --git a/wiseService/source.fieldactions.js b/wiseService/source.fieldactions.js -new file mode 100644 -index 00000000..8851535b ---- /dev/null -+++ b/wiseService/source.fieldactions.js -@@ -0,0 +1,273 @@ -+/******************************************************************************/ -+/* -+ * -+ * Copyright 2012-2016 AOL Inc. All rights reserved. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this Software except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+'use strict'; -+ -+const fs = require('fs'); -+const WISESource = require('./wiseSource.js'); -+const ini = require('iniparser'); -+const axios = require('axios'); -+const ArkimeUtil = require('../common/arkimeUtil'); -+ -+class FieldActionsSource extends WISESource { -+ // ---------------------------------------------------------------------------- -+ constructor (api, section) { -+ super(api, section, { }); -+ -+ if (section === 'right-click') { -+ this.process(api.getConfigSection(section)); -+ return; -+ } -+ -+ this.url = api.getConfig(section, 'url', api.getConfig(section, 'file')); -+ -+ if (this.url === undefined) { -+ console.log(this.section, '- ERROR not loading', this.section, 'since no url specified in config file'); -+ return; -+ } -+ -+ if (this.url.startsWith('file:///')) { -+ this.url = this.url.substring(7); -+ } -+ -+ if (this.url[0] === '/' || this.url.startsWith('./') || this.url.startsWith('../')) { -+ if (!fs.existsSync(this.url)) { -+ console.log(this.section, '- ERROR not loading', this.section, 'since', this.url, "doesn't exist"); -+ return; -+ } -+ this.load = this.loadFile; -+ this.getSourceRaw = this.getSourceRawFile; -+ this.putSourceRaw = this.putSourceRawFile; -+ } else if (this.url.startsWith('elasticsearch://') || this.url.startsWith('elasticsearchs://')) { -+ this.url = this.url.replace('elasticsearch', 'http'); -+ if (!this.url.includes('/_doc/')) { -+ throw new Error('Missing _doc in url, should be format elasticsearch://user:pass@host:port/INDEX/_doc/DOC'); -+ } -+ this.load = this.loadES; -+ this.getSourceRaw = this.getSourceRawES; -+ this.putSourceRaw = this.putSourceRawES; -+ } else if (this.url.startsWith('redis')) { -+ this.load = this.loadRedis; -+ this.getSourceRaw = this.getSourceRawRedis; -+ this.putSourceRaw = this.putSourceRawRedis; -+ const redisParts = this.url.split('/'); -+ if (redisParts.length !== 5) { -+ throw new Error(`Invalid redis url - ${redisParts[0]}//[:pass@]redishost[:redisport]/redisDbNum/key`); -+ } -+ this.key = redisParts.pop(); -+ this.client = ArkimeUtil.createRedisClient(redisParts.join('/'), section); -+ } else { -+ console.log(this.section, '- ERROR not loading', this.section, 'don\'t know how to open', this.url); -+ return; -+ } -+ -+ this.api.addSource(section, this, []); -+ -+ setImmediate(this.load.bind(this)); -+ -+ if (this.url[0] === '/' || this.url.startsWith('../')) { -+ this.watchFile(); -+ } else { -+ setInterval(this.load.bind(this), 5 * 1000 * 60); -+ } -+ } -+ -+ // ---------------------------------------------------------------------------- -+ process (data) { -+ const keys = Object.keys(data); -+ if (!keys) { return; } -+ -+ keys.forEach((key) => { -+ const obj = {}; -+ data[key].split(';').forEach((element) => { -+ const i = element.indexOf(':'); -+ if (i === -1) { -+ return; -+ } -+ -+ const parts = [element.slice(0, i), element.slice(i + 1)]; -+ if (parts[1] === 'true') { -+ parts[1] = true; -+ } else if (parts[1] === 'false') { -+ parts[1] = false; -+ } -+ obj[parts[0]] = parts[1]; -+ }); -+ if (obj.fields) { -+ obj.fields = obj.fields.split(',').map(item => item.trim()); -+ } -+ if (obj.users) { -+ const users = {}; -+ obj.users.split(',').map(item => item.trim()).forEach((item) => { -+ users[item] = 1; -+ }); -+ obj.users = users; -+ } -+ if (obj.notUsers) { -+ const users = {}; -+ obj.notUsers.split(',').map(item => item.trim()).forEach((item) => { -+ users[item] = 1; -+ }); -+ obj.notUsers = users; -+ } -+ this.api.addFieldAction(key, obj); -+ }); -+ }; -+ -+ // ---------------------------------------------------------------------------- -+ watchFile () { -+ // Watch file for changes, combine multiple changes into one, on move restart watch after a pause -+ this.watchTimeout = null; -+ const watchCb = (e, filename) => { -+ clearTimeout(this.watchTimeout); -+ if (e === 'rename') { -+ this.watch.close(); -+ setTimeout(() => { -+ this.load(); -+ this.watch = fs.watch(this.url, watchCb); -+ }, 500); -+ } else { -+ this.watchTimeout = setTimeout(() => { -+ this.watchTimeout = null; -+ this.load(); -+ }, 2000); -+ } -+ }; -+ this.watch = fs.watch(this.url, watchCb); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ loadFile () { -+ if (!fs.existsSync(this.url)) { -+ console.log(this.section, '- ERROR not loading', this.section, 'since', this.url, "doesn't exist"); -+ return; -+ } -+ -+ const config = ini.parseSync(this.url); -+ const data = config.fieldactions || config; -+ -+ this.process(data); -+ }; -+ -+ // ---------------------------------------------------------------------------- -+ getSourceRawFile (cb) { -+ fs.readFile(this.url, (err, body) => { -+ if (err) { -+ return cb(err); -+ } -+ return cb(null, body); -+ }); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ putSourceRawFile (body, cb) { -+ fs.writeFile(this.url, body, (err) => { -+ this.process(ini.parseString(body)); -+ return cb(err); -+ }); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ loadRedis () { -+ if (this.client && this.key) { -+ this.client.get(this.key, (err, data) => { -+ if (err) { -+ console.log(this.section, '- ERROR', err); -+ return; -+ } -+ if (data === null) { data = ''; } -+ this.process(ini.parseString(data)); -+ }); -+ } -+ }; -+ -+ // ---------------------------------------------------------------------------- -+ getSourceRawRedis (cb) { -+ this.client.get(this.key, cb); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ putSourceRawRedis (file, cb) { -+ this.client.set(this.key, file, (err) => { -+ this.load(); -+ cb(err); -+ }); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ loadES () { -+ axios.get(this.url) -+ .then((response) => { -+ return this.process(ini.parseString(response.data._source.ini || '')); -+ }) -+ .catch((error) => { -+ if (error.response && error.response.status === 404) { -+ return this.process({}); -+ } -+ console.log(this.section, '- ERROR', error); -+ }); -+ }; -+ -+ // ---------------------------------------------------------------------------- -+ getSourceRawES (cb) { -+ axios.get(this.url) -+ .then((response) => { -+ cb(null, response.data._source.ini || ''); -+ }) -+ .catch((error) => { -+ if (error.response && error.response.status === 404) { -+ return cb(null, ''); -+ } -+ return cb(error); -+ }); -+ } -+ -+ // ---------------------------------------------------------------------------- -+ putSourceRawES (file, cb) { -+ axios.post(this.url, JSON.stringify({ ini: file }), { headers: { 'Content-Type': 'application/json' } }) -+ .then((response) => { -+ this.process(ini.parseString(file)); -+ cb(null); -+ }) -+ .catch((error) => { -+ cb(error); -+ }); -+ } -+} -+ -+// ---------------------------------------------------------------------------- -+exports.initSource = function (api) { -+ api.addSourceConfigDef('fieldactions', { -+ singleton: false, -+ name: 'fieldactions', -+ description: "This source monitors configured files, redis or elasticsearch for field actions to send to all the viewer instances that connect to this WISE Server. It isn't really a source in the true WISE sense, but makes it easy to edit.", -+ link: 'https://arkime.com/wise#fieldactions', -+ cacheable: false, -+ editable: true, -+ types: [], // This is a fake source, no types -+ format: 'valueactions', // Which vueapp editor to use -+ fields: [ -+ { name: 'url', required: true, help: 'The file to load, can be a file path, redis url (Format is redis://[:password@]host:port/db-number/key, redis-sentinel://[[sentinelPassword]:[password]@]host[:port]/redis-name/db-number/key, or redis-cluster://[:password@]host:port/db-number/key), or elasticsearch url (elasticsearch://host:9200/INDEX/_doc/DOCNAME)' } -+ ] -+ }); -+ -+ const sections = api.getConfigSections().filter((e) => { return e.match(/^(right-click$|right-click:|fieldactions:)/); }); -+ sections.forEach((section) => { -+ return new FieldActionsSource(api, section); -+ }); -+}; -+// ---------------------------------------------------------------------------- -diff --git a/wiseService/wiseService.js b/wiseService/wiseService.js -index 2f625e66..fe0e843c 100644 ---- a/wiseService/wiseService.js -+++ b/wiseService/wiseService.js -@@ -93,6 +93,7 @@ const internals = { - types: { - }, - views: {}, -+ fieldActions: {}, - valueActions: {}, - workers: 1, - regressionTests: false, -@@ -610,6 +611,15 @@ class WISESourceAPI { - internals.valueActions[actionName] = action; - } - -+ /** -+ * Add a field action set -+ * @params {string} actionName - The globally unique name of this action, not shown to user -+ * @params {WISESourceAPI~ValueAction} action - The action -+ */ -+ addFieldAction (actionName, action) { -+ internals.fieldActions[actionName] = action; -+ } -+ - isWebConfig () { - return internals.webconfig; - } -@@ -739,6 +749,16 @@ app.get('/views', [ArkimeUtil.noCacheJson], function (req, res) { - app.get(['/rightClicks', '/valueActions'], [ArkimeUtil.noCacheJson], function (req, res) { - res.send(internals.valueActions); - }); -+// ---------------------------------------------------------------------------- -+/** -+ * GET - Used by viewer to retrieve all the field actions created by wise sources -+ * -+ * @name "/fieldActions" -+ * @returns {object|array} All the field actions -+ */ -+app.get('/fieldActions', [ArkimeUtil.noCacheJson], function (req, res) { -+ res.send(internals.fieldActions); -+}); - - // ---------------------------------------------------------------------------- - function globalAllowed (value) { diff --git a/arkime/wise/source.zeeklogs.js b/arkime/wise/source.zeeklogs.js index 477f9347d..e58b9c71c 100644 --- a/arkime/wise/source.zeeklogs.js +++ b/arkime/wise/source.zeeklogs.js @@ -29,7 +29,7 @@ class MalcolmSource extends WISESource { // todo: look at expressions for things that have parents (tunnelling, parent files, etc.) // todo: look at IP types and use ipPrint? - // add field actions and value actions + // add right-clicks var allFields = [ "client.bytes", "client.domain", @@ -1693,42 +1693,42 @@ class MalcolmSource extends WISESource { var protoFieldsStr = allFields.filter(value => /^(network\.transport|ip\.protocol)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_proto", { name: "Protocol Registry", url: 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml', fields: protoFieldsStr }); - // add value action for searching IANA for services + // add right-click for searching IANA for services var serviceFieldsStr = allFields.filter(value => /^(protocols?|network\.protocol)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_service", { name: "Service Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', fields: serviceFieldsStr }); - // add value action for searching VirusTotal for other IP addresses + // add right-click for searching VirusTotal for other IP addresses var ipFieldsStr = allFields.filter(value => /[_\.-](h|ip)$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_ip", { name: "VirusTotal IP", url: "https://www.virustotal.com/en/ip-address/%TEXT%/information", fields: ipFieldsStr }); - // add value action for searching IANA for ports + // add right-click for searching IANA for ports var portFieldsStr = allFields.filter(value => /(^|src|dst|source|dest|destination|[\b_\.-])p(ort)?s?$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_port", { name: "Port Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', fields: portFieldsStr }); this.api.addValueAction("malcolm_websearch_port_arkime", { name: "Port Registry", url: 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=%TEXT%', category: "port" }); - // add value action for searching VirusTotal for hash signatures + // add right-click for searching VirusTotal for hash signatures var hashFieldsStr = allFields.filter(value => /(^|[\b_\.-])(md5|sha(1|256|384|512))\b/i.test(value)).join(','); this.api.addValueAction("malcolm_vt_fields_hash", { name: "VirusTotal Hash", url: "https://www.virustotal.com/gui/file/%TEXT%/detection", fields: hashFieldsStr }); this.api.addValueAction("malcolm_vt_fields_hash_arkime", { name: "VirusTotal Hash", url: "https://www.virustotal.com/gui/file/%TEXT%/detection", category: "md5" }); - // add value action for searching the web for signature IDs + // add right-click for searching the web for signature IDs var sigFieldsStr = allFields.filter(value => /(^|[\b_\.-])(hit|signature(_?id))?s?$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_sig", { name: "Web Search", url: 'https://duckduckgo.com/?q="%TEXT%"', fields: sigFieldsStr }); - // add value action for searching ARIN for ASN + // add right-click for searching ARIN for ASN var asnFieldsStr = allFields.filter(value => /(as\.number|(src|dst)ASN|asn\.(src|dst))$/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_asn", { name: "ARIN ASN", url: 'https://search.arin.net/rdap/?query=%TEXT%&searchFilter=asn', fields: asnFieldsStr }); - // add value action for searching mime/media/content types + // add right-click for searching mime/media/content types var mimeFieldsStr = allFields.filter(value => /mime[_\.-]?type/i.test(value)).join(','); this.api.addValueAction("malcolm_websearch_mime", { name: "Media Type Registry", url: 'https://www.iana.org/assignments/media-types/%TEXT%', fields: mimeFieldsStr }); - // add value action for extracted/quarantined files from zeek + // add right-click for extracted/quarantined files from zeek var carvedFieldsStr = allFields.filter(value => /^zeek\.files\.extracted$/i.test(value)).join(','); this.api.addValueAction("malcolm_carved_file_quarantined", { name: "Download (if quarantined)", url: "/dl-extracted-files/quarantine/%TEXT%", fields: carvedFieldsStr }); this.api.addValueAction("malcolm_carved_file_preserved", { name: "Download (if preserved)", url: "/dl-extracted-files/preserved/%TEXT%", fields: carvedFieldsStr }); - // add value actions for pivoting into dashboards from Arkime (see nginx.conf) + // add right-clicks for pivoting into dashboards from Arkime (see nginx.conf) var filterLabel = "OpenSearch Dashboards %DBFIELD%"; var filterUrl = "idark2dash/filter?start=%ISOSTART%&stop=%ISOSTOP%&field=%DBFIELD%&value=%TEXT%"; @@ -1740,18 +1740,18 @@ class MalcolmSource extends WISESource { this.api.addValueAction("malcolm_dashboards_cat_user", { name: filterLabel, url: filterUrl, category: "user" }); this.api.addValueAction("malcolm_dashboards_fields_zeek", { name: filterLabel, url: filterUrl, fields: allFieldsStr }); - // add field action for opening malcolm agg api + // add rick-click for opening malcolm agg api var apiLabel = "Aggregate %DBFIELD%"; var apiURL = "mapi/agg/%DBFIELD%?from=%ISOSTART%&to=%ISOSTOP%"; - this.api.addFieldAction("malcolm_mapi_cat_ip", { name: apiLabel, url: apiURL, category: "ip" }); - this.api.addFieldAction("malcolm_mapi_cat_port", { name: apiLabel, url: apiURL, category: "port" }); - this.api.addFieldAction("malcolm_mapi_cat_country", { name: apiLabel, url: apiURL, category: "country" }); - this.api.addFieldAction("malcolm_mapi_cat_host", { name: apiLabel, url: apiURL, category: "host" }); - this.api.addFieldAction("malcolm_mapi_cat_md5", { name: apiLabel, url: apiURL, category: "md5" }); - this.api.addFieldAction("malcolm_mapi_cat_user", { name: apiLabel, url: apiURL, category: "user" }); - this.api.addFieldAction("malcolm_mapi_fields_zeek", { name: apiLabel, url: apiURL, fields: allFieldsStr }); + this.api.addValueAction("malcolm_mapi_cat_ip", { name: apiLabel, url: apiURL, category: "ip" }); + this.api.addValueAction("malcolm_mapi_cat_port", { name: apiLabel, url: apiURL, category: "port" }); + this.api.addValueAction("malcolm_mapi_cat_country", { name: apiLabel, url: apiURL, category: "country" }); + this.api.addValueAction("malcolm_mapi_cat_host", { name: apiLabel, url: apiURL, category: "host" }); + this.api.addValueAction("malcolm_mapi_cat_md5", { name: apiLabel, url: apiURL, category: "md5" }); + this.api.addValueAction("malcolm_mapi_cat_user", { name: apiLabel, url: apiURL, category: "user" }); + this.api.addValueAction("malcolm_mapi_fields_zeek", { name: apiLabel, url: apiURL, fields: allFieldsStr }); - // add value action for viewing original JSON document + // add right-click for viewing original JSON document this.api.addValueAction("malcolm_json_source", { name: "%DBFIELD% Document(s) JSON", url: "mapi/document?filter={\"%DBFIELD%\":\"%TEXT%\"}", fields: "communityId,event.id,id,network.community_id,rootId,zeek.fuid,zeek.uid" }); this.api.addView("malcolm_common", From 79e4d2804cc8116e81b0f89f2c28da665c0486aa Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 26 May 2022 13:42:44 -0600 Subject: [PATCH 007/122] working on opensearch v2.0, filebeat is broken at the moment --- Dockerfiles/dashboards.Dockerfile | 8 ++++---- Dockerfiles/opensearch.Dockerfile | 4 ++-- dashboards/opensearch_dashboards.yml | 4 ++-- docker-compose-standalone.yml | 1 - docker-compose.yml | 1 - 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Dockerfiles/dashboards.Dockerfile b/Dockerfiles/dashboards.Dockerfile index d9b6deb53..9ebccf35d 100644 --- a/Dockerfiles/dashboards.Dockerfile +++ b/Dockerfiles/dashboards.Dockerfile @@ -14,10 +14,10 @@ ENV PGROUP "dashboarder" ENV TERM xterm -ARG OPENSEARCH_VERSION="1.3.2" +ARG OPENSEARCH_VERSION="2.0.0" ENV OPENSEARCH_VERSION $OPENSEARCH_VERSION -ARG OPENSEARCH_DASHBOARDS_VERSION="1.3.2" +ARG OPENSEARCH_DASHBOARDS_VERSION="2.0.0" ENV OPENSEARCH_DASHBOARDS_VERSION $OPENSEARCH_DASHBOARDS_VERSION # base system dependencies for checking out and building plugins @@ -59,7 +59,7 @@ RUN git clone --single-branch --depth=1 --recurse-submodules --shallow-submodule RUN eval "$(nodenv init -)" && \ mkdir -p /usr/share/opensearch-dashboards/plugins && \ - git clone --depth 1 --recurse-submodules --shallow-submodules --single-branch https://github.com/mmguero-dev/osd_sankey_vis.git /usr/share/opensearch-dashboards/plugins/sankey_vis && \ + git clone --depth 1 --recurse-submodules --shallow-submodules --single-branch --branch opensearch-v2-dashboards-compatibility https://github.com/mmguero-dev/osd_sankey_vis.git /usr/share/opensearch-dashboards/plugins/sankey_vis && \ cd /usr/share/opensearch-dashboards/plugins/sankey_vis && \ yarn osd bootstrap && \ yarn install && \ @@ -68,7 +68,7 @@ RUN eval "$(nodenv init -)" && \ # runtime ################################################################## -FROM opensearchproject/opensearch-dashboards:1.3.2 +FROM opensearchproject/opensearch-dashboards:2.0.0 LABEL maintainer="malcolm@inl.gov" LABEL org.opencontainers.image.authors='malcolm@inl.gov' diff --git a/Dockerfiles/opensearch.Dockerfile b/Dockerfiles/opensearch.Dockerfile index 384418ee1..31841bf64 100644 --- a/Dockerfiles/opensearch.Dockerfile +++ b/Dockerfiles/opensearch.Dockerfile @@ -1,4 +1,4 @@ -FROM opensearchproject/opensearch:1.3.2 +FROM opensearchproject/opensearch:2.0.0 # Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. LABEL maintainer="malcolm@inl.gov" @@ -37,7 +37,7 @@ RUN yum install -y openssl util-linux procps && \ yum upgrade -y && \ /usr/share/opensearch/bin/opensearch-plugin remove opensearch-security --purge && \ /usr/share/opensearch/bin/opensearch-plugin remove opensearch-performance-analyzer --purge && \ - echo -e 'cluster.name: "docker-cluster"\nnetwork.host: 0.0.0.0\ncompatibility.override_main_response_version: true\nbootstrap.memory_lock: true' > /usr/share/opensearch/config/opensearch.yml && \ + echo -e 'cluster.name: "docker-cluster"\nnetwork.host: 0.0.0.0\nbootstrap.memory_lock: true' > /usr/share/opensearch/config/opensearch.yml && \ sed -i "s/#[[:space:]]*\([0-9]*-[0-9]*:-XX:-\(UseConcMarkSweepGC\|UseCMSInitiatingOccupancyOnly\)\)/\1/" /usr/share/opensearch/config/jvm.options && \ sed -i "s/^[0-9][0-9]*\(-:-XX:\(+UseG1GC\|G1ReservePercent\|InitiatingHeapOccupancyPercent\)\)/$($OPENSEARCH_JAVA_HOME/bin/java -version 2>&1 | grep version | awk '{print $3}' | tr -d '\"' | cut -d. -f1)\1/" /usr/share/opensearch/config/jvm.options && \ mkdir -p /usr/share/opensearch/ca-trust && \ diff --git a/dashboards/opensearch_dashboards.yml b/dashboards/opensearch_dashboards.yml index f5856f718..24a66bba5 100644 --- a/dashboards/opensearch_dashboards.yml +++ b/dashboards/opensearch_dashboards.yml @@ -1,8 +1,8 @@ --- # Default OpenSearch dashboards configuration from github. -server.name: dashboards -server.host: "0" +server.name: "dashboards" +server.host: "0.0.0.0" server.basePath: "/dashboards" server.rewriteBasePath: true server.maxPayloadBytes: 8388608 diff --git a/docker-compose-standalone.yml b/docker-compose-standalone.yml index 00dff2496..f60f1791f 100644 --- a/docker-compose-standalone.yml +++ b/docker-compose-standalone.yml @@ -178,7 +178,6 @@ services: OPENSEARCH_JAVA_OPTS : '-server -Xms4g -Xmx4g -Xss256k -XX:-HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/./urandom -Dlog4j.formatMsgNoLookups=true' VIRTUAL_HOST : 'os.malcolm.local' discovery.type : 'single-node' - discovery.zen.minimum_master_nodes : 1 cluster.routing.allocation.disk.threshold_enabled : 'false' cluster.routing.allocation.node_initial_primaries_recoveries : 8 indices.query.bool.max_clause_count : 2048 diff --git a/docker-compose.yml b/docker-compose.yml index 4df1cc600..f4b9f7b88 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -181,7 +181,6 @@ services: OPENSEARCH_JAVA_OPTS : '-server -Xms4g -Xmx4g -Xss256k -XX:-HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/./urandom -Dlog4j.formatMsgNoLookups=true' VIRTUAL_HOST : 'os.malcolm.local' discovery.type : 'single-node' - discovery.zen.minimum_master_nodes : 1 cluster.routing.allocation.disk.threshold_enabled : 'false' cluster.routing.allocation.node_initial_primaries_recoveries : 8 indices.query.bool.max_clause_count : 2048 From 2c4acaf7273beb77822d7f1e96bc0e8c8d6c1e39 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 27 May 2022 12:17:56 -0600 Subject: [PATCH 008/122] work in progress for opensearch v2 --- README.md | 2 -- api/project/__init__.py | 18 ++++++++++++------ api/requirements.txt | 2 +- dashboards/malcolm_template.json | 15 +++++++-------- .../scripts/create-arkime-sessions-index.sh | 4 ++-- filebeat/filebeat.yml | 6 ------ .../pipelines/suricata/11_suricata_logs.conf | 3 ++- .../suricata/13_suricata_convert.conf | 6 ------ logstash/pipelines/zeek/11_zeek_logs.conf | 16 +++++----------- scripts/control.py | 2 +- .../interface/sensor_ctl/filebeat/filebeat.yml | 4 ---- 11 files changed, 30 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 29b714895..0be58f792 100644 --- a/README.md +++ b/README.md @@ -932,8 +932,6 @@ filebeat.inputs: paths: - /var/zeek/*.log fields_under_root: true - fields: - type: "session" compression_level: 0 exclude_lines: ['^\s*#'] scan_frequency: 10s diff --git a/api/project/__init__.py b/api/project/__init__.py index c24da47cb..101338b08 100644 --- a/api/project/__init__.py +++ b/api/project/__init__.py @@ -8,6 +8,7 @@ import re import requests import string +import traceback import warnings from collections import defaultdict @@ -551,12 +552,16 @@ def fields(): } # get fields from OpenSearch template - for fieldname, fieldinfo in deep_get( - requests.get(f'{app.config["OPENSEARCH_URL"]}/_template/{app.config["MALCOLM_TEMPLATE"]}').json(), - [app.config["MALCOLM_TEMPLATE"], "mappings", "properties"], - ).items(): - if 'type' in fieldinfo: - fields[fieldname]['type'] = field_type_map[deep_get(fieldinfo, ['type'])] + for template in deep_get( + requests.get(f'{app.config["OPENSEARCH_URL"]}/_index_template/{app.config["MALCOLM_TEMPLATE"]}').json(), + ["index_templates"], + ): + for fieldname, fieldinfo in deep_get( + template, + ["index_template", "template", "mappings", "properties"], + ).items(): + if 'type' in fieldinfo: + fields[fieldname]['type'] = field_type_map[deep_get(fieldinfo, ['type'])] # get fields from OpenSearch dashboards for field in requests.get( @@ -806,4 +811,5 @@ def basic_error(e): errorStr = f"{type(e).__name__}: {str(e)}" if debugApi: print(errorStr) + print(traceback.format_exc()) return jsonify(error=errorStr) diff --git a/api/requirements.txt b/api/requirements.txt index 44ba50ceb..55d5c84fb 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,7 +1,7 @@ pytz==2021.3 Flask==2.0.2 gunicorn==20.1.0 -opensearch-py==1.0.0 +opensearch-py==1.1.0 opensearch-dsl==1.0.0 requests==2.26.0 regex==2022.3.2 diff --git a/dashboards/malcolm_template.json b/dashboards/malcolm_template.json index f83ed8189..410f7160c 100644 --- a/dashboards/malcolm_template.json +++ b/dashboards/malcolm_template.json @@ -1,13 +1,12 @@ { "index_patterns" : ["arkime_sessions3-*"], - "order" : 0, - "settings" : { - "index" : { - "mapping.total_fields.limit" : "3000" - } - }, - "mappings": { - "session": { + "template" :{ + "settings" : { + "index" : { + "mapping.total_fields.limit" : "3000" + } + }, + "mappings": { "properties": { "firstPacket": { "type": "date" }, "lastPacket": { "type": "date" }, diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index 00251d16e..d01bdb479 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -84,7 +84,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then if [[ -f "$MALCOLM_TEMPLATE_FILE_ORIG" ]]; then # insert OpenSearch ISM stuff into index template settings - cat "$MALCOLM_TEMPLATE_FILE_ORIG" | jq ".settings += {\"index.plugins.index_state_management.policy_id\": \"$INDEX_POLICY_NAME\"}" > "$MALCOLM_TEMPLATE_FILE" + cat "$MALCOLM_TEMPLATE_FILE_ORIG" | jq ".template.settings += {\"index.plugins.index_state_management.policy_id\": \"$INDEX_POLICY_NAME\"}" > "$MALCOLM_TEMPLATE_FILE" fi fi @@ -96,7 +96,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # load malcolm_template containing malcolm data source field type mappings (merged from /data/malcolm_template.json to /data/init/malcolm_template.json in dashboard-helpers on startup) curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" \ - "$OS_URL/_template/malcolm_template?include_type_name=true" -d "@$MALCOLM_TEMPLATE_FILE" 2>&1 + "$OS_URL/_index_template/malcolm_template" -d "@$MALCOLM_TEMPLATE_FILE" 2>&1 echo "Importing index pattern..." diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml index d0e482494..63ad43268 100644 --- a/filebeat/filebeat.yml +++ b/filebeat/filebeat.yml @@ -13,8 +13,6 @@ filebeat.inputs: symlinks: true fields_under_root: true tags: ["_filebeat_zeek"] - fields: - type: "session" compression_level: 0 exclude_lines: ['^\s*#'] scan_frequency: ${FILEBEAT_SCAN_FREQUENCY:10s} @@ -39,8 +37,6 @@ filebeat.inputs: symlinks: true fields_under_root: true tags: ["_filebeat_zeek"] - fields: - type: "session" compression_level: 0 exclude_lines: ['^\s*#'] scan_frequency: ${FILEBEAT_SCAN_FREQUENCY:10s} @@ -58,8 +54,6 @@ filebeat.inputs: symlinks: true fields_under_root: true tags: ["_filebeat_suricata"] - fields: - type: "session" compression_level: 0 scan_frequency: ${FILEBEAT_SCAN_FREQUENCY:10s} clean_inactive: ${FILEBEAT_CLEAN_INACTIVE:45m} diff --git a/logstash/pipelines/suricata/11_suricata_logs.conf b/logstash/pipelines/suricata/11_suricata_logs.conf index 34a88d5ad..eaab37064 100644 --- a/logstash/pipelines/suricata/11_suricata_logs.conf +++ b/logstash/pipelines/suricata/11_suricata_logs.conf @@ -61,10 +61,10 @@ filter { ############################################################################################################################# # take care of log timestamps in the formats all the different tools want them (phew!) - # @timestamp - date type # suricata.timestamp - ISO8601-formatted string # suricata.flow.start - ISO8601-formatted string # suricata.flow.end - ISO8601-formatted string + # @timestamp - epoch millseconds # timestamp - epoch millseconds # firstPacket - epoch millseconds # lastPacket - epoch millseconds @@ -93,6 +93,7 @@ filter { endTimeMs = endTimeStr.nil? ? timeStampMs : (1000*DateTime.parse(endTimeStr).to_time.to_f).round(0) durationMs = (ageMs > 0) ? ageMs : ((endTimeMs > startTimeMs) ? endTimeMs-startTimeMs : 0) event.set('[timestamp]', timeStampMs) + event.set('[@timestamp]', timeStampMs) event.set('[firstPacket]', startTimeMs) event.set('[lastPacket]', endTimeMs) event.set('[length]', durationMs) diff --git a/logstash/pipelines/suricata/13_suricata_convert.conf b/logstash/pipelines/suricata/13_suricata_convert.conf index a3c2d1a9e..9204df1d3 100644 --- a/logstash/pipelines/suricata/13_suricata_convert.conf +++ b/logstash/pipelines/suricata/13_suricata_convert.conf @@ -2,12 +2,6 @@ filter { # set data types for fields that belong to various suricata logs - date { - id => "date_suricata_timestamp_match" - match => [ "[suricata][timestamp]", "ISO8601" ] - target => "[@timestamp]" - } - date { id => "date_suricata_timestamp_iso_match" match => [ "[suricata][timestamp]", "ISO8601" ] diff --git a/logstash/pipelines/zeek/11_zeek_logs.conf b/logstash/pipelines/zeek/11_zeek_logs.conf index 38cba1c8d..037629f77 100644 --- a/logstash/pipelines/zeek/11_zeek_logs.conf +++ b/logstash/pipelines/zeek/11_zeek_logs.conf @@ -3768,20 +3768,14 @@ filter { add_tag => [ "_missing_timestamp" ] } } - # convert @timestamp to UNIX to use native dashboards features - date { - id => "date_zeek_ts" - match => [ "[zeek][ts]", "UNIX" ] - target => "[@timestamp]" - } - # set firstPacket to timestamp, lastPacket to timestamp + duration - # @timestamp is date type, - # timestamp, firstPacket, lastPacket are UNIX epoch milliseconds + # @timestamp, timestamp, firstPacket, lastPacket are UNIX epoch milliseconds ruby { id => "ruby_zeek_timestamp_calc" - code => "event.set('[timestamp]', (1000*event.get('[zeek][ts]').to_f).round(0)) - event.set('[firstPacket]', event.get('[timestamp]'))" + code => "msTime = (1000*event.get('[zeek][ts]').to_f).round(0) + event.set('[timestamp]', msTime) + event.set('[@timestamp]', msTime) + event.set('[firstPacket]', msTime)" } if ([zeek][conn]) and ([zeek][conn][duration]) { diff --git a/scripts/control.py b/scripts/control.py index dd97a272e..a2b3e3c6b 100755 --- a/scripts/control.py +++ b/scripts/control.py @@ -440,7 +440,7 @@ def stop(wipe=False): 'arkime', 'bash', '-c', - 'curl -fs --output /dev/null -H"Content-Type: application/json" -XDELETE "http://$OS_HOST:$OS_PORT/_template/malcolm_template"', + 'curl -fs --output /dev/null -H"Content-Type: application/json" -XDELETE "http://$OS_HOST:$OS_PORT/_index_template/malcolm_template"', ], env=osEnv, debug=args.debug, diff --git a/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml b/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml index 1c4d6f053..69d7f7ddb 100644 --- a/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml +++ b/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml @@ -10,8 +10,6 @@ filebeat.inputs: symlinks: true fields_under_root: true tags: ["_filebeat_zeek"] - fields: - type: "session" compression_level: 0 exclude_lines: ['^\s*#'] scan_frequency: ${BEAT_SCAN_FREQUENCY:10s} @@ -30,8 +28,6 @@ filebeat.inputs: symlinks: true fields_under_root: true tags: ["_filebeat_suricata"] - fields: - type: "session" compression_level: 0 scan_frequency: ${BEAT_SCAN_FREQUENCY:10s} clean_inactive: ${BEAT_CLEAN_INACTIVE:180m} From 0470406ff48fa544a9c08aae0c2138f07768d96a Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 27 May 2022 14:14:29 -0600 Subject: [PATCH 009/122] work in progress for opensearch v2 --- dashboards/malcolm_template.json | 1 + dashboards/scripts/index-refresh.py | 81 ++++++++++--------- .../pipelines/suricata/11_suricata_logs.conf | 6 +- logstash/pipelines/zeek/11_zeek_logs.conf | 5 +- scripts/control.py | 2 +- 5 files changed, 50 insertions(+), 45 deletions(-) diff --git a/dashboards/malcolm_template.json b/dashboards/malcolm_template.json index 410f7160c..67e4659cf 100644 --- a/dashboards/malcolm_template.json +++ b/dashboards/malcolm_template.json @@ -10,6 +10,7 @@ "properties": { "firstPacket": { "type": "date" }, "lastPacket": { "type": "date" }, + "@timestamp": { "type": "date" }, "timestamp": { "type": "date" }, "client.domain": { "type": "keyword" }, "destination.domain": { "type": "keyword" }, diff --git a/dashboards/scripts/index-refresh.py b/dashboards/scripts/index-refresh.py index f06349b56..64451057a 100755 --- a/dashboards/scripts/index-refresh.py +++ b/dashboards/scripts/index-refresh.py @@ -12,7 +12,7 @@ GET_INDEX_PATTERN_INFO_URI = 'api/saved_objects/_find' GET_FIELDS_URI = 'api/index_patterns/_fields_for_wildcard' PUT_INDEX_PATTERN_URI = 'api/saved_objects/index-pattern' -OS_GET_TEMPLATE_URI = '_template' +OS_GET_TEMPLATE_URI = '_index_template' GET_SHARDS_URL = '_cat/shards?h=index,state' SHARD_UNASSIGNED_STATUS = 'UNASSIGNED' @@ -157,44 +157,47 @@ def main(): '{}/{}/{}'.format(args.opensearchUrl, OS_GET_TEMPLATE_URI, args.template) ) getTemplateResponse.raise_for_status() - getTemplateInfo = getTemplateResponse.json()[args.template]['mappings']['properties'] - - # a field should be merged if it's not already in the list we have from Dashboards, and it's - # in the list of types we're merging (leave more complex types like nested and geolocation - # to be handled naturally as the data shows up) - for field in getTemplateInfo: - mergeFieldTypes = ("date", "float", "integer", "ip", "keyword", "long", "short", "text") - if ( - (field not in fieldsNames) - and ('type' in getTemplateInfo[field]) - and (getTemplateInfo[field]['type'] in mergeFieldTypes) - ): - - # create field dict in same format as those returned by GET_FIELDS_URI above - mergedFieldInfo = {} - mergedFieldInfo['name'] = field - mergedFieldInfo['esTypes'] = [getTemplateInfo[field]['type']] - if ( - (getTemplateInfo[field]['type'] == 'float') - or (getTemplateInfo[field]['type'] == 'integer') - or (getTemplateInfo[field]['type'] == 'long') - or (getTemplateInfo[field]['type'] == 'short') - ): - mergedFieldInfo['type'] = 'number' - elif (getTemplateInfo[field]['type'] == 'keyword') or ( - getTemplateInfo[field]['type'] == 'text' - ): - mergedFieldInfo['type'] = 'string' - else: - mergedFieldInfo['type'] = getTemplateInfo[field]['type'] - mergedFieldInfo['searchable'] = True - mergedFieldInfo['aggregatable'] = "text" not in mergedFieldInfo['esTypes'] - mergedFieldInfo['readFromDocValues'] = mergedFieldInfo['aggregatable'] - fieldsNames.append(field) - getFieldsList.append(mergedFieldInfo) - - # elif debug: - # eprint('Not merging {}: {}'.format(field, json.dumps(getTemplateInfo[field]))) + getTemplateResponseJson = getTemplateResponse.json() + if 'index_templates' in getTemplateResponseJson: + for template in getTemplateResponseJson['index_templates']: + getTemplateInfo = template['index_template']['template']['mappings']['properties'] + + # a field should be merged if it's not already in the list we have from Dashboards, and it's + # in the list of types we're merging (leave more complex types like nested and geolocation + # to be handled naturally as the data shows up) + for field in getTemplateInfo: + mergeFieldTypes = ("date", "float", "integer", "ip", "keyword", "long", "short", "text") + if ( + (field not in fieldsNames) + and ('type' in getTemplateInfo[field]) + and (getTemplateInfo[field]['type'] in mergeFieldTypes) + ): + + # create field dict in same format as those returned by GET_FIELDS_URI above + mergedFieldInfo = {} + mergedFieldInfo['name'] = field + mergedFieldInfo['esTypes'] = [getTemplateInfo[field]['type']] + if ( + (getTemplateInfo[field]['type'] == 'float') + or (getTemplateInfo[field]['type'] == 'integer') + or (getTemplateInfo[field]['type'] == 'long') + or (getTemplateInfo[field]['type'] == 'short') + ): + mergedFieldInfo['type'] = 'number' + elif (getTemplateInfo[field]['type'] == 'keyword') or ( + getTemplateInfo[field]['type'] == 'text' + ): + mergedFieldInfo['type'] = 'string' + else: + mergedFieldInfo['type'] = getTemplateInfo[field]['type'] + mergedFieldInfo['searchable'] = True + mergedFieldInfo['aggregatable'] = "text" not in mergedFieldInfo['esTypes'] + mergedFieldInfo['readFromDocValues'] = mergedFieldInfo['aggregatable'] + fieldsNames.append(field) + getFieldsList.append(mergedFieldInfo) + + # elif debug: + # eprint('Not merging {}: {}'.format(field, json.dumps(getTemplateInfo[field]))) except Exception as e: eprint('"{}" raised for "{}", skipping template merge'.format(str(e), args.template)) diff --git a/logstash/pipelines/suricata/11_suricata_logs.conf b/logstash/pipelines/suricata/11_suricata_logs.conf index eaab37064..4e9611794 100644 --- a/logstash/pipelines/suricata/11_suricata_logs.conf +++ b/logstash/pipelines/suricata/11_suricata_logs.conf @@ -64,7 +64,6 @@ filter { # suricata.timestamp - ISO8601-formatted string # suricata.flow.start - ISO8601-formatted string # suricata.flow.end - ISO8601-formatted string - # @timestamp - epoch millseconds # timestamp - epoch millseconds # firstPacket - epoch millseconds # lastPacket - epoch millseconds @@ -85,15 +84,16 @@ filter { id => "ruby_suricata_timestamp_calc" init => "require 'time'; require 'date';" code => " - timeStampMs = (1000*DateTime.parse(event.get('[suricata][timestamp]')).to_time.to_f).round(0) + timpStamp = DateTime.parse(event.get('[suricata][timestamp]')).to_time + timeStampMs = (1000*timpStamp.to_f).round(0) startTimeStr = event.get('[suricata][flow][start]') endTimeStr = event.get('[suricata][flow][end]') ageMs = 1000*event.get('[suricata][flow][age]').to_i startTimeMs = startTimeStr.nil? ? timeStampMs : (1000*DateTime.parse(startTimeStr).to_time.to_f).round(0) endTimeMs = endTimeStr.nil? ? timeStampMs : (1000*DateTime.parse(endTimeStr).to_time.to_f).round(0) durationMs = (ageMs > 0) ? ageMs : ((endTimeMs > startTimeMs) ? endTimeMs-startTimeMs : 0) + event.set('[@timestamp]', LogStash::Timestamp.at(timpStamp)) event.set('[timestamp]', timeStampMs) - event.set('[@timestamp]', timeStampMs) event.set('[firstPacket]', startTimeMs) event.set('[lastPacket]', endTimeMs) event.set('[length]', durationMs) diff --git a/logstash/pipelines/zeek/11_zeek_logs.conf b/logstash/pipelines/zeek/11_zeek_logs.conf index 037629f77..70f51ad45 100644 --- a/logstash/pipelines/zeek/11_zeek_logs.conf +++ b/logstash/pipelines/zeek/11_zeek_logs.conf @@ -3769,12 +3769,13 @@ filter { } # set firstPacket to timestamp, lastPacket to timestamp + duration - # @timestamp, timestamp, firstPacket, lastPacket are UNIX epoch milliseconds + # timestamp, firstPacket, lastPacket are UNIX epoch milliseconds ruby { id => "ruby_zeek_timestamp_calc" + init => "require 'time'" code => "msTime = (1000*event.get('[zeek][ts]').to_f).round(0) event.set('[timestamp]', msTime) - event.set('[@timestamp]', msTime) + event.set('[@timestamp]', LogStash::Timestamp.at(Time.strptime(msTime.to_s, '%Q'))) event.set('[firstPacket]', msTime)" } diff --git a/scripts/control.py b/scripts/control.py index a2b3e3c6b..51eac62e8 100755 --- a/scripts/control.py +++ b/scripts/control.py @@ -430,7 +430,7 @@ def stop(wipe=False): osEnv['TMPDIR'] = MalcolmTmpPath if wipe: - # attempt to DELETE _template/malcolm_template in OpenSearch + # attempt to DELETE _index_template/malcolm_template in OpenSearch err, out = run_process( [ dockerComposeBin, From d559e43d8ab9f5818f296c76568b44dfd7d01270 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 27 May 2022 14:43:59 -0600 Subject: [PATCH 010/122] work in progress for opensearch v2 --- dashboards/malcolm_template.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dashboards/malcolm_template.json b/dashboards/malcolm_template.json index 67e4659cf..c884f911f 100644 --- a/dashboards/malcolm_template.json +++ b/dashboards/malcolm_template.json @@ -46,6 +46,7 @@ } }, "dns.header_flags": { "type": "keyword" }, + "dns.host": { "type": "keyword" }, "dns.id": { "type": "keyword" }, "dns.op_code": { "type": "keyword" }, "dns.question.class": { "type": "keyword" }, @@ -111,6 +112,7 @@ "network.transport": { "type": "keyword" }, "network.type": { "type": "keyword" }, "network.vlan.id": { "type": "keyword" }, + "node": { "type": "keyword" }, "related.hash": { "type": "keyword" }, "related.hosts": { "type": "keyword" }, "related.ip": { "type": "ip" }, From 0405079e4c2732d390fd3c7684bc71d3c2115256 Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 31 May 2022 10:26:59 -0600 Subject: [PATCH 011/122] work in progress on opensearch v2 --- .../viewer_db_opensearchv2_keyword_hack.patch | 19 +++++++++++++++++++ .../4a073440-b286-11eb-a4d4-09fa12a6ebd4.json | 12 ++++++------ .../abdd7550-2c7c-40dc-947e-f6d186a158c4.json | 8 ++++---- .../d2dd0180-06b1-11ec-8c6b-353266ade330.json | 4 ++-- dashboards/malcolm_template.json | 6 ++++++ 5 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 arkime/patch/viewer_db_opensearchv2_keyword_hack.patch diff --git a/arkime/patch/viewer_db_opensearchv2_keyword_hack.patch b/arkime/patch/viewer_db_opensearchv2_keyword_hack.patch new file mode 100644 index 000000000..4f93580cf --- /dev/null +++ b/arkime/patch/viewer_db_opensearchv2_keyword_hack.patch @@ -0,0 +1,19 @@ +diff --git a/viewer/db.js b/viewer/db.js +index 1eebc559..45645fd3 100644 +--- a/viewer/db.js ++++ b/viewer/db.js +@@ -382,7 +382,13 @@ function fixSessionFields (fields, unflatten) { + delete fields[f]; + for (let i = 0; i < path.length; i++) { + if (i === path.length - 1) { +- key[path[i]] = value; ++ // HACKITY-HACK-HACK ++ // This was breaking in OpenSearch v2. @andywick says he doesn't think the .keyword ++ // fields should be showing up here, but here we are. ++ // "Doctor, it hurts when I do this." "Don't do that." ++ if (path[i] !== 'keyword') { ++ key[path[i]] = value; ++ } + break; + } else if (key[path[i]] === undefined) { + key[path[i]] = {}; diff --git a/dashboards/dashboards/4a073440-b286-11eb-a4d4-09fa12a6ebd4.json b/dashboards/dashboards/4a073440-b286-11eb-a4d4-09fa12a6ebd4.json index 7c7fa054b..9abfc3449 100644 --- a/dashboards/dashboards/4a073440-b286-11eb-a4d4-09fa12a6ebd4.json +++ b/dashboards/dashboards/4a073440-b286-11eb-a4d4-09fa12a6ebd4.json @@ -165,7 +165,7 @@ "version": "WzEyODcsMV0=", "attributes": { "title": "EtherCAT - Source", - "visState": "{\"title\":\"EtherCAT - Source\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"source.mac\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":200,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"srcOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Source OUI\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "visState": "{\"title\":\"EtherCAT - Source\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"source.mac\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":200,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"source.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Source OUI\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":2,\"direction\":\"desc\"}}}}", "description": "", "version": 1, @@ -195,7 +195,7 @@ "version": "WzEzMDYsMV0=", "attributes": { "title": "EtherCAT - Destination", - "visState": "{\"title\":\"EtherCAT - Destination\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"destination.mac\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":200,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"dstOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Destination OUI\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "visState": "{\"title\":\"EtherCAT - Destination\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"destination.mac\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":200,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"destination.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Destination OUI\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":2,\"direction\":\"desc\"}}}}", "description": "", "version": 1, @@ -289,9 +289,9 @@ "hits": 0, "columns": [ "source.mac", - "srcOui", + "source.oui", "destination.mac", - "dstOui", + "destination.oui", "event.action", "zeek.ecat_registers.register_type", "zeek.ecat_registers.server_addr", @@ -330,9 +330,9 @@ "event.dataset", "event.action", "source.mac", - "srcOui", + "source.oui", "destination.mac", - "dstOui" + "destination.oui" ], "sort": [], "version": 1, diff --git a/dashboards/dashboards/abdd7550-2c7c-40dc-947e-f6d186a158c4.json b/dashboards/dashboards/abdd7550-2c7c-40dc-947e-f6d186a158c4.json index e6f4c5bdc..004a82b15 100644 --- a/dashboards/dashboards/abdd7550-2c7c-40dc-947e-f6d186a158c4.json +++ b/dashboards/dashboards/abdd7550-2c7c-40dc-947e-f6d186a158c4.json @@ -723,7 +723,7 @@ "version": "WzU1OSwxXQ==", "attributes": { "title": "Connections - Source MAC Address", - "visState": "{\"title\":\"Connections - Source MAC Address\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"source.mac\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"MAC Address\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"srcOui\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Organizational Unique Identifier\"}}]}", + "visState": "{\"title\":\"Connections - Source MAC Address\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"source.mac\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"MAC Address\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"source.oui\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Organizational Unique Identifier\"}}]}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", "description": "", "version": 1, @@ -753,7 +753,7 @@ "version": "WzU2MCwxXQ==", "attributes": { "title": "Connections - Destination MAC Address", - "visState": "{\"title\":\"Connections - Destination MAC Address\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"destination.mac\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"MAC Address\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"dstOui\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Organizational Unique Identifier\"}}]}", + "visState": "{\"title\":\"Connections - Destination MAC Address\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"destination.mac\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"MAC Address\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"destination.oui\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Organizational Unique Identifier\"}}]}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", "description": "", "version": 1, @@ -783,7 +783,7 @@ "version": "WzU2MSwxXQ==", "attributes": { "title": "Connections - Top 10 - Total Bytes By Source MAC OUI", - "visState": "{\"title\":\"Connections - Top 10 - Total Bytes By Source MAC OUI\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":false,\"truncate\":100,\"rotate\":75},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Destination IP Address\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"orderBucketsBySum\":false,\"radiusRatio\":9,\"scale\":\"linear\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Total Bytes\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"showCircles\":true,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Total Bytes\"},\"type\":\"value\"}],\"type\":\"histogram\",\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"dimensions\":{\"x\":{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Source MAC OUI\",\"aggType\":\"terms\"},\"y\":[{\"accessor\":2,\"format\":{\"id\":\"number\",\"params\":{}},\"params\":{},\"label\":\"Total Bytes\",\"aggType\":\"max\"}],\"series\":[{\"accessor\":1,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Source MAC OUI\",\"aggType\":\"terms\"}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"network.bytes\",\"customLabel\":\"Total Bytes\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"srcOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC OUI\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"srcOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC OUI\"}}]}", + "visState": "{\"title\":\"Connections - Top 10 - Total Bytes By Source MAC OUI\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":false,\"truncate\":100,\"rotate\":75},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Destination IP Address\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"orderBucketsBySum\":false,\"radiusRatio\":9,\"scale\":\"linear\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Total Bytes\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"showCircles\":true,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Total Bytes\"},\"type\":\"value\"}],\"type\":\"histogram\",\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"dimensions\":{\"x\":{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Source MAC OUI\",\"aggType\":\"terms\"},\"y\":[{\"accessor\":2,\"format\":{\"id\":\"number\",\"params\":{}},\"params\":{},\"label\":\"Total Bytes\",\"aggType\":\"max\"}],\"series\":[{\"accessor\":1,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Source MAC OUI\",\"aggType\":\"terms\"}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"network.bytes\",\"customLabel\":\"Total Bytes\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"source.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC OUI\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"source.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source MAC OUI\"}}]}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -813,7 +813,7 @@ "version": "WzU2MiwxXQ==", "attributes": { "title": "Connections - Top 10 - Total Bytes By Destination MAC OUI", - "visState": "{\"title\":\"Connections - Top 10 - Total Bytes By Destination MAC OUI\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":false,\"truncate\":100,\"rotate\":75},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Destination IP Address\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"orderBucketsBySum\":false,\"radiusRatio\":9,\"scale\":\"linear\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Total Bytes\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"showCircles\":true,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Total Bytes\"},\"type\":\"value\"}],\"type\":\"histogram\",\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"dimensions\":{\"x\":{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Destination MAC OUI\",\"aggType\":\"terms\"},\"y\":[{\"accessor\":2,\"format\":{\"id\":\"number\",\"params\":{}},\"params\":{},\"label\":\"Total Bytes\",\"aggType\":\"max\"}],\"series\":[{\"accessor\":1,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Destination MAC OUI\",\"aggType\":\"terms\"}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"network.bytes\",\"customLabel\":\"Total Bytes\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dstOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC OUI\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dstOui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC OUI\"}}]}", + "visState": "{\"title\":\"Connections - Top 10 - Total Bytes By Destination MAC OUI\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":false,\"truncate\":100,\"rotate\":75},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Destination IP Address\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"orderBucketsBySum\":false,\"radiusRatio\":9,\"scale\":\"linear\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Total Bytes\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"showCircles\":true,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Total Bytes\"},\"type\":\"value\"}],\"type\":\"histogram\",\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"dimensions\":{\"x\":{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Destination MAC OUI\",\"aggType\":\"terms\"},\"y\":[{\"accessor\":2,\"format\":{\"id\":\"number\",\"params\":{}},\"params\":{},\"label\":\"Total Bytes\",\"aggType\":\"max\"}],\"series\":[{\"accessor\":1,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"label\":\"Destination MAC OUI\",\"aggType\":\"terms\"}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"network.bytes\",\"customLabel\":\"Total Bytes\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"destination.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC OUI\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"destination.oui\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination MAC OUI\"}}]}", "uiStateJSON": "{}", "description": "", "version": 1, diff --git a/dashboards/dashboards/d2dd0180-06b1-11ec-8c6b-353266ade330.json b/dashboards/dashboards/d2dd0180-06b1-11ec-8c6b-353266ade330.json index de75a2838..100538b71 100644 --- a/dashboards/dashboards/d2dd0180-06b1-11ec-8c6b-353266ade330.json +++ b/dashboards/dashboards/d2dd0180-06b1-11ec-8c6b-353266ade330.json @@ -434,7 +434,7 @@ "version": "WzY2MiwxXQ==", "attributes": { "title": "Severity - Destination OUI", - "visState": "{\"title\":\"Severity - Destination OUI\",\"type\":\"table\",\"aggs\":[{\"id\":\"3\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"dstOui\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":255,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination OUI\"},\"schema\":\"bucket\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"event.risk_score\",\"customLabel\":\"High Raw Severity\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "visState": "{\"title\":\"Severity - Destination OUI\",\"type\":\"table\",\"aggs\":[{\"id\":\"3\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"destination.oui\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":255,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination OUI\"},\"schema\":\"bucket\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"event.risk_score\",\"customLabel\":\"High Raw Severity\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":2,\"direction\":\"desc\"}}}}", "description": "", "version": 1, @@ -464,7 +464,7 @@ "version": "WzY2MywxXQ==", "attributes": { "title": "Severity - Source OUI", - "visState": "{\"title\":\"Severity - Source OUI\",\"type\":\"table\",\"aggs\":[{\"id\":\"3\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"srcOui\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":255,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source OUI\"},\"schema\":\"bucket\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"event.risk_score\",\"customLabel\":\"High Raw Severity\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "visState": "{\"title\":\"Severity - Source OUI\",\"type\":\"table\",\"aggs\":[{\"id\":\"3\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"source.oui\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":255,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source OUI\"},\"schema\":\"bucket\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"event.risk_score\",\"customLabel\":\"High Raw Severity\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":2,\"direction\":\"desc\"}}}}", "description": "", "version": 1, diff --git a/dashboards/malcolm_template.json b/dashboards/malcolm_template.json index c884f911f..61108a656 100644 --- a/dashboards/malcolm_template.json +++ b/dashboards/malcolm_template.json @@ -18,6 +18,7 @@ "destination.geo.continent_code": { "type": "keyword" }, "destination.geo.country_code2": { "type": "keyword" }, "destination.geo.country_code3": { "type": "keyword" }, + "destination.geo.country_iso_code": { "type": "keyword" }, "destination.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, "destination.geo.dma_code": { "type": "short" }, "destination.geo.ip": { "type": "ip" }, @@ -73,6 +74,8 @@ "event.outcome": { "type": "keyword" }, "event.provider": { "type": "keyword" }, "event.result": { "type": "keyword" }, + "event.risk_score": { "type": "float" }, + "event.severity": { "type": "integer" }, "event.severity_tags": { "type": "keyword" }, "event.start": { "type": "date" }, "file.accessed": { "type": "date" }, @@ -113,6 +116,7 @@ "network.type": { "type": "keyword" }, "network.vlan.id": { "type": "keyword" }, "node": { "type": "keyword" }, + "protocol": { "type": "keyword" }, "related.hash": { "type": "keyword" }, "related.hosts": { "type": "keyword" }, "related.ip": { "type": "ip" }, @@ -131,6 +135,7 @@ "source.geo.continent_code": { "type": "keyword" }, "source.geo.country_code2": { "type": "keyword" }, "source.geo.country_code3": { "type": "keyword" }, + "source.geo.country_iso_code": { "type": "keyword" }, "source.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, "source.geo.dma_code": { "type": "short" }, "source.geo.ip": { "type": "ip" }, @@ -688,6 +693,7 @@ "suricata.tunnel.src_ip": { "type": "ip" }, "suricata.tunnel.src_port": { "type": "integer" }, "suricata.tx_id": { "type": "keyword" }, + "tags": { "type": "keyword" }, "threat.framework": { "type": "keyword" }, "threat.tactic.id": { "type": "keyword" }, "threat.tactic.name": { "type": "keyword" }, From 6c5b140364b06a6d386714f4a83174c0ea9ea65f Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 31 May 2022 12:40:56 -0600 Subject: [PATCH 012/122] work in progress on opensearch v2 --- dashboards/malcolm_template.json | 4 +++- logstash/pipelines/zeek/11_zeek_logs.conf | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dashboards/malcolm_template.json b/dashboards/malcolm_template.json index 61108a656..e5fd8b889 100644 --- a/dashboards/malcolm_template.json +++ b/dashboards/malcolm_template.json @@ -117,6 +117,8 @@ "network.vlan.id": { "type": "keyword" }, "node": { "type": "keyword" }, "protocol": { "type": "keyword" }, + "quic.host": { "type": "keyword" }, + "quic.version": { "type": "keyword" }, "related.hash": { "type": "keyword" }, "related.hosts": { "type": "keyword" }, "related.ip": { "type": "ip" }, @@ -1656,7 +1658,7 @@ "zeek.tds_rpc.parameters": { "type": "nested" }, "zeek.tds_rpc.procedure_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, "zeek.tds_sql_batch.header_type": { "type": "keyword" }, - "zeek.tds_sql_batch.query": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.tds_sql_batch.query": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, "zeek.tftp.block_acked": { "type": "integer" }, "zeek.tftp.block_sent": { "type": "integer" }, "zeek.tftp.error_code": { "type": "integer" }, diff --git a/logstash/pipelines/zeek/11_zeek_logs.conf b/logstash/pipelines/zeek/11_zeek_logs.conf index 70f51ad45..2bdcf6399 100644 --- a/logstash/pipelines/zeek/11_zeek_logs.conf +++ b/logstash/pipelines/zeek/11_zeek_logs.conf @@ -5669,6 +5669,15 @@ filter { if ([zeek][ssl][subject_full]) { mutate { id => "mutate_add_field_ecs_zeek_tls_subject_full" add_field => { "[tls][server][subject]" => "%{[zeek][ssl][subject_full]}" } } } + } else if ([log_source] == "stun") { + ############################################################################################################################# + # stun.log specific logic + + if ([zeek][stun][attr_type]) { + mutate { id => "mutate_split_field_zeek_stun_attr_type" + split => { "[zeek][stun][attr_type]" => "," } } + } + } else if ([log_source] == "stun_nat") { ############################################################################################################################# # stun_nat.log specific logic From f8fc0d6edaee69cc59f78f174ff542400a4c2bab Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 31 May 2022 13:48:53 -0600 Subject: [PATCH 013/122] work in progress on opensearch v2 --- .../scripts/create-arkime-sessions-index.sh | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index d01bdb479..3c700f116 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -80,7 +80,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then if [[ -f "$INDEX_POLICY_FILE" ]]; then # make API call to define index management policy # https://opensearch.org/docs/latest/im-plugin/ism/api/#create-policy - curl -w "\n" -L --silent --output /dev/null --show-error -XPUT -H "Content-Type: application/json" "$OS_URL/_plugins/_ism/policies/$INDEX_POLICY_NAME" -d "@$INDEX_POLICY_FILE" + curl -w "\n" -L --silent --output /dev/null --show-error -XPUT -H "Content-Type: application/json" "$OS_URL/_opendistro/_ism/policies/$INDEX_POLICY_NAME" -d "@$INDEX_POLICY_FILE" if [[ -f "$MALCOLM_TEMPLATE_FILE_ORIG" ]]; then # insert OpenSearch ISM stuff into index template settings @@ -163,7 +163,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # Create anomaly detectors here for i in /opt/anomaly_detectors/*.json; do - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done # trigger a start/stop for the dummy detector to make sure the .opendistro-anomaly-detection-state index gets created @@ -176,15 +176,15 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then DUMMY_DETECTOR_ID="" until [[ -n "$DUMMY_DETECTOR_ID" ]]; do sleep 5 - DUMMY_DETECTOR_ID="$(curl -L --fail --silent --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/_search" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "{ \"query\": { \"match\": { \"name\": \"$DUMMY_DETECTOR_NAME\" } } }" | jq '.. | ._id? // empty' 2>/dev/null | head -n 1 | tr -d '"')" + DUMMY_DETECTOR_ID="$(curl -L --fail --silent --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/_search" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "{ \"query\": { \"match\": { \"name\": \"$DUMMY_DETECTOR_NAME\" } } }" | jq '.. | ._id? // empty' 2>/dev/null | head -n 1 | tr -d '"')" done set -e if [[ -n "$DUMMY_DETECTOR_ID" ]]; then - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_start" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_start" -H 'osd-xsrf:true' -H 'Content-type:application/json' sleep 10 - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_stop" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_stop" -H 'osd-xsrf:true' -H 'Content-type:application/json' sleep 10 - curl -L --silent --output /dev/null --show-error -XDELETE "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XDELETE "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID" -H 'osd-xsrf:true' -H 'Content-type:application/json' fi echo "OpenSearch anomaly detectors creation complete!" @@ -195,11 +195,11 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # destinations for i in /opt/alerting/destinations/*.json; do - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/destinations" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/destinations" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done # get example destination ID ALERTING_EXAMPLE_DESTINATION_ID=$(curl -L --silent --show-error -XGET -H 'osd-xsrf:true' -H 'Content-type:application/json' \ - "$OS_URL/_plugins/_alerting/destinations" | \ + "$OS_URL/_opendistro/_alerting/destinations" | \ jq -r ".destinations[] | select(.name == \"$ALERTING_EXAMPLE_DESTINATION_NAME\").id" | \ head -n 1) @@ -210,11 +210,11 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # replace example destination ID in monitor definition TMP_MONITOR_FILENAME="$(mktemp)" sed "s/ALERTING_EXAMPLE_DESTINATION_ID/$ALERTING_EXAMPLE_DESTINATION_ID/g" "$i" > "$TMP_MONITOR_FILENAME" - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$TMP_MONITOR_FILENAME" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$TMP_MONITOR_FILENAME" rm -f "$TMP_MONITOR_FILENAME" else # insert monitor as defined - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" fi done From 554a7d3bcad3fa196ed1d468b149e9cf980f8b0a Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 11:10:46 -0600 Subject: [PATCH 014/122] major work on opensearch v2, going to have to get beats via logstash now rather than directly with elasticsearch output --- Dockerfiles/dashboards-helper.Dockerfile | 4 +- Dockerfiles/logstash.Dockerfile | 4 +- README.md | 2 +- arkime/wise/source.zeeklogs.js | 2 +- .../scripts/create-arkime-sessions-index.sh | 28 +++++-- .../templates/malcolm_beats_template.json | 36 ++++++++ .../{ => templates}/malcolm_template.json | 0 docker-compose.yml | 1 + docs/contributing/README.md | 4 +- filebeat/filebeat-nginx.yml | 47 ++++------- filebeat/filebeat.yml | 8 ++ logstash/patterns/nginx | 1 + logstash/pipelines/beats/01_input_beats.conf | 15 ++++ logstash/pipelines/beats/11_beats_logs.conf | 12 +++ logstash/pipelines/beats/98_finalize.conf | 83 +++++++++++++++++++ .../pipelines/beats/99_beats_forward.conf | 5 ++ logstash/pipelines/enrichment/11_lookups.conf | 32 ------- .../enrichment/20_enriched_to_ecs.conf | 6 -- ...7_make_unique.conf => 96_make_unique.conf} | 0 .../{98_arkimize.conf => 97_arkimize.conf} | 12 +++ .../pipelines/enrichment/98_finalize.conf | 54 ++++++++++++ .../external/99_opensearch_output.conf | 4 +- .../output/99_opensearch_output.conf | 4 +- logstash/scripts/logstash-start.sh | 2 +- scripts/control.py | 11 +++ 25 files changed, 292 insertions(+), 85 deletions(-) create mode 100644 dashboards/templates/malcolm_beats_template.json rename dashboards/{ => templates}/malcolm_template.json (100%) create mode 100644 logstash/patterns/nginx create mode 100644 logstash/pipelines/beats/01_input_beats.conf create mode 100644 logstash/pipelines/beats/11_beats_logs.conf create mode 100644 logstash/pipelines/beats/98_finalize.conf create mode 100644 logstash/pipelines/beats/99_beats_forward.conf rename logstash/pipelines/enrichment/{97_make_unique.conf => 96_make_unique.conf} (100%) rename logstash/pipelines/enrichment/{98_arkimize.conf => 97_arkimize.conf} (75%) create mode 100644 logstash/pipelines/enrichment/98_finalize.conf diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index 6ef03995f..8d278dfc0 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -63,7 +63,7 @@ ADD dashboards/alerting /opt/alerting ADD dashboards/maps /opt/maps ADD dashboards/scripts /data/ ADD dashboards/supervisord.conf /etc/supervisord.conf -ADD dashboards/malcolm_template.json /data/malcolm_template.json +ADD dashboards/templates /opt/templates ADD shared/bin/docker-uid-gid-setup.sh /usr/local/bin/ ADD shared/bin/opensearch_status.sh /data/ ADD shared/bin/opensearch_index_size_prune.py /data/ @@ -84,7 +84,7 @@ RUN apk update --no-cache && \ addgroup ${PUSER} tty ; \ addgroup ${PUSER} shadow ; \ mkdir -p /data/init && \ - chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/maps /data/init /opt/anomaly_detectors && \ + chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/templates /opt/maps /data/init /opt/anomaly_detectors && \ chmod 755 /data/*.sh /data/*.py /data/init && \ chmod 400 /opt/maps/* && \ (echo -e "*/2 * * * * /data/create-arkime-sessions-index.sh\n0 10 * * * /data/index-refresh.py --template malcolm_template --unassigned\n30 */6 * * * /data/refresh-auxiliary-index-patterns.sh\n*/20 * * * * /data/opensearch_index_size_prune.py" > ${SUPERCRONIC_CRONTAB}) diff --git a/Dockerfiles/logstash.Dockerfile b/Dockerfiles/logstash.Dockerfile index c7beb572a..28cdafae6 100644 --- a/Dockerfiles/logstash.Dockerfile +++ b/Dockerfiles/logstash.Dockerfile @@ -65,7 +65,7 @@ ENV PUSER_PRIV_DROP true ENV TERM xterm ARG LOGSTASH_ENRICHMENT_PIPELINE=enrichment -ARG LOGSTASH_PARSE_PIPELINE_ADDRESSES=zeek-parse,suricata-parse +ARG LOGSTASH_PARSE_PIPELINE_ADDRESSES=zeek-parse,suricata-parse,beats-parse ARG LOGSTASH_OPENSEARCH_PIPELINE_ADDRESS_INTERNAL=internal-os ARG LOGSTASH_OPENSEARCH_PIPELINE_ADDRESS_EXTERNAL=external-os ARG LOGSTASH_OPENSEARCH_OUTPUT_PIPELINE_ADDRESSES=internal-os,external-os @@ -101,6 +101,7 @@ ADD logstash/maps/*.yaml /etc/ ADD logstash/config/log4j2.properties /usr/share/logstash/config/ ADD logstash/config/logstash.yml /usr/share/logstash/config/logstash.orig.yml ADD logstash/pipelines/ /usr/share/logstash/malcolm-pipelines/ +ADD logstash/patterns/ /usr/share/logstash/malcolm-patterns/ ADD logstash/ruby/ /usr/share/logstash/malcolm-ruby/ ADD logstash/scripts /usr/local/bin/ ADD logstash/supervisord.conf /etc/supervisord.conf @@ -113,6 +114,7 @@ RUN bash -c "chmod --silent 755 /usr/local/bin/*.sh /usr/local/bin/*.py || true" chown --silent -R ${PUSER}:root \ /usr/share/logstash/config/logstash*.yml \ /usr/share/logstash/malcolm-pipelines \ + /usr/share/logstash/malcolm-patterns \ /usr/share/logstash/malcolm-ruby \ /logstash-persistent-queue && \ echo "Retrieving and parsing Wireshark manufacturer database..." && \ diff --git a/README.md b/README.md index 0be58f792..72cc1dfec 100644 --- a/README.md +++ b/README.md @@ -1658,7 +1658,7 @@ Returns version information about Malcolm and version/[health](https://opensearc `GET` - /mapi/fields -Returns the (very long) list of fields known to Malcolm, comprised of data from Arkime's [`fields` table](https://arkime.com/apiv3#fields-api), the Malcolm [OpenSearch template](./dashboards/malcolm_template.json) and the OpenSearch Dashboards index pattern API. +Returns the (very long) list of fields known to Malcolm, comprised of data from Arkime's [`fields` table](https://arkime.com/apiv3#fields-api), the Malcolm [OpenSearch template](./dashboards/templates/malcolm_template.json) and the OpenSearch Dashboards index pattern API.
Example output: diff --git a/arkime/wise/source.zeeklogs.js b/arkime/wise/source.zeeklogs.js index e58b9c71c..c665a91a3 100644 --- a/arkime/wise/source.zeeklogs.js +++ b/arkime/wise/source.zeeklogs.js @@ -24,7 +24,7 @@ class MalcolmSource extends WISESource { // there are several files where the definitions of fields live: make sure to keep them in sync // - source.malcolm.js (this file) // - Arkime's config.ini - // - Opensearch Dashboards's malcolm_template.json + // - Malcolm's Opensearch malcolm_template.json // todo: look at expressions for things that have parents (tunnelling, parent files, etc.) // todo: look at IP types and use ipPrint? diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index 3c700f116..40f59fdec 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -36,8 +36,9 @@ OTHER_INDEX_PATTERNS=( INDEX_POLICY_FILE="/data/init/index-management-policy.json" INDEX_POLICY_FILE_HOST="/data/index-management-policy.json" +MALCOLM_TEMPLATES_DIR="/opt/templates" +MALCOLM_TEMPLATE_FILE_ORIG="$MALCOLM_TEMPLATES_DIR/malcolm_template.json" MALCOLM_TEMPLATE_FILE="/data/init/malcolm_template.json" -MALCOLM_TEMPLATE_FILE_ORIG="/data/malcolm_template.json" INDEX_POLICY_NAME=${ISM_POLICY_NAME:-"session_index_policy"} DEFAULT_DASHBOARD=${OPENSEARCH_DEFAULT_DASHBOARD:-"0ad3d7c2-3441-485e-9dfe-dbb22e84e576"} @@ -94,10 +95,24 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then cp "$MALCOLM_TEMPLATE_FILE_ORIG" "$MALCOLM_TEMPLATE_FILE" fi - # load malcolm_template containing malcolm data source field type mappings (merged from /data/malcolm_template.json to /data/init/malcolm_template.json in dashboard-helpers on startup) + # load malcolm_template containing malcolm data source field type mappings (merged from /opt/templates/malcolm_template.json to /data/init/malcolm_template.json in dashboard-helpers on startup) curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" \ "$OS_URL/_index_template/malcolm_template" -d "@$MALCOLM_TEMPLATE_FILE" 2>&1 + # import other templates as well (and get info for creating their index patterns) + for i in "$MALCOLM_TEMPLATES_DIR"/*.json; do + TEMP_BASENAME="$(basename "$i")" + TEMP_FILENAME="${TEMP_BASENAME%.*}" + if [[ "$TEMP_FILENAME" != "malcolm_template" ]]; then + echo "Importing template \"$TEMP_FILENAME\"..." + if curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" "$OS_URL/_index_template/$TEMP_FILENAME" -d "@$i" 2>&1; then + for TEMPLATE_INDEX_PATTERN in $(jq '.index_patterns[]' "$i" | tr -d '"'); do + OTHER_INDEX_PATTERNS+=("$TEMPLATE_INDEX_PATTERN;$TEMPLATE_INDEX_PATTERN;@timestamp") + done + fi + fi + done + echo "Importing index pattern..." # From https://github.com/elastic/kibana/issues/3709 @@ -113,11 +128,11 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then "$DASHB_URL/api/opensearch-dashboards/settings/defaultIndex" \ -d"{\"value\":\"$INDEX_PATTERN_ID\"}" - echo "Creating other index patterns..." for i in ${OTHER_INDEX_PATTERNS[@]}; do IDX_ID="$(echo "$i" | cut -d';' -f1)" IDX_NAME="$(echo "$i" | cut -d';' -f2)" IDX_TIME_FIELD="$(echo "$i" | cut -d';' -f3)" + echo "Creating index pattern \"$IDX_NAME\"..." curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" -H "osd-xsrf: anything" \ "$DASHB_URL/api/saved_objects/index-pattern/$IDX_ID" \ -d"{\"attributes\":{\"title\":\"$IDX_NAME\",\"timeFieldName\":\"$IDX_TIME_FIELD\"}}" 2>&1 @@ -125,14 +140,15 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then echo "Importing OpenSearch Dashboards saved objects..." - # install default dashboards, index patterns, etc. + # install default dashboards for i in /opt/dashboards/*.json; do curl -L --silent --output /dev/null --show-error -XPOST "$DASHB_URL/api/opensearch-dashboards/dashboards/import?force=true" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done - # At the moment Beats won't import dashboards into OpenSearch dashboards + + # beats will no longer import its dashbaords into OpenSearch # (see opensearch-project/OpenSearch-Dashboards#656 and # opensearch-project/OpenSearch-Dashboards#831). As such, we're going to - # manually add load those dashboards in /opt/dashboards/beats as well. + # manually add load our dashboards in /opt/dashboards/beats as well. for i in /opt/dashboards/beats/*.json; do curl -L --silent --output /dev/null --show-error -XPOST "$DASHB_URL/api/opensearch-dashboards/dashboards/import?force=true" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json new file mode 100644 index 000000000..b323e577c --- /dev/null +++ b/dashboards/templates/malcolm_beats_template.json @@ -0,0 +1,36 @@ +{ + "index_patterns" : ["malcolm_beats_-*"], + "template" :{ + "mappings": { + "properties": { + "@timestamp": { "type": "date" }, + "timestamp": { "type": "date" }, + "client.address": { "type": "keyword" }, + "ecs.version": { "type": "keyword" }, + "event.category": { "type": "keyword" }, + "event.dataset": { "type": "keyword" }, + "event.hash": { "type": "keyword" }, + "event.id": { "type": "keyword" }, + "event.ingested": { "type": "date" }, + "event.kind": { "type": "keyword" }, + "event.module": { "type": "keyword" }, + "event.original": { "type": "keyword", "index": false, "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "event.outcome": { "type": "keyword" }, + "event.provider": { "type": "keyword" }, + "http.request.body.bytes": { "type": "long" }, + "http.request.method": { "type": "keyword" }, + "http.request.mime_type": { "type": "keyword" }, + "http.request.referrer": { "type": "keyword" }, + "http.response.body.bytes": { "type": "long" }, + "http.response.mime_type": { "type": "keyword" }, + "http.response.status_code": { "type": "long" }, + "http.version": { "type": "keyword" }, + "log.file.path": { "type": "keyword" }, + "node": { "type": "keyword" }, + "related.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "url.original": { "type": "keyword" }, + "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } } + } + } + } +} diff --git a/dashboards/malcolm_template.json b/dashboards/templates/malcolm_template.json similarity index 100% rename from dashboards/malcolm_template.json rename to dashboards/templates/malcolm_template.json diff --git a/docker-compose.yml b/docker-compose.yml index f4b9f7b88..e95029f96 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -298,6 +298,7 @@ services: volumes: - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.orig.yml:ro - ./logstash/pipelines:/usr/share/logstash/malcolm-pipelines.available:ro + - ./logstash/patterns:/usr/share/logstash/malcolm-patterns:ro - ./logstash/ruby:/usr/share/logstash/malcolm-ruby:ro - ./logstash/maps/malcolm_severity.yaml:/etc/malcolm_severity.yaml:ro - ./logstash/certs/logstash.keystore:/usr/share/logstash/config/logstash.keystore:rw diff --git a/docs/contributing/README.md b/docs/contributing/README.md index 90eb30029..7b6693b95 100644 --- a/docs/contributing/README.md +++ b/docs/contributing/README.md @@ -142,7 +142,7 @@ Although OpenSearch is a NoSQL database and as-such is "unstructured" and "schem * [`arkime/etc/config.ini`](../../arkime/etc/config.ini) - follow existing examples in the `[custom-fields]` and `[custom-views]` sections in order for [Arkime](https://arkime.com) to be aware of your new fields * [`arkime/wise/source.zeeklogs.js`](../../arkime/wise/source.zeeklogs.js) - add new fields to the `allFields` array for Malcolm to create Arkime [value actions](https://arkime.com/settings#right-click) for your fields -* [`dashboards/malcolm_template.json`](../../arkime/wise/source.zeeklogs.js) - add new fields to the giant list of fields in this document in order for them to be defined as part of the `arkime_sessions3-*` [index template](https://opensearch.org/docs/latest/opensearch/index-templates/) used by Arkime and OpenSearch Dashboards in Malcolm +* [`dashboards/templates/malcolm_template.json`](../../arkime/wise/source.zeeklogs.js) - add new fields to the giant list of fields in this document in order for them to be defined as part of the `arkime_sessions3-*` [index template](https://opensearch.org/docs/latest/opensearch/index-templates/) used by Arkime and OpenSearch Dashboards in Malcolm When possible, I recommend you to use (or at least take inspiration from) the [Elastic Common Schema (ECS) Reference](https://www.elastic.co/guide/en/ecs/current/index.html) when deciding how to define new field names. @@ -205,7 +205,7 @@ Logstash can then be easily extended to add more [`logstash/pipelines`](../../lo So, in order to add a new **parse pipeline** for `cooltool` after tweaking [`filebeat.yml`](../../filebeat/filebeat.yml) as described above, create a `cooltool` directory under [`logstash/pipelines`](../../logstash/pipelines) which follows the same pattern as the `zeek` parse pipeline. This directory will have an input file (tiny), a filter file (possibly large), and an output file (tiny). In your filter file, be sure to set the field [`event.hash`](https://www.elastic.co/guide/en/ecs/master/ecs-event.html#field-event-hash) to a unique value to identify indexed documents in OpenSearch; the [fingerprint filter](https://www.elastic.co/guide/en/logstash/current/plugins-filters-fingerprint.html) may be useful for this. -Finally, in your `docker-compose` files, set a new `LOGSTASH_PARSE_PIPELINE_ADDRESSES` environment variable under `logstash-variables` to `cooltool-parse,zeek-parse,suricata-parse` (assuming you named the pipeline address from the previous step `cooltool-parse`) so that logs sent from `filebeat` to `logstash` are forwarded to all parse pipelines. +Finally, in your `docker-compose` files, set a new `LOGSTASH_PARSE_PIPELINE_ADDRESSES` environment variable under `logstash-variables` to `cooltool-parse,zeek-parse,suricata-parse,beats-parse` (assuming you named the pipeline address from the previous step `cooltool-parse`) so that logs sent from `filebeat` to `logstash` are forwarded to all parse pipelines. ### Parsing new Zeek logs diff --git a/filebeat/filebeat-nginx.yml b/filebeat/filebeat-nginx.yml index d69e8147c..3f439080e 100644 --- a/filebeat/filebeat-nginx.yml +++ b/filebeat/filebeat-nginx.yml @@ -2,7 +2,11 @@ name: "${PCAP_NODE_NAME:malcolm}" -#================================ Modules ====================================== +logging.metrics.enabled: false + +#================================ Modules and Processors ======================= + +#-------------------------- NGINX access and error logs ------------------------ filebeat.modules: - module: nginx access: @@ -12,33 +16,18 @@ filebeat.modules: enabled: true var.paths: ["${FILEBEAT_NGINX_LOG_PATH:/data/nginx}/error.log*"] -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["opensearch:9200"] - indices: - - index: "filebeat-%{[agent.version]}-nginx-%{+yyyy.MM.dd}" - when.equals: - event.module: "nginx" - -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 +processors: + - add_tags: + tags: [_malcolm_beats] -#============================== Dashboards ===================================== -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "/usr/share/filebeat/kibana" -setup.kibana: - host: "dashboards:5601" - path: "/dashboards" +#================================ Outputs ====================================== -#================================ Logging ====================================== -logging.metrics.enabled: false +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["logstash:5044"] + ssl.enabled: ${BEATS_SSL:false} + ssl.certificate_authorities: ["/certs/ca.crt"] + ssl.certificate: "/certs/client.crt" + ssl.key: "/certs/client.key" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "none" diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml index 63ad43268..f45bc0aa9 100644 --- a/filebeat/filebeat.yml +++ b/filebeat/filebeat.yml @@ -4,6 +4,9 @@ name: "${PCAP_NODE_NAME:malcolm}" logging.metrics.enabled: false +#================================ Inputs ======================================= + +#-------------------------- Current "real" Zeek logs --------------------------- filebeat.inputs: - type: log paths: @@ -24,6 +27,7 @@ filebeat.inputs: close_eof: ${FILEBEAT_CLOSE_EOF:true} clean_removed: ${FILEBEAT_CLEAN_REMOVED:true} +#-------------------------- Carved file signature hit log ---------------------- # signatures(_carved).log is different, as it comes from file carving and is # "live" regardless of whether the other *.log files that may be processed # after the fact. The most important difference is close_eof, as @@ -48,6 +52,7 @@ filebeat.inputs: close_eof: false clean_removed: true +#-------------------------- Suricata EVE JSON logs ----------------------------- - type: log paths: - ${FILEBEAT_SURICATA_LOG_PATH:/data/suricata}/eve-*.json @@ -64,6 +69,9 @@ filebeat.inputs: close_eof: ${FILEBEAT_CLOSE_EOF:true} clean_removed: ${FILEBEAT_CLEAN_REMOVED:true} +#================================ Outputs ====================================== + +#-------------------------- Logstash Output ------------------------------------ output.logstash: hosts: ["logstash:5044"] ssl.enabled: ${BEATS_SSL:false} diff --git a/logstash/patterns/nginx b/logstash/patterns/nginx new file mode 100644 index 000000000..084bd7520 --- /dev/null +++ b/logstash/patterns/nginx @@ -0,0 +1 @@ +NGINX_ACCESS %{IPORHOST:[client][address]} - %{DATA:[related][user]} \[%{HTTPDATE:[timestamp]}\] "%{WORD:[http][request][method]} %{DATA:[url][original]} HTTP/%{NUMBER:[http][version]}" %{NUMBER:[http][response][status_code]} %{NUMBER:[http][response][body][bytes]} "%{DATA:[http][request][referrer]}" "%{DATA:[user_agent][original]}" diff --git a/logstash/pipelines/beats/01_input_beats.conf b/logstash/pipelines/beats/01_input_beats.conf new file mode 100644 index 000000000..ec857b93e --- /dev/null +++ b/logstash/pipelines/beats/01_input_beats.conf @@ -0,0 +1,15 @@ +input { + pipeline { + address => "beats-parse" + } +} + +filter { + # this pipeline only needs to see logs from other misc. beats used by Malcolm + if ("_malcolm_beats" in [tags]) { + mutate { id => "mutate_filebeat_malcolm_beats_forward_tag_remove" + remove_tag => [ "_malcolm_beats", "beats_input_codec_plain_applied" ] } + } else { + drop { id => "drop_not_malcolm_beats" } + } +} diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf new file mode 100644 index 000000000..76afa8bd7 --- /dev/null +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -0,0 +1,12 @@ +filter { + + if ([event][module] == "nginx") and ([event][dataset] == "nginx.access") { + grok { + id => "grok_beat_nginx_access" + patterns_dir => "/usr/share/logstash/malcolm-patterns" + match => { "message" => "%{NGINX_ACCESS}" } + # remove_tag => ["_grokparsefailure"] + } + } + +} \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf new file mode 100644 index 000000000..c452a45e5 --- /dev/null +++ b/logstash/pipelines/beats/98_finalize.conf @@ -0,0 +1,83 @@ +filter { + + # store message as event.original + mutate { id => "mutate_rename_beats_message" + rename => { "[message]" => "[event][original]" } } + + if (![event][hash]) { + # create a repeatable fingerprint for document ID into event.hash + fingerprint { + id => "fingerprint_malcolm_beats_message" + source => [ "[event][original]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v1" + method => "MURMUR3_128" + base64encode => true + } + } + + # arkime doesn't like / in the record ID + mutate { id => "mutate_beats_gsub_event_hash_urlsafe" + gsub => [ "[event][hash]", "/", "_", + "[event][hash]", "\+", "-", + "[event][hash]", "=+", "" ] } + + # this identifies which node the log came from + if ([beat][name]) { + mutate { id => "mutate_beats_add_field_beat_name_node" + add_field => { "[node]" => "%{[beat][name]}" } } + } else if ([host][name]) { + mutate { id => "mutate_beats_add_field_host_name_node" + add_field => { "[node]" => "%{[host][name]}" } } + } else { + mutate { id => "mutate_beats_add_field_logstash_node" + add_field => { "[node]" => "malcolm" } } + } + + # trim path portion of originating log file + if ([log][file][path]) { mutate { id => "mutate_beats_gsub_log_file_path_directory" + gsub => [ "[log][file][path]", "^.*/", "" ] } } + + # remove some fields we don't need (or don't need anymore) + mutate { + id => "mutate_beats_remove_field_useless" + remove_field => [ + "[beat]", + "[agent][ephemeral_id]", + "[agent][id]", + "[agent][type]", + "[agent][version]", + "[input][type]", + "[log][offset]", + "[prospector]" + ] + } + + # event.provider + if (![event][provider]) { mutate { id => "mutate_add_field_event_provider_beats" + add_field => { "[event][provider]" => "malcolm" } } } + + # event.module + if (![event][module]) { mutate { id => "mutate_add_field_event_module_beats" + add_field => { "[event][module]" => "beats" } } } + + # event.ingested + if (![event][ingested]) { + ruby { + id => "ruby_beats_event_ingested_now" + init => "require 'time'" + code => "event.set('[event][ingested]', Time.now.to_f)" + } + date { + id => "date_beats_event_ingested_conv" + match => [ "[event][ingested]", "UNIX" ] + target => "[event][ingested]" + } + } + + # this field is used to determine opensearch index prefix + mutate { id => "mutate_add_malcolm_beats_index_prefix" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_%{[event][module]}" } } + +} \ No newline at end of file diff --git a/logstash/pipelines/beats/99_beats_forward.conf b/logstash/pipelines/beats/99_beats_forward.conf new file mode 100644 index 000000000..3f0d792f5 --- /dev/null +++ b/logstash/pipelines/beats/99_beats_forward.conf @@ -0,0 +1,5 @@ +output { + pipeline { + send_to => [_MALCOLM_OPENSEARCH_OUTPUT_PIPELINES_] + } +} diff --git a/logstash/pipelines/enrichment/11_lookups.conf b/logstash/pipelines/enrichment/11_lookups.conf index 138f78a3b..2196db69e 100644 --- a/logstash/pipelines/enrichment/11_lookups.conf +++ b/logstash/pipelines/enrichment/11_lookups.conf @@ -468,36 +468,4 @@ filter { add_tag => [ "ics" ] } } - # this identifies which node the log came from - if ([beat][name]) { - mutate { id => "mutate_add_field_beat_name_node" - add_field => { "[node]" => "%{[beat][name]}" } } - } else if ([host][name]) { - mutate { id => "mutate_add_field_host_name_node" - add_field => { "[node]" => "%{[host][name]}" } } - } else { - mutate { id => "mutate_add_field_logstash_node" - add_field => { "[node]" => "malcolm" } } - } - - # trim path portion of originating log file - if ([log][file][path]) { mutate { id => "mutate_gsub_log_file_path_directory" - gsub => [ "[log][file][path]", "^.*/", "" ] } } - - # remove some fields we don't need (or don't need anymore) - mutate { - id => "mutate_remove_field_beats_useless" - remove_field => [ - "[beat]", - "[agent][ephemeral_id]", - "[agent][id]", - "[agent][type]", - "[agent][version]", - "[input][type]", - "[log][offset]", - "[prospector]", - "[message]" - ] - } - } # end Filter diff --git a/logstash/pipelines/enrichment/20_enriched_to_ecs.conf b/logstash/pipelines/enrichment/20_enriched_to_ecs.conf index 54fe6faec..0e383adeb 100644 --- a/logstash/pipelines/enrichment/20_enriched_to_ecs.conf +++ b/logstash/pipelines/enrichment/20_enriched_to_ecs.conf @@ -163,10 +163,4 @@ filter { if (![event][provider]) { mutate { id => "mutate_add_field_event_provider_enrichment" add_field => { "[event][provider]" => "malcolm" } } } - # arkime doesn't like / in the record ID - mutate { id => "mutate_gsub_event_hash_urlsafe" - gsub => [ "[event][hash]", "/", "_", - "[event][hash]", "\+", "-", - "[event][hash]", "=+", "" ] } - } diff --git a/logstash/pipelines/enrichment/97_make_unique.conf b/logstash/pipelines/enrichment/96_make_unique.conf similarity index 100% rename from logstash/pipelines/enrichment/97_make_unique.conf rename to logstash/pipelines/enrichment/96_make_unique.conf diff --git a/logstash/pipelines/enrichment/98_arkimize.conf b/logstash/pipelines/enrichment/97_arkimize.conf similarity index 75% rename from logstash/pipelines/enrichment/98_arkimize.conf rename to logstash/pipelines/enrichment/97_arkimize.conf index 22b279464..3486e3404 100644 --- a/logstash/pipelines/enrichment/98_arkimize.conf +++ b/logstash/pipelines/enrichment/97_arkimize.conf @@ -39,4 +39,16 @@ filter { # note that if so, the arkime "user" field may conflict with ECS here } + # this identifies which node the log came from + if ([beat][name]) { + mutate { id => "mutate_add_field_beat_name_node" + add_field => { "[node]" => "%{[beat][name]}" } } + } else if ([host][name]) { + mutate { id => "mutate_add_field_host_name_node" + add_field => { "[node]" => "%{[host][name]}" } } + } else { + mutate { id => "mutate_add_field_logstash_node" + add_field => { "[node]" => "malcolm" } } + } + } \ No newline at end of file diff --git a/logstash/pipelines/enrichment/98_finalize.conf b/logstash/pipelines/enrichment/98_finalize.conf new file mode 100644 index 000000000..eee3e28fd --- /dev/null +++ b/logstash/pipelines/enrichment/98_finalize.conf @@ -0,0 +1,54 @@ +# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. + +# final adjustments before forwarding + +filter { + + # this field is used to determine opensearch index prefix + if (![@metadata][malcolm_opensearch_index_prefix]) { + mutate { id => "mutate_add_arkime_sessions_index_prefix" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "arkime_sessions3" } } + } + + # event.hash is used for document ID, it really needed to be set by now + if (![event][hash]) { + fingerprint { + id => "fingerprint_fallback_event_hash" + source => [ "[message]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v1" + method => "MURMUR3_128" + base64encode => true + } + mutate { id => "tag_missing_event_hash" + add_tag => [ "_missing_event_hash" ] } + } + + # arkime doesn't like / in the record ID + mutate { id => "mutate_gsub_event_hash_urlsafe" + gsub => [ "[event][hash]", "/", "_", + "[event][hash]", "\+", "-", + "[event][hash]", "=+", "" ] } + + # trim path portion of originating log file + if ([log][file][path]) { mutate { id => "mutate_gsub_log_file_path_directory" + gsub => [ "[log][file][path]", "^.*/", "" ] } } + + # remove some fields we don't need (or don't need anymore) + mutate { + id => "mutate_remove_field_beats_useless" + remove_field => [ + "[beat]", + "[agent][ephemeral_id]", + "[agent][id]", + "[agent][type]", + "[agent][version]", + "[input][type]", + "[log][offset]", + "[prospector]", + "[message]" + ] + } + +} \ No newline at end of file diff --git a/logstash/pipelines/external/99_opensearch_output.conf b/logstash/pipelines/external/99_opensearch_output.conf index 0a6abf80d..e95c82079 100644 --- a/logstash/pipelines/external/99_opensearch_output.conf +++ b/logstash/pipelines/external/99_opensearch_output.conf @@ -1,13 +1,13 @@ output { opensearch { - id => "output_external_opensearch_arkime" + id => "output_external_opensearch_malcolm" hosts => "${OS_EXTERNAL_HOSTS}" ssl => "${OS_EXTERNAL_SSL:true}" ssl_certificate_verification => "${OS_EXTERNAL_SSL_CERTIFICATE_VERIFICATION:false}" user => "${OS_EXTERNAL_USER:}" password => "${OS_EXTERNAL_PASSWORD:}" manage_template => false - index => "arkime_sessions3-%{+YYMMdd}" + index => "%{[@metadata][malcolm_opensearch_index_prefix]}-%{+YYMMdd}" document_id => "%{+YYMMdd}-%{[event][hash]}" } } diff --git a/logstash/pipelines/output/99_opensearch_output.conf b/logstash/pipelines/output/99_opensearch_output.conf index f5ac6ddd4..9c9555895 100644 --- a/logstash/pipelines/output/99_opensearch_output.conf +++ b/logstash/pipelines/output/99_opensearch_output.conf @@ -1,9 +1,9 @@ output { opensearch { - id => "output_opensearch_arkime" + id => "output_opensearch_malcolm" hosts => "${OS_HOSTS:opensearch:9200}" manage_template => false - index => "arkime_sessions3-%{+YYMMdd}" + index => "%{[@metadata][malcolm_opensearch_index_prefix]}-%{+YYMMdd}" document_id => "%{+YYMMdd}-%{[event][hash]}" } } diff --git a/logstash/scripts/logstash-start.sh b/logstash/scripts/logstash-start.sh index b42d9ae00..23cb44d9f 100755 --- a/logstash/scripts/logstash-start.sh +++ b/logstash/scripts/logstash-start.sh @@ -26,7 +26,7 @@ INPUT_MIXED_MAP="/usr/share/logstash/config/net-map.json" ENRICHMENT_PIPELINE=${LOGSTASH_ENRICHMENT_PIPELINE:-"enrichment"} # the name of the pipeline(s) to which input will send logs for parsing (comma-separated list, no quotes) -PARSE_PIPELINE_ADDRESSES=${LOGSTASH_PARSE_PIPELINE_ADDRESSES:-"zeek-parse,suricata-parse"} +PARSE_PIPELINE_ADDRESSES=${LOGSTASH_PARSE_PIPELINE_ADDRESSES:-"zeek-parse,suricata-parse,beats-parse"} # pipeline addresses for forwarding from Logstash to OpenSearch (both "internal" and "external" pipelines) export OPENSEARCH_PIPELINE_ADDRESS_INTERNAL=${LOGSTASH_OPENSEARCH_PIPELINE_ADDRESS_INTERNAL:-"internal-os"} diff --git a/scripts/control.py b/scripts/control.py index 51eac62e8..2a249c2c5 100755 --- a/scripts/control.py +++ b/scripts/control.py @@ -314,6 +314,17 @@ def logs(): re.VERBOSE | re.IGNORECASE, ) + # logs we don't want to eliminate, but we don't want to repeat ad-nauseum + # TODO: not implemented yet + dupeRegEx = re.compile( + r""" + .+( + Maybe the destination pipeline is down or stopping + ) + """, + re.VERBOSE | re.IGNORECASE, + ) + serviceRegEx = re.compile(r'^(?P.+?\|)\s*(?P.*)$') # increase COMPOSE_HTTP_TIMEOUT to be ridiculously large so docker-compose never times out the TTY doing debug output From 2c9146dcfede85ab549b04952ab430ef63f2f4f7 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 11:13:48 -0600 Subject: [PATCH 015/122] major work on opensearch v2, going to have to get beats via logstash now rather than directly with elasticsearch output --- dashboards/templates/malcolm_beats_template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index b323e577c..e538b4b88 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -1,5 +1,5 @@ { - "index_patterns" : ["malcolm_beats_-*"], + "index_patterns" : ["malcolm_beats_*"], "template" :{ "mappings": { "properties": { From 71e4d2cfdf8a1df1e7188ef02ff8205e2ac50181 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 11:28:59 -0600 Subject: [PATCH 016/122] major work on opensearch v2, going to have to get beats via logstash now rather than directly with elasticsearch output --- .../templates/malcolm_beats_template.json | 1 + logstash/pipelines/beats/11_beats_logs.conf | 27 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index e538b4b88..4736e9bb5 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -28,6 +28,7 @@ "log.file.path": { "type": "keyword" }, "node": { "type": "keyword" }, "related.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "tags": { "type": "keyword" }, "url.original": { "type": "keyword" }, "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 76afa8bd7..0d223c5a7 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -1,12 +1,25 @@ filter { - if ([event][module] == "nginx") and ([event][dataset] == "nginx.access") { - grok { - id => "grok_beat_nginx_access" - patterns_dir => "/usr/share/logstash/malcolm-patterns" - match => { "message" => "%{NGINX_ACCESS}" } - # remove_tag => ["_grokparsefailure"] + if ([event][module] == "nginx") { + + if ([event][dataset] == "nginx.access") { + grok { + id => "grok_beat_nginx_access" + patterns_dir => "/usr/share/logstash/malcolm-patterns" + match => { "message" => "%{NGINX_ACCESS}" } + # remove_tag => ["_grokparsefailure"] + } + } + + if ([timestamp]) { + date { + id => "date_beats_nginx_timestamp" + match => [ "[timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ] + target => "[@timestamp]" + remove_field => [ "[timestamp]" ] + } } - } + + } # nginx } \ No newline at end of file From c384b8cbb31fee35b3589d91745031af2813d74b Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 11:59:11 -0600 Subject: [PATCH 017/122] nginx parsing error --- logstash/patterns/nginx | 1 + logstash/pipelines/beats/11_beats_logs.conf | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/logstash/patterns/nginx b/logstash/patterns/nginx index 084bd7520..310607480 100644 --- a/logstash/patterns/nginx +++ b/logstash/patterns/nginx @@ -1 +1,2 @@ NGINX_ACCESS %{IPORHOST:[client][address]} - %{DATA:[related][user]} \[%{HTTPDATE:[timestamp]}\] "%{WORD:[http][request][method]} %{DATA:[url][original]} HTTP/%{NUMBER:[http][version]}" %{NUMBER:[http][response][status_code]} %{NUMBER:[http][response][body][bytes]} "%{DATA:[http][request][referrer]}" "%{DATA:[user_agent][original]}" +NGINX_ERROR (?%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:[log][level]}\] %{POSINT:[process][pid]}#%{NUMBER:[process][thread][id]}: %{GREEDYDATA:[message]} diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 0d223c5a7..1f5352d06 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -10,11 +10,19 @@ filter { # remove_tag => ["_grokparsefailure"] } } + if ([event][dataset] == "nginx.error") { + grok { + id => "grok_beat_nginx_error" + patterns_dir => "/usr/share/logstash/malcolm-patterns" + match => { "message" => "%{NGINX_ERROR}" } + # remove_tag => ["_grokparsefailure"] + } + } if ([timestamp]) { date { id => "date_beats_nginx_timestamp" - match => [ "[timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ] + match => [ "[timestamp]", "dd/MMM/yyyy:HH:mm:ss Z", "yyyy/MM/dd HH:mm:ss" ] target => "[@timestamp]" remove_field => [ "[timestamp]" ] } From 3d4e2856fc838c684d6e5c4d75dc9c6c8f4bab47 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 12:06:27 -0600 Subject: [PATCH 018/122] nginx parsing error --- logstash/patterns/nginx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logstash/patterns/nginx b/logstash/patterns/nginx index 310607480..0454add76 100644 --- a/logstash/patterns/nginx +++ b/logstash/patterns/nginx @@ -1,2 +1,2 @@ NGINX_ACCESS %{IPORHOST:[client][address]} - %{DATA:[related][user]} \[%{HTTPDATE:[timestamp]}\] "%{WORD:[http][request][method]} %{DATA:[url][original]} HTTP/%{NUMBER:[http][version]}" %{NUMBER:[http][response][status_code]} %{NUMBER:[http][response][body][bytes]} "%{DATA:[http][request][referrer]}" "%{DATA:[user_agent][original]}" -NGINX_ERROR (?%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:[log][level]}\] %{POSINT:[process][pid]}#%{NUMBER:[process][thread][id]}: %{GREEDYDATA:[message]} +NGINX_ERROR (?%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:[log][level]}\] %{POSINT:[process][pid]}#%{NUMBER:[process][thread][id]}: %{GREEDYDATA:[error][message]} From 7b76b95e88d2b96215369551ef207e3c4e07ffcc Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 13:59:17 -0600 Subject: [PATCH 019/122] polish up the nginx access bits --- Dockerfiles/logstash.Dockerfile | 1 + .../dashboards/beats/Filebeat-nginx-logs.json | 250 ++++++---- .../beats/Filebeat-nginx-overview.json | 440 ++++++++++++------ .../templates/malcolm_beats_template.json | 27 +- dashboards/templates/malcolm_template.json | 5 + logstash/pipelines/beats/01_input_beats.conf | 2 +- logstash/pipelines/beats/12_lookups.conf | 19 + logstash/pipelines/beats/98_finalize.conf | 11 + logstash/pipelines/enrichment/11_lookups.conf | 8 + 9 files changed, 527 insertions(+), 236 deletions(-) create mode 100644 logstash/pipelines/beats/12_lookups.conf diff --git a/Dockerfiles/logstash.Dockerfile b/Dockerfiles/logstash.Dockerfile index 28cdafae6..8837fce8c 100644 --- a/Dockerfiles/logstash.Dockerfile +++ b/Dockerfiles/logstash.Dockerfile @@ -90,6 +90,7 @@ RUN yum install -y epel-release && \ logstash-filter-json logstash-filter-prune logstash-filter-http \ logstash-filter-grok logstash-filter-geoip logstash-filter-uuid \ logstash-filter-kv logstash-filter-mutate logstash-filter-dissect \ + logstash-filter-useragent \ logstash-input-beats logstash-output-elasticsearch && \ logstash-plugin install /opt/logstash-filter-fingerprint/logstash-filter-fingerprint-3.4.0.gem && \ rm -rf /opt/logstash-filter-fingerprint /root/.cache /root/.gem /root/.bundle diff --git a/dashboards/dashboards/beats/Filebeat-nginx-logs.json b/dashboards/dashboards/beats/Filebeat-nginx-logs.json index 565bff507..a0c81a2ef 100644 --- a/dashboards/dashboards/beats/Filebeat-nginx-logs.json +++ b/dashboards/dashboards/beats/Filebeat-nginx-logs.json @@ -1,99 +1,175 @@ { - "objects": [ + "version": "2.0.0", + "objects": [ + { + "id": "046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:53:27.884Z", + "version": "WzEwMTgsMV0=", + "attributes": { + "title": "nginx Access and Error Logs", + "hits": 0, + "description": "", + "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":16,\"w\":48,\"h\":15,\"i\":\"11\"},\"panelIndex\":\"11\",\"embeddableConfig\":{\"columns\":[\"log.level\",\"error.message\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":31,\"w\":48,\"h\":23,\"i\":\"16\"},\"panelIndex\":\"16\",\"embeddableConfig\":{\"columns\":[\"url.original\",\"http.request.method\",\"http.response.status_code\",\"http.response.body.bytes\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":4,\"w\":48,\"h\":12,\"i\":\"18\"},\"panelIndex\":\"18\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":4,\"i\":\"19\"},\"panelIndex\":\"19\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"}]", + "optionsJSON": "{\"darkTheme\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"version\":true,\"highlightAll\":true,\"filter\":[]}" + } + }, + "references": [ { - "attributes": { - "columns": [ - "log.level", - "message" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"highlightAll\": true, \"query\": {\"query\": \"event.module:nginx AND message:*\", \"language\": \"kuery\"}, \"version\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"fields\": {\"*\": {}}, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647}, \"index\": \"filebeat-*\"}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Nginx error logs [Filebeat Nginx] ECS", - "version": 1 - }, - "id": "9eb25600-a1f0-11e7-928f-5dbe6f6f5519-ecs", - "type": "search", - "version": 1 + "name": "panel_0", + "type": "search", + "id": "9eb25600-a1f0-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "columns": [ - "url.original", - "http.request.method", - "http.response.status_code", - "http.response.body.bytes" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"highlightAll\": true, \"query\": {\"query\": \"event.module:nginx AND url.original:*\", \"language\": \"kuery\"}, \"version\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"fields\": {\"*\": {}}, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647}, \"index\": \"filebeat-*\"}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Nginx access logs [Filebeat Nginx] ECS", - "version": 1 - }, - "id": "6d9e66d0-a1f0-11e7-928f-5dbe6f6f5519-ecs", - "type": "search", - "version": 4 + "name": "panel_1", + "type": "search", + "id": "6d9e66d0-a1f0-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Access logs over time [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"metrics\", \"params\": {\"axis_formatter\": \"number\", \"series\": [{\"formatter\": \"number\", \"chart_type\": \"line\", \"split_filters\": [{\"color\": \"#68BC00\", \"id\": \"1db649a0-a1f3-11e7-a062-a1c3587f4874\"}], \"seperate_axis\": 0, \"point_size\": 1, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"label\": \"Access logs\", \"axis_position\": \"right\", \"split_mode\": \"everything\", \"fill\": 0.5, \"stacked\": \"none\", \"terms_field\": \"url.original\", \"color\": \"#68BC00\", \"line_width\": 1, \"terms_order_by\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"time_field\": \"@timestamp\", \"filter\": \"event.module:nginx AND fileset.name:access\", \"show_grid\": 1, \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"type\": \"timeseries\", \"index_pattern\": \"filebeat-*\", \"axis_position\": \"left\", \"annotations\": [{\"index_pattern\": \"filebeat-*\", \"ignore_global_filters\": 1, \"id\": \"970b1420-a1f3-11e7-a062-a1c3587f4874\", \"time_field\": \"@timestamp\", \"icon\": \"fa-tag\", \"color\": \"#F00\", \"ignore_panel_filters\": 1}], \"background_color_rules\": [{\"id\": \"3189aa80-a1f3-11e7-a062-a1c3587f4874\"}], \"interval\": \"auto\", \"legend_position\": \"bottom\"}, \"aggs\": [], \"title\": \"Access logs over time [Filebeat Nginx] ECS\"}" - }, - "id": "1cfb1a80-a1f4-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 2 + "name": "panel_2", + "type": "visualization", + "id": "1cfb1a80-a1f4-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Dashboards [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"markdown\", \"params\": {\"markdown\": \"[Nginx logs overview](#/dashboard/55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs) | [Nginx access and error logs](#/dashboard/046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs)\", \"fontSize\": 12}, \"aggs\": [], \"title\": \"Dashboards [Filebeat Nginx] ECS\"}" - }, - "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 1 + "name": "panel_3", + "type": "visualization", + "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "9eb25600-a1f0-11e7-928f-5dbe6f6f5519-ecs", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:22.455Z", + "version": "WzgzMywxXQ==", + "attributes": { + "columns": [ + "log.level", + "error.message" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"query\":{\"query\":\"event.module:nginx AND error.message:*\",\"language\":\"kuery\"},\"version\":true,\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "nginx Error Logs", + "version": 1 + }, + "references": [ { - "attributes": { - "description": "Dashboard for the Filebeat Nginx module", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"search\", \"columns\": [\"log.level\", \"message\"], \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 11, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"9eb25600-a1f0-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 5}, {\"type\": \"search\", \"columns\": [\"url.original\", \"http.request.method\", \"http.response.status_code\", \"http.response.body.bytes\"], \"size_x\": 12, \"size_y\": 7, \"panelIndex\": 16, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"6d9e66d0-a1f0-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 8}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 18, \"id\": \"1cfb1a80-a1f4-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 2}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 1, \"panelIndex\": 19, \"id\": \"97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 1}]", - "timeRestore": false, - "title": "[Filebeat Nginx] Access and error logs ECS", - "uiStateJSON": "{}", - "version": 1 - }, - "id": "046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs", - "type": "dashboard", - "version": 2 + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" } - ], - "version": "6.0.0-beta2" + ], + "migrationVersion": { + "search": "7.9.3" + } + }, + { + "id": "6d9e66d0-a1f0-11e7-928f-5dbe6f6f5519-ecs", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:22.455Z", + "version": "WzgzNCwxXQ==", + "attributes": { + "columns": [ + "url.original", + "http.request.method", + "http.response.status_code", + "http.response.body.bytes" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"query\":{\"query\":\"event.module:nginx AND url.original:*\",\"language\":\"kuery\"},\"version\":true,\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "nginx Access Logs", + "version": 1 + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "search": "7.9.3" + } + }, + { + "id": "1cfb1a80-a1f4-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:22.455Z", + "version": "WzgzNSwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Access Over Time", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"metrics\",\"params\":{\"axis_formatter\":\"number\",\"series\":[{\"formatter\":\"number\",\"chart_type\":\"line\",\"split_filters\":[{\"color\":\"#68BC00\",\"id\":\"1db649a0-a1f3-11e7-a062-a1c3587f4874\"}],\"seperate_axis\":0,\"point_size\":1,\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"metrics\":[{\"type\":\"count\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"label\":\"Access logs\",\"axis_position\":\"right\",\"split_mode\":\"everything\",\"fill\":0.5,\"stacked\":\"none\",\"terms_field\":\"url.original\",\"color\":\"#68BC00\",\"line_width\":1,\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"split_color_mode\":\"gradient\"}],\"time_field\":\"@timestamp\",\"filter\":{\"query\":\"event.module:nginx AND fileset.name:access\",\"language\":\"lucene\"},\"show_grid\":1,\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"show_legend\":1,\"type\":\"timeseries\",\"index_pattern\":\"malcolm_beats_*\",\"axis_position\":\"left\",\"annotations\":[{\"index_pattern\":\"malcolm_beats_*\",\"ignore_global_filters\":1,\"id\":\"970b1420-a1f3-11e7-a062-a1c3587f4874\",\"time_field\":\"@timestamp\",\"icon\":\"fa-tag\",\"color\":\"#F00\",\"ignore_panel_filters\":1}],\"background_color_rules\":[{\"id\":\"3189aa80-a1f3-11e7-a062-a1c3587f4874\"}],\"interval\":\"auto\",\"legend_position\":\"bottom\"},\"aggs\":[],\"title\":\"nginx Access Over Time\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0NSwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Dashboards", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"markdown\",\"params\":{\"markdown\":\"[Nginx logs overview](#/dashboard/55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs) | [Nginx access and error logs](#/dashboard/046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs)\",\"fontSize\":12},\"aggs\":[],\"title\":\"nginx Dashboards\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + } + ] } \ No newline at end of file diff --git a/dashboards/dashboards/beats/Filebeat-nginx-overview.json b/dashboards/dashboards/beats/Filebeat-nginx-overview.json index 3034933c9..bba2d5857 100644 --- a/dashboards/dashboards/beats/Filebeat-nginx-overview.json +++ b/dashboards/dashboards/beats/Filebeat-nginx-overview.json @@ -1,169 +1,315 @@ { - "objects": [ + "version": "2.0.0", + "objects": [ + { + "id": "55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0NywxXQ==", + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"version\":true,\"highlightAll\":true}" + }, + "optionsJSON": "{\"darkTheme\": false}", + "panelsJSON": "[{\"panelIndex\":\"3\",\"panelRefName\":\"panel_0\",\"version\":\"7.3.0\",\"gridData\":{\"x\":36,\"y\":44,\"w\":12,\"h\":12,\"i\":\"3\"},\"embeddableConfig\":{}},{\"panelIndex\":\"4\",\"panelRefName\":\"panel_1\",\"version\":\"7.3.0\",\"gridData\":{\"x\":24,\"y\":44,\"w\":12,\"h\":12,\"i\":\"4\"},\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}}},{\"panelIndex\":\"8\",\"panelRefName\":\"panel_2\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":4,\"w\":48,\"h\":16,\"i\":\"8\"},\"embeddableConfig\":{\"mapZoom\":2,\"mapBounds\":{\"bottom_right\":{\"lat\":-7.362466865535738,\"lon\":245.39062500000003},\"top_left\":{\"lat\":77.07878389624943,\"lon\":-245.74218750000003}},\"mapCenter\":[50.51342652633956,-0.17578125],\"mapCollar\":{\"bottom_right\":{\"lat\":-49.583095,\"lon\":180},\"zoom\":2,\"top_left\":{\"lat\":90,\"lon\":-180}}}},{\"panelIndex\":\"13\",\"panelRefName\":\"panel_3\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":20,\"w\":48,\"h\":12,\"i\":\"13\"},\"embeddableConfig\":{}},{\"panelIndex\":\"14\",\"panelRefName\":\"panel_4\",\"version\":\"7.3.0\",\"gridData\":{\"x\":24,\"y\":32,\"w\":24,\"h\":12,\"i\":\"14\"},\"embeddableConfig\":{}},{\"panelIndex\":\"15\",\"panelRefName\":\"panel_5\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":32,\"w\":24,\"h\":12,\"i\":\"15\"},\"embeddableConfig\":{}},{\"panelIndex\":\"16\",\"panelRefName\":\"panel_6\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":44,\"w\":24,\"h\":12,\"i\":\"16\"},\"embeddableConfig\":{}},{\"panelIndex\":\"17\",\"panelRefName\":\"panel_7\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":4,\"i\":\"17\"},\"embeddableConfig\":{}}]", + "timeRestore": false, + "title": "nginx Overview", + "version": 1 + }, + "references": [ + { + "name": "panel_0", + "type": "visualization", + "id": "Nginx-Access-Browsers-ecs" + }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" - }, - "title": "Browsers breakdown [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"bottom\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true, \"shareYAxis\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"user_agent.name\"}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"3\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"user_agent.version\"}}], \"title\": \"Nginx Access Browsers ECS\"}" - }, - "id": "Nginx-Access-Browsers-ecs", - "type": "visualization", - "version": 1 + "name": "panel_1", + "type": "visualization", + "id": "Nginx-Access-OSes-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" - }, - "title": "Operating systems breakdown [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"bottom\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true, \"shareYAxis\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"user_agent.os.name\"}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"3\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"user_agent.os.version\"}}], \"title\": \"Nginx Access OSes ECS\"}" - }, - "id": "Nginx-Access-OSes-ecs", - "type": "visualization", - "version": 1 + "name": "panel_2", + "type": "visualization", + "id": "Nginx-Access-Map-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "Filebeat-Nginx-module-ecs", - "title": "Access Map [Filebeat Nginx] ECS", - "uiStateJSON": "{\"mapCenter\": [12.039320557540572, -0.17578125]}", - "version": 1, - "visState": "{\"type\": \"tile_map\", \"listeners\": {}, \"params\": {\"heatNormalizeData\": true, \"mapType\": \"Scaled Circle Markers\", \"heatRadius\": 25, \"mapZoom\": 2, \"heatMinOpacity\": 0.1, \"addTooltip\": true, \"heatBlur\": 15, \"wms\": {\"options\": {\"layers\": \"0\", \"styles\": \"\", \"transparent\": true, \"format\": \"image/png\", \"version\": \"1.3.0\", \"attribution\": \"Maps provided by USGS\"}, \"enabled\": false, \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"}, \"heatMaxZoom\": 16, \"legendPosition\": \"bottomright\", \"mapCenter\": [15, 5], \"isDesaturated\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"geohash_grid\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"autoPrecision\": true, \"field\": \"source.geo.location\"}}], \"title\": \"Nginx Access Map ECS\"}" - }, - "id": "Nginx-Access-Map-ecs", - "type": "visualization", - "version": 1 + "name": "panel_3", + "type": "visualization", + "id": "b70b1b20-a1f4-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Response codes over time [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"metrics\", \"params\": {\"index_pattern\": \"filebeat-*\", \"series\": [{\"formatter\": \"number\", \"chart_type\": \"bar\", \"split_filters\": [{\"color\": \"#68BC00\", \"filter\": \"http.response.status_code:[200 TO 299]\", \"label\": \"200s\", \"id\": \"5acdc750-a29d-11e7-a062-a1c3587f4874\"}, {\"color\": \"rgba(252,196,0,1)\", \"filter\": \"http.response.status_code:[300 TO 399]\", \"label\": \"300s\", \"id\": \"6efd2ae0-a29d-11e7-a062-a1c3587f4874\"}, {\"color\": \"rgba(211,49,21,1)\", \"filter\": \"http.response.status_code:[400 TO 499]\", \"label\": \"400s\", \"id\": \"76089a90-a29d-11e7-a062-a1c3587f4874\"}, {\"color\": \"rgba(171,20,158,1)\", \"filter\": \"http.response.status_code:[500 TO 599]\", \"label\": \"500s\", \"id\": \"7c7929d0-a29d-11e7-a062-a1c3587f4874\"}], \"seperate_axis\": 0, \"point_size\": 1, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"label\": \"\", \"axis_position\": \"right\", \"split_mode\": \"filters\", \"fill\": 0.5, \"stacked\": \"stacked\", \"terms_field\": \"http.response.status_code\", \"color\": \"#68BC00\", \"line_width\": 1, \"terms_order_by\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"time_field\": \"@timestamp\", \"filter\": \"event.module:nginx AND fileset.name:access\", \"show_grid\": 1, \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"type\": \"timeseries\", \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"interval\": \"auto\", \"legend_position\": \"bottom\"}, \"aggs\": [], \"title\": \"Response codes over time [Filebeat Nginx] ECS\"}" - }, - "id": "b70b1b20-a1f4-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 7 + "name": "panel_4", + "type": "visualization", + "id": "9184fa00-a1f5-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Top pages [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"metrics\", \"params\": {\"axis_formatter\": \"number\", \"series\": [{\"formatter\": \"number\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"point_size\": 1, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"value_template\": \"\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"axis_position\": \"right\", \"split_mode\": \"terms\", \"fill\": 0.5, \"stacked\": \"none\", \"terms_field\": \"url.original\", \"color\": \"#68BC00\", \"line_width\": 1, \"terms_order_by\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"time_field\": \"@timestamp\", \"filter\": \"event.module:nginx AND fileset.name:access\", \"show_grid\": 1, \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"type\": \"top_n\", \"index_pattern\": \"filebeat-*\", \"axis_position\": \"left\", \"bar_color_rules\": [{\"id\": \"6252c320-a1f5-11e7-92ba-5d0b8663aece\"}], \"interval\": \"auto\"}, \"aggs\": [], \"title\": \"Top pages [Filebeat Nginx] ECS\"}" - }, - "id": "9184fa00-a1f5-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 3 + "name": "panel_5", + "type": "visualization", + "id": "46322e50-a1f6-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Errors over time [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"metrics\", \"params\": {\"index_pattern\": \"filebeat-*\", \"series\": [{\"formatter\": \"number\", \"chart_type\": \"bar\", \"seperate_axis\": 0, \"point_size\": 1, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"axis_position\": \"right\", \"split_mode\": \"terms\", \"fill\": 0.5, \"stacked\": \"none\", \"terms_field\": \"log.level\", \"color\": \"rgba(211,49,21,1)\", \"line_width\": 1, \"terms_order_by\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"time_field\": \"@timestamp\", \"filter\": \"event.module:nginx AND fileset.name:error\", \"show_grid\": 1, \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"type\": \"timeseries\", \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"interval\": \"auto\", \"legend_position\": \"bottom\"}, \"aggs\": [], \"title\": \"Errors over time [Filebeat Nginx] ECS\"}" - }, - "id": "46322e50-a1f6-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 5 + "name": "panel_6", + "type": "visualization", + "id": "0dd6f320-a29f-11e7-928f-5dbe6f6f5519-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Data Volume [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"metrics\", \"params\": {\"index_pattern\": \"filebeat-*\", \"series\": [{\"formatter\": \"bytes\", \"chart_type\": \"line\", \"split_filters\": [{\"color\": \"#68BC00\", \"filter\": \"http.response.status_code:[200 TO 299]\", \"label\": \"200s\", \"id\": \"7c343c20-a29e-11e7-a062-a1c3587f4874\"}], \"seperate_axis\": 0, \"point_size\": 1, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"metrics\": [{\"type\": \"sum\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\", \"field\": \"http.response.body.bytes\"}], \"label\": \"\", \"axis_position\": \"right\", \"split_mode\": \"everything\", \"fill\": 0.5, \"stacked\": \"none\", \"terms_field\": null, \"color\": \"#68BC00\", \"line_width\": 1}], \"time_field\": \"@timestamp\", \"filter\": \"event.module: nginx AND fileset.name: access\", \"show_grid\": 1, \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"type\": \"timeseries\", \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"interval\": \"auto\", \"legend_position\": \"bottom\"}, \"aggs\": [], \"title\": \"Data Volume [Filebeat Nginx] ECS\"}" - }, - "id": "0dd6f320-a29f-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 2 + "name": "panel_7", + "type": "visualization", + "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "Nginx-Access-Browsers-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "WzgzOCwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" }, + "title": "nginx Browsers", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"pie\",\"listeners\":{},\"params\":{\"legendPosition\":\"bottom\",\"isDonut\":true,\"addTooltip\":true,\"addLegend\":true,\"shareYAxis\":true},\"aggs\":[{\"type\":\"count\",\"enabled\":true,\"id\":\"1\",\"schema\":\"metric\",\"params\":{}},{\"type\":\"terms\",\"enabled\":true,\"id\":\"2\",\"schema\":\"segment\",\"params\":{\"orderBy\":\"1\",\"size\":5,\"order\":\"desc\",\"field\":\"user_agent.name\"}},{\"type\":\"terms\",\"enabled\":true,\"id\":\"3\",\"schema\":\"segment\",\"params\":{\"orderBy\":\"1\",\"size\":5,\"order\":\"desc\",\"field\":\"user_agent.version\"}}],\"title\":\"nginx Browsers\"}" + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "Nginx-Access-OSes-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:44:51.836Z", + "version": "WzEwMTYsMV0=", + "attributes": { + "title": "nginx Operating Systems", + "visState": "{\"title\":\"nginx Operating Systems\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"user_agent.os.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"user_agent.os.version\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown version\"},\"schema\":\"segment\"}],\"params\":{\"legendPosition\":\"bottom\",\"isDonut\":true,\"addTooltip\":true,\"addLegend\":true,\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Dashboards [Filebeat Nginx] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"markdown\", \"params\": {\"markdown\": \"[Nginx logs overview](#/dashboard/55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs) | [Nginx access and error logs](#/dashboard/046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs)\", \"fontSize\": 12}, \"aggs\": [], \"title\": \"Dashboards [Filebeat Nginx] ECS\"}" - }, - "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs", - "type": "visualization", - "version": 1 + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "Nginx-Access-Map-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0MCwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[]}" }, + "title": "nginx Access Map", + "uiStateJSON": "{\"mapCenter\": [12.039320557540572, -0.17578125]}", + "version": 1, + "visState": "{\"type\":\"tile_map\",\"listeners\":{},\"params\":{\"heatNormalizeData\":true,\"mapType\":\"Scaled Circle Markers\",\"heatRadius\":25,\"mapZoom\":2,\"heatMinOpacity\":0.1,\"addTooltip\":true,\"heatBlur\":15,\"wms\":{\"options\":{\"layers\":\"0\",\"styles\":\"\",\"transparent\":true,\"format\":\"image/png\",\"version\":\"1.3.0\",\"attribution\":\"Maps provided by USGS\"},\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"},\"heatMaxZoom\":16,\"legendPosition\":\"bottomright\",\"mapCenter\":[15,5],\"isDesaturated\":true},\"aggs\":[{\"type\":\"count\",\"enabled\":true,\"id\":\"1\",\"schema\":\"metric\",\"params\":{}},{\"type\":\"geohash_grid\",\"enabled\":true,\"id\":\"2\",\"schema\":\"segment\",\"params\":{\"autoPrecision\":true,\"field\":\"source.geo.location\"}}],\"title\":\"nginx Access Map\"}", + "savedSearchRefName": "search_0" + }, + "references": [ { - "attributes": { - "columns": [ - "url.original", - "http.request.method", - "http.response.status_code", - "http.request.referrer", - "http.response.body.bytes" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"highlightAll\": true, \"query\": {\"query\": \"event.module:nginx\", \"language\": \"kuery\"}, \"version\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"fields\": {\"*\": {}}, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647}, \"index\": \"filebeat-*\"}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Nginx logs [Filebeat Nginx] ECS", - "version": 1 - }, - "id": "Filebeat-Nginx-module-ecs", - "type": "search", - "version": 2 + "type": "search", + "name": "search_0", + "id": "Filebeat-Nginx-module-ecs" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "b70b1b20-a1f4-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0MSwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Response Codes Over Time", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"metrics\",\"params\":{\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"formatter\":\"number\",\"chart_type\":\"bar\",\"split_filters\":[{\"color\":\"#68BC00\",\"filter\":{\"query\":\"http.response.status_code:[200 TO 299]\",\"language\":\"lucene\"},\"label\":\"200s\",\"id\":\"5acdc750-a29d-11e7-a062-a1c3587f4874\"},{\"color\":\"rgba(252,196,0,1)\",\"filter\":{\"query\":\"http.response.status_code:[300 TO 399]\",\"language\":\"lucene\"},\"label\":\"300s\",\"id\":\"6efd2ae0-a29d-11e7-a062-a1c3587f4874\"},{\"color\":\"rgba(211,49,21,1)\",\"filter\":{\"query\":\"http.response.status_code:[400 TO 499]\",\"language\":\"lucene\"},\"label\":\"400s\",\"id\":\"76089a90-a29d-11e7-a062-a1c3587f4874\"},{\"color\":\"rgba(171,20,158,1)\",\"filter\":{\"query\":\"http.response.status_code:[500 TO 599]\",\"language\":\"lucene\"},\"label\":\"500s\",\"id\":\"7c7929d0-a29d-11e7-a062-a1c3587f4874\"}],\"seperate_axis\":0,\"point_size\":1,\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"metrics\":[{\"type\":\"count\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"label\":\"\",\"axis_position\":\"right\",\"split_mode\":\"filters\",\"fill\":0.5,\"stacked\":\"stacked\",\"terms_field\":\"http.response.status_code\",\"color\":\"#68BC00\",\"line_width\":1,\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"split_color_mode\":\"gradient\"}],\"time_field\":\"@timestamp\",\"filter\":{\"query\":\"event.module:nginx AND fileset.name:access\",\"language\":\"lucene\"},\"show_grid\":1,\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"show_legend\":1,\"type\":\"timeseries\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"interval\":\"auto\",\"legend_position\":\"bottom\"},\"aggs\":[],\"title\":\"nginx Response Codes Over Time\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "9184fa00-a1f5-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0MiwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Top Pages", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"metrics\",\"params\":{\"axis_formatter\":\"number\",\"series\":[{\"formatter\":\"number\",\"chart_type\":\"line\",\"seperate_axis\":0,\"point_size\":1,\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"value_template\":\"\",\"metrics\":[{\"type\":\"count\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"axis_position\":\"right\",\"split_mode\":\"terms\",\"fill\":0.5,\"stacked\":\"none\",\"terms_field\":\"url.original\",\"color\":\"#68BC00\",\"line_width\":1,\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"split_color_mode\":\"gradient\"}],\"time_field\":\"@timestamp\",\"filter\":{\"query\":\"event.module:nginx AND fileset.name:access\",\"language\":\"lucene\"},\"show_grid\":1,\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"show_legend\":1,\"type\":\"top_n\",\"index_pattern\":\"malcolm_beats_*\",\"axis_position\":\"left\",\"bar_color_rules\":[{\"id\":\"6252c320-a1f5-11e7-92ba-5d0b8663aece\"}],\"interval\":\"auto\"},\"aggs\":[],\"title\":\"nginx Top Pages\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "46322e50-a1f6-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0MywxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Errors Over Time", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"metrics\",\"params\":{\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"formatter\":\"number\",\"chart_type\":\"bar\",\"seperate_axis\":0,\"point_size\":1,\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"metrics\":[{\"type\":\"count\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"axis_position\":\"right\",\"split_mode\":\"terms\",\"fill\":0.5,\"stacked\":\"none\",\"terms_field\":\"log.level\",\"color\":\"rgba(211,49,21,1)\",\"line_width\":1,\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"split_color_mode\":\"gradient\"}],\"time_field\":\"@timestamp\",\"filter\":{\"query\":\"event.module:nginx AND fileset.name:error\",\"language\":\"lucene\"},\"show_grid\":1,\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"show_legend\":1,\"type\":\"timeseries\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"interval\":\"auto\",\"legend_position\":\"bottom\"},\"aggs\":[],\"title\":\"nginx Errors Over Time\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "0dd6f320-a29f-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0NCwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Data Volume", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"metrics\",\"params\":{\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"formatter\":\"bytes\",\"chart_type\":\"line\",\"split_filters\":[{\"color\":\"#68BC00\",\"filter\":{\"query\":\"http.response.status_code:[200 TO 299]\",\"language\":\"lucene\"},\"label\":\"200s\",\"id\":\"7c343c20-a29e-11e7-a062-a1c3587f4874\"}],\"seperate_axis\":0,\"point_size\":1,\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"metrics\":[{\"type\":\"sum\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"field\":\"http.response.body.bytes\"}],\"label\":\"\",\"axis_position\":\"right\",\"split_mode\":\"everything\",\"fill\":0.5,\"stacked\":\"none\",\"terms_field\":null,\"color\":\"#68BC00\",\"line_width\":1,\"split_color_mode\":\"gradient\"}],\"time_field\":\"@timestamp\",\"filter\":{\"query\":\"event.module: nginx AND fileset.name: access\",\"language\":\"lucene\"},\"show_grid\":1,\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"show_legend\":1,\"type\":\"timeseries\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"interval\":\"auto\",\"legend_position\":\"bottom\"},\"aggs\":[],\"title\":\"nginx Data Volume\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0NSwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "nginx Dashboards", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"type\":\"markdown\",\"params\":{\"markdown\":\"[Nginx logs overview](#/dashboard/55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs) | [Nginx access and error logs](#/dashboard/046212a0-a2a1-11e7-928f-5dbe6f6f5519-ecs)\",\"fontSize\":12},\"aggs\":[],\"title\":\"nginx Dashboards\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "Filebeat-Nginx-module-ecs", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-01T19:41:23.453Z", + "version": "Wzg0NiwxXQ==", + "attributes": { + "columns": [ + "url.original", + "http.request.method", + "http.response.status_code", + "http.request.referrer", + "http.response.body.bytes" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"query\":{\"query\":\"event.module:nginx\",\"language\":\"kuery\"},\"version\":true,\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "nginx Access Logs", + "version": 1 + }, + "references": [ { - "attributes": { - "description": "Dashboard for the Filebeat Nginx module", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"size_x\": 3, \"size_y\": 3, \"panelIndex\": 3, \"id\": \"Nginx-Access-Browsers-ecs\", \"col\": 10, \"row\": 12}, {\"type\": \"visualization\", \"size_x\": 3, \"size_y\": 3, \"panelIndex\": 4, \"id\": \"Nginx-Access-OSes-ecs\", \"col\": 7, \"row\": 12}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 4, \"panelIndex\": 8, \"id\": \"Nginx-Access-Map-ecs\", \"col\": 1, \"row\": 2}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 13, \"id\": \"b70b1b20-a1f4-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 6}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 14, \"id\": \"9184fa00-a1f5-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 7, \"row\": 9}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 15, \"id\": \"46322e50-a1f6-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 9}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 16, \"id\": \"0dd6f320-a29f-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 12}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 1, \"panelIndex\": 17, \"id\": \"97109780-a2a5-11e7-928f-5dbe6f6f5519-ecs\", \"col\": 1, \"row\": 1}]", - "timeRestore": false, - "title": "[Filebeat Nginx] Overview ECS", - "uiStateJSON": "{\"P-8\": {\"mapZoom\": 2, \"mapBounds\": {\"bottom_right\": {\"lat\": -7.362466865535738, \"lon\": 245.39062500000003}, \"top_left\": {\"lat\": 77.07878389624943, \"lon\": -245.74218750000003}}, \"mapCenter\": [50.51342652633956, -0.17578125], \"mapCollar\": {\"bottom_right\": {\"lat\": -49.583095, \"lon\": 180}, \"zoom\": 2, \"top_left\": {\"lat\": 90, \"lon\": -180}}}, \"P-4\": {\"vis\": {\"legendOpen\": true}}}", - "version": 1 - }, - "id": "55a9e6e0-a29e-11e7-928f-5dbe6f6f5519-ecs", - "type": "dashboard", - "version": 6 + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" } - ], - "version": "6.0.0-beta2" + ], + "migrationVersion": { + "search": "7.9.3" + } + } + ] } \ No newline at end of file diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 4736e9bb5..c557dc5dd 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -7,6 +7,7 @@ "timestamp": { "type": "date" }, "client.address": { "type": "keyword" }, "ecs.version": { "type": "keyword" }, + "error.message": { "type": "keyword", "index": false, "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, "event.category": { "type": "keyword" }, "event.dataset": { "type": "keyword" }, "event.hash": { "type": "keyword" }, @@ -26,11 +27,35 @@ "http.response.status_code": { "type": "long" }, "http.version": { "type": "keyword" }, "log.file.path": { "type": "keyword" }, + "log.level": { "type": "keyword" }, "node": { "type": "keyword" }, + "process.pid": { "type": "integer" }, + "process.thread.id": { "type": "integer" }, "related.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "source.geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "source.geo.continent_code": { "type": "keyword" }, + "source.geo.country_code2": { "type": "keyword" }, + "source.geo.country_code3": { "type": "keyword" }, + "source.geo.country_iso_code": { "type": "keyword" }, + "source.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "source.geo.dma_code": { "type": "short" }, + "source.geo.ip": { "type": "ip" }, + "source.geo.latitude": { "type": "float" }, + "source.geo.location": { "type": "geo_point" }, + "source.geo.longitude": { "type": "float" }, + "source.geo.postal_code": { "type": "keyword" }, + "source.geo.region_code": { "type": "keyword" }, + "source.geo.region_name": { "type": "keyword" }, + "source.geo.timezone": { "type": "keyword" }, "tags": { "type": "keyword" }, "url.original": { "type": "keyword" }, - "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } } + "user_agent.device.name": { "type": "keyword" }, + "user_agent.name": { "type": "keyword" }, + "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "user_agent.os.full": { "type": "keyword" }, + "user_agent.os.name": { "type": "keyword" }, + "user_agent.os.version": { "type": "keyword" }, + "user_agent.version": { "type": "keyword" } } } } diff --git a/dashboards/templates/malcolm_template.json b/dashboards/templates/malcolm_template.json index e5fd8b889..1ec9d219a 100644 --- a/dashboards/templates/malcolm_template.json +++ b/dashboards/templates/malcolm_template.json @@ -730,7 +730,12 @@ "url.query": { "type": "keyword" }, "url.scheme": { "type": "keyword" }, "url.user": { "type": "keyword" }, + "user_agent.device.name": { "type": "keyword" }, + "user_agent.name": { "type": "keyword" }, "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "user_agent.os.full": { "type": "keyword" }, + "user_agent.os.name": { "type": "keyword" }, + "user_agent.version": { "type": "keyword" }, "vulnerability.category": { "type": "keyword" }, "vulnerability.enumeration": { "type": "keyword" }, "vulnerability.description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, diff --git a/logstash/pipelines/beats/01_input_beats.conf b/logstash/pipelines/beats/01_input_beats.conf index ec857b93e..adf233ff4 100644 --- a/logstash/pipelines/beats/01_input_beats.conf +++ b/logstash/pipelines/beats/01_input_beats.conf @@ -8,7 +8,7 @@ filter { # this pipeline only needs to see logs from other misc. beats used by Malcolm if ("_malcolm_beats" in [tags]) { mutate { id => "mutate_filebeat_malcolm_beats_forward_tag_remove" - remove_tag => [ "_malcolm_beats", "beats_input_codec_plain_applied" ] } + remove_tag => [ "_malcolm_beats" ] } } else { drop { id => "drop_not_malcolm_beats" } } diff --git a/logstash/pipelines/beats/12_lookups.conf b/logstash/pipelines/beats/12_lookups.conf new file mode 100644 index 000000000..ab8fa053f --- /dev/null +++ b/logstash/pipelines/beats/12_lookups.conf @@ -0,0 +1,19 @@ +filter { + + if ([client][address]) { + geoip { + id => "geoip_beats_client_address" + source => "[client][address]" + target => "[source][geo]" + } + } + + if ([user_agent][original]) { + useragent { + id => "user_agent_beats_original" + source => "[user_agent][original]" + ecs_compatibility => "v1" + } + } + +} \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index c452a45e5..18a8f28d6 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -54,6 +54,17 @@ filter { ] } + # remove tags we'd rather not see + mutate { id => "mutate_beats_tags_remove" + remove_tag => [ "beats_input_codec_plain_applied", + "_dateparsefailure", + "_grokparsefailure", + "_jsonparsefailure", + "_dissectfailure", + "_ouilookupfailure", + "_geoip_lookup_failure" ] } + + # event.provider if (![event][provider]) { mutate { id => "mutate_add_field_event_provider_beats" add_field => { "[event][provider]" => "malcolm" } } } diff --git a/logstash/pipelines/enrichment/11_lookups.conf b/logstash/pipelines/enrichment/11_lookups.conf index 2196db69e..1b7c9cd3f 100644 --- a/logstash/pipelines/enrichment/11_lookups.conf +++ b/logstash/pipelines/enrichment/11_lookups.conf @@ -428,6 +428,14 @@ filter { ################################################################################################ + if ([user_agent][original]) { + useragent { + id => "user_agent_original_parse" + source => "[user_agent][original]" + ecs_compatibility => "v1" + } + } + # ja3/ja3s are arrays at this point, as Arkime expects them to be if ([tls][ja3]) and ([tls][ja3][0]) { translate { From f682c7e7f3245102f6edb9e809deaaca5d20c4b2 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 1 Jun 2022 15:13:53 -0600 Subject: [PATCH 020/122] work in progress changing forwarding model for the sensor --- README.md | 2 +- sensor-iso/README.md | 30 +- .../sensor_ctl/auditbeat/auditbeat.yml | 42 +- .../filebeat-syslog/filebeat-syslog.yml | 42 +- .../sensor_ctl/filebeat/filebeat.yml | 1 - .../sensor_ctl/heatbeat/protologbeat.yml | 37 +- .../logstash-client-certificates/.gitignore | 3 + .../sensor_ctl/metricbeat/metricbeat.yml | 42 +- shared/bin/configure-capture.py | 471 ++++++++---------- shared/bin/sensor-init.sh | 2 + 10 files changed, 269 insertions(+), 403 deletions(-) create mode 100644 sensor-iso/interface/sensor_ctl/logstash-client-certificates/.gitignore diff --git a/README.md b/README.md index 72cc1dfec..3b6afbf6a 100644 --- a/README.md +++ b/README.md @@ -746,7 +746,7 @@ In either case, you **must** run `./scripts/auth_setup` before starting Malcolm * key and certificate files are located in the `nginx/certs/` directory * specify whether or not to (re)generate the self-signed certificates used by a remote log forwarder (see the `BEATS_SSL` environment variable above) * certificate authority, certificate, and key files for Malcolm's Logstash instance are located in the `logstash/certs/` directory - * certificate authority, certificate, and key files to be copied to and used by the remote log forwarder are located in the `filebeat/certs/` directory + * certificate authority, certificate, and key files to be copied to and used by the remote log forwarder are located in the `filebeat/certs/` directory; if using [Hedgehog Linux](#Hedgehog), these certificates should be copied to the `/opt/sensor/sensor_ctl/logstash-client-certificates` directory on the sensor * specify whether or not to store the username/password for forwarding Logstash events to a secondary, external OpenSearch instance (see the `OS_EXTERNAL_HOSTS`, `OS_EXTERNAL_SSL`, and `OS_EXTERNAL_SSL_CERTIFICATE_VERIFICATION` environment variables above) * these parameters are stored securely in the Logstash keystore file `logstash/certs/logstash.keystore` * specify whether or not to [store the username/password](https://opensearch.org/docs/latest/monitoring-plugins/alerting/monitors/#authenticate-sender-account) for [email alert senders](https://opensearch.org/docs/latest/monitoring-plugins/alerting/monitors/#create-destinations) diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 1fcb090d0..8159981fb 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -281,7 +281,7 @@ Finally, you'll be given the opportunity to review the all of the Arkime `captur ### metricbeat: resource statistics forwarding -The sensor uses [metricbeat](https://www.elastic.co/products/beats/metricbeat) to forward system resource metrics (CPU, network I/O, disk I/O, memory utilization, etc.) to an OpenSearch database using a RESTful API using HTTP/HTTPS as the transport protocol. Select **metricbeat** from the forwarding configuration mode options. +The sensor uses [metricbeat](https://www.elastic.co/products/beats/metricbeat) to forward system resource metrics (CPU, network I/O, disk I/O, memory utilization, etc.) to an OpenSearch database by way of Logstash in the same manner as [filebeat](#filebeat). Select **metricbeat** from the forwarding configuration mode options. Metricbeat gathers system resource metrics at an interval you specify. The default interval is 30 seconds, but it can be set to any value between 1 and 60 seconds. @@ -289,43 +289,23 @@ Metricbeat gathers system resource metrics at an interval you specify. The defau Next, select the OpenSearch connection transport protocol, either **HTTPS** or **HTTP**. If the metrics are being forwarded to Malcolm, select **HTTPS** to encrypt messages from the sensor to the aggregator using TLS v1.2 using ECDHE-RSA-AES128-GCM-SHA256. If **HTTPS** is chosen, you must choose whether to enable SSL certificate verification. If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication), choose **None**. -![OpenSearch connection protocol](./docs/images/metricbeat_elastic_protocol.png) ![OpenSearch SSL verification](./docs/images/metricbeat_elastic_ssl.png) - -Next, enter the **OpenSearch host** IP address (ie., the IP address of the aggregator) and port. These metrics are written to an OpenSearch database using a RESTful API, usually using port 9200. Depending on your network configuration, you may need to open this port in your firewall to allow this connection from the sensor to the aggregator. - -![OpenSearch host and port](./docs/images/metricbeat_elastic_host.png) - -Next, you will be asked if you wish to configure **OpenSearch Dashboards** connectivity. [OpenSearch Dashboards](https://opensearch.org/docs/latest/dashboards/index/) is an open source general-purpose data visualization tool for OpenSearch. If you choose **Yes** and proceed to configure Dashboards connectivity, metricbeat will create custom search indexes, visualizations, and dashboards for Dashboards to display the sensor's resource metrics. - -You will be prompted to specify the **connection protocol** and (for HTTPS) **SSL verification** for Dashboards. These values should probably be the same ones you chose for OpenSearch. You will also be prompted for the **Dashboards host** IP address and **port**. The IP address will probably be the same one you specified for OpenSearch. The default Dashboards port is 5601. - -The final settings required to configure Dashboards are whether or not to configure **OpenSearch Dashboards** and the local directory on the sensor containing the dashboards to be imported. The default values are probably what you want. - -Finally, you will be asked to enter authentication credentials for the sensor's connections to the aggregator's OpenSearch and Dashboards APIs. - -After you've entered the username and the password, the sensor will attempt test connections to the OpenSearch and Dashboards APIs using the connection information provided. - -![OpenSearch/Dashboards username](./docs/images/metricbeat_elastic_username.png) ![OpenSearch/Dashboards password](./docs/images/metricbeat_elastic_password.png) ![Successful OpenSearch connection](./docs/images/metricbeat_elasticsearch_success.png) ![Successful Dashboards connection](./docs/images/metricbeat_kibana_success.png) - -Finally, you'll be given the opportunity to review the all of the metricbeat options you've specified. Selecting **OK** will cause the parameters to be written to metricbeat's configuration keystore under `/opt/sensor/sensor_ctl/metricbeat` and you will be returned to the configuration tool's welcome screen. - -![Metricbeat settings confirmation](./docs/images/metricbeat_confirm.png) ![Metricbeat settings applied successfully](./docs/images/metricbeat_success.png) +The remainder of the configuration for metricbeat will proceed as described in the [filebeat](#filebeat) steps outlined above. ### auditbeat: audit log forwarding -The sensor uses [auditbeat](https://www.elastic.co/products/beats/auditbeat) to forward auditd logs, process and socket statistics, and sensor system file integrity information to an OpenSearch database. Its configuration is almost identical to that of metricbeat in the previous section. Select **auditbeat** from the forwarding configuration mode options and follow the same steps outlined above to set up this forwarder. +The sensor uses [auditbeat](https://www.elastic.co/products/beats/auditbeat) to forward auditd logs, process and socket statistics, and sensor system file integrity information to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. The sensor implements STIG (Security Technical Implementation Guidelines) rules according to DISA RHEL 7 STIG V1 R1, ported to a Debian 9 base platform. Enabling audit log forwarding via auditbeat is required to satisfy the requirements regarding forwarding audit logs to a remote log server as defined in that specification. ### filebeat-syslog: syslog forwarding -The sensor uses [filebeat's syslog input](https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-input-syslog.html) to forward the sensor's system logs to an OpenSearch database. Its configuration is almost identical to that of metricbeat in a previous section. Select **filebeat-syslog** from the forwarding configuration mode options and follow the same steps outlined above to set up this forwarder. +The sensor uses [filebeat's syslog input](https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-input-syslog.html) to forward the sensor's system logs to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. Enabling syslog forwarding via filebeat is required to satisfy the STIG requirements regarding sending system logs to a remote log server as defined in that specification. ### heatbeat: temperature forwarding -The sensor employs a custom agent using the beats protocol to forward hardware metrics such as CPU and storage device temperatures, system voltages, and fan speeds (when applicable) to an OpenSearch database. Its configuration is almost identical to that of metricbeat in a previous section. Select **heatbeat** from the forwarding configuration mode options and follow the same steps outlined above to set up this forwarder. +The sensor employs a custom agent using the beats protocol to forward hardware metrics such as CPU and storage device temperatures, system voltages, and fan speeds (when applicable) to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. ### Autostart services diff --git a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml b/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml index 3ad330312..b4e21ab44 100644 --- a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml +++ b/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml @@ -290,37 +290,21 @@ auditbeat.modules: #================================ General ====================================== fields_under_root: true -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}:${BEAT_OS_PORT}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" +processors: + - add_tags: + tags: [_malcolm_beats] -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 +#================================ Outputs ====================================== -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}:${BEAT_DASHBOARDS_PORT}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] + ssl.enabled: ${BEAT_LS_SSL:false} + ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] + ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" + ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" #================================ Logging ====================================== logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml b/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml index 1f91df204..dd3cefaef 100644 --- a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml +++ b/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml @@ -6,37 +6,21 @@ filebeat.inputs: #================================ General ====================================== fields_under_root: true -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}:${BEAT_OS_PORT}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" +processors: + - add_tags: + tags: [_malcolm_beats] -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 +#================================ Outputs ====================================== -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}:${BEAT_DASHBOARDS_PORT}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] + ssl.enabled: ${BEAT_LS_SSL:false} + ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] + ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" + ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" #================================ Logging ====================================== logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml b/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml index 69d7f7ddb..c4c654607 100644 --- a/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml +++ b/sensor-iso/interface/sensor_ctl/filebeat/filebeat.yml @@ -47,4 +47,3 @@ output.logstash: ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" ssl.supported_protocols: "TLSv1.2" ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" - diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 0538bf1d0..65258fa08 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -10,6 +10,10 @@ protologbeat: #================================ General ====================================== fields_under_root: true +processors: + - add_tags: + tags: [_malcolm_beats] + #============================== Template ======================================= setup.template.enabled: true @@ -23,30 +27,15 @@ setup.template.json.name: "protologbeat" #================================ Outputs ====================================== -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}:${BEAT_OS_PORT}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" - template.versions.2x.enabled: false - -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}:${BEAT_DASHBOARDS_PORT}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] + ssl.enabled: ${BEAT_LS_SSL:false} + ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] + ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" + ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" #================================ Logging ====================================== logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/logstash-client-certificates/.gitignore b/sensor-iso/interface/sensor_ctl/logstash-client-certificates/.gitignore new file mode 100644 index 000000000..a5baada18 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/logstash-client-certificates/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore + diff --git a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml b/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml index 6fce989ee..45747009c 100644 --- a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml +++ b/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml @@ -42,37 +42,21 @@ metricbeat.modules: #================================ General ====================================== fields_under_root: true -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}:${BEAT_OS_PORT}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" +processors: + - add_tags: + tags: [_malcolm_beats] -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 +#================================ Outputs ====================================== -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}:${BEAT_DASHBOARDS_PORT}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] + ssl.enabled: ${BEAT_LS_SSL:false} + ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] + ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" + ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" #================================ Logging ====================================== logging.metrics.enabled: false diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index 38e4c6ea7..61f6791cb 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -68,14 +68,6 @@ class Constants: HEATBEAT: f'/opt/sensor/sensor_ctl/{HEATBEAT}', } - BEAT_DASHBOARDS_DIR = { - FILEBEAT: f'/usr/share/{FILEBEAT}/kibana', - METRICBEAT: f'/usr/share/{METRICBEAT}/kibana', - AUDITBEAT: f'/usr/share/{AUDITBEAT}/kibana', - SYSLOGBEAT: f'/usr/share/{FILEBEAT}/kibana', - HEATBEAT: f'/usr/share/protologbeat/kibana/', - } - BEAT_CMD = { FILEBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[FILEBEAT]}" --path.config "{BEAT_DIR[FILEBEAT]}" --path.data "{BEAT_DIR[FILEBEAT]}/data" --path.logs "{BEAT_DIR[FILEBEAT]}/logs" -c "{BEAT_DIR[FILEBEAT]}/{FILEBEAT}.yml"', METRICBEAT: f'{METRICBEAT} --path.home "{BEAT_DIR[METRICBEAT]}" --path.config "{BEAT_DIR[METRICBEAT]}" --path.data "{BEAT_DIR[METRICBEAT]}/data" --path.logs "{BEAT_DIR[METRICBEAT]}/logs" -c "{BEAT_DIR[METRICBEAT]}/{METRICBEAT}.yml"', @@ -84,7 +76,7 @@ class Constants: HEATBEAT: f'protologbeat --path.home "{BEAT_DIR[HEATBEAT]}" --path.config "{BEAT_DIR[HEATBEAT]}" --path.data "{BEAT_DIR[HEATBEAT]}/data" --path.logs "{BEAT_DIR[HEATBEAT]}/logs" -c "{BEAT_DIR[HEATBEAT]}/protologbeat.yml"', } - # specific to beats forwarded to logstash (eg., filebeat) + # specific to beats forwarded to logstash (eg., filebeat, metricbeat, auditbeat, filebeat-syslog) BEAT_LS_HOST = 'BEAT_LS_HOST' BEAT_LS_PORT = 'BEAT_LS_PORT' BEAT_LS_SSL = 'BEAT_LS_SSL' @@ -92,20 +84,9 @@ class Constants: BEAT_LS_SSL_CLIENT_CRT = 'BEAT_LS_SSL_CLIENT_CRT' BEAT_LS_SSL_CLIENT_KEY = 'BEAT_LS_SSL_CLIENT_KEY' BEAT_LS_SSL_VERIFY = 'BEAT_LS_SSL_VERIFY' + BEAT_LS_CERT_DIR_DEFAULT = "/opt/sensor/sensor_ctl/logstash-client-certificates" - # specific to beats forwarded to OpenSearch (eg., metricbeat, auditbeat, filebeat-syslog) - BEAT_OS_HOST = "BEAT_OS_HOST" - BEAT_OS_PORT = "BEAT_OS_PORT" - BEAT_OS_PROTOCOL = "BEAT_OS_PROTOCOL" - BEAT_OS_SSL_VERIFY = "BEAT_OS_SSL_VERIFY" - BEAT_HTTP_PASSWORD = "BEAT_HTTP_PASSWORD" - BEAT_HTTP_USERNAME = "BEAT_HTTP_USERNAME" - BEAT_DASHBOARDS_ENABLED = "BEAT_DASHBOARDS_ENABLED" - BEAT_DASHBOARDS_PATH = "BEAT_DASHBOARDS_PATH" - BEAT_DASHBOARDS_HOST = "BEAT_DASHBOARDS_HOST" - BEAT_DASHBOARDS_PORT = "BEAT_DASHBOARDS_PORT" - BEAT_DASHBOARDS_PROTOCOL = "BEAT_DASHBOARDS_PROTOCOL" - BEAT_DASHBOARDS_SSL_VERIFY = "BEAT_DASHBOARDS_SSL_VERIFY" + # since the OpenSearch fork from ElasticSearch, we're no longer using beats forwarding directly to OpenSearch # specific to filebeat BEAT_ZEEK_LOG_PATH_SUBDIR = os.path.join('logs', 'current') @@ -164,6 +145,7 @@ class Constants: ) MSG_MESSAGE_ERROR = 'Error: {}\n\nPlease try again.' MSG_CANCEL_ERROR = 'Operation cancelled, goodbye!' + MSG_INVALID_FORWARDING_TYPE = "Invalid forwarder selected" MSG_EMPTY_CONFIG_ERROR = "No configuration values were supplied" MSG_SELECT_INTERFACE = 'Select capture interface(s)' MSG_SELECT_BLINK_INTERFACE = 'Select capture interface to identify' @@ -210,8 +192,6 @@ def input_opensearch_connection_info( forwarder, default_os_host=None, default_os_port=None, - default_dashboards_host=None, - default_dashboards_port=None, default_username=None, default_password=None, ): @@ -251,72 +231,8 @@ def input_opensearch_connection_info( return_dict[Constants.BEAT_OS_PORT] = values[1] break - # Dashboards configuration (if supported by forwarder) - if (forwarder in Constants.BEAT_DASHBOARDS_DIR.keys()) and ( - d.yesno(f"Configure {forwarder} Dashboards connectivity?") == Dialog.OK - ): - # opensearch protocol and SSL verification mode - dashboards_protocol = "http" - dashboards_ssl_verify = "none" - if d.yesno("Dashboards connection protocol", yes_label="HTTPS", no_label="HTTP") == Dialog.OK: - dashboards_protocol = "https" - if d.yesno("Dashboards SSL verification", yes_label="None", no_label="Full") != Dialog.OK: - dashboards_ssl_verify = "full" - return_dict[Constants.BEAT_DASHBOARDS_PROTOCOL] = dashboards_protocol - return_dict[Constants.BEAT_DASHBOARDS_SSL_VERIFY] = dashboards_ssl_verify - - while True: - # host/port for Dashboards - code, values = d.form( - Constants.MSG_CONFIG_GENERIC.format(forwarder), - [ - ('Dashboards Host', 1, 1, default_dashboards_host or "", 1, 20, 30, 255), - ('Dashboards Port', 2, 1, default_dashboards_port or "5601", 2, 20, 6, 5), - ], - ) - values = [x.strip() for x in values] - - if (code == Dialog.CANCEL) or (code == Dialog.ESC): - raise CancelledError - - elif (len(values[0]) <= 0) or (len(values[1]) <= 0) or (not values[1].isnumeric()): - code = d.msgbox(text=Constants.MSG_ERROR_BAD_HOST) - - else: - return_dict[Constants.BEAT_DASHBOARDS_HOST] = values[0] - return_dict[Constants.BEAT_DASHBOARDS_PORT] = values[1] - break - - if d.yesno(f"Configure {forwarder} Dashboards dashboards?") == Dialog.OK: - dashboards_enabled = "true" - else: - dashboards_enabled = "false" - return_dict[Constants.BEAT_DASHBOARDS_ENABLED] = dashboards_enabled - - if dashboards_enabled == "true": - while True: - code, values = d.form( - Constants.MSG_CONFIG_GENERIC.format(forwarder), - [('Dashboards Dashboards Path', 1, 1, Constants.BEAT_DASHBOARDS_DIR[forwarder], 1, 30, 30, 255)], - ) - values = [x.strip() for x in values] - - if (code == Dialog.CANCEL) or (code == Dialog.ESC): - raise CancelledError - - elif (len(values[0]) <= 0) or (not os.path.isdir(values[0])): - code = d.msgbox(text=Constants.MSG_ERROR_DIR_NOT_FOUND) - - else: - return_dict[Constants.BEAT_DASHBOARDS_PATH] = values[0] - break - - server_display_name = ( - "OpenSearch/Dashboards" if Constants.BEAT_DASHBOARDS_HOST in return_dict.keys() else "OpenSearch" - ) - # HTTP/HTTPS authentication - code, http_username = d.inputbox(f"{server_display_name} HTTP/HTTPS server username", init=default_username) + code, http_username = d.inputbox(f"OpenSearch HTTP/HTTPS server username", init=default_username) if (code == Dialog.CANCEL) or (code == Dialog.ESC): raise CancelledError return_dict[Constants.BEAT_HTTP_USERNAME] = http_username.strip() @@ -324,13 +240,13 @@ def input_opensearch_connection_info( # make them enter the password twice while True: code, http_password = d.passwordbox( - f"{server_display_name} HTTP/HTTPS server password", insecure=True, init=default_password + f"OpenSearch HTTP/HTTPS server password", insecure=True, init=default_password ) if (code == Dialog.CANCEL) or (code == Dialog.ESC): raise CancelledError code, http_password2 = d.passwordbox( - f"{server_display_name} HTTP/HTTPS server password (again)", + f"OpenSearch HTTP/HTTPS server password (again)", insecure=True, init=default_password if (http_password == default_password) else "", ) @@ -368,33 +284,6 @@ def input_opensearch_connection_info( if code != Dialog.OK: raise CancelledError - # test Dashboards connection - if Constants.BEAT_DASHBOARDS_HOST in return_dict.keys(): - code = d.infobox(Constants.MSG_TESTING_CONNECTION.format("Dashboards")) - retcode, message, output = test_connection( - protocol=return_dict[Constants.BEAT_DASHBOARDS_PROTOCOL], - host=return_dict[Constants.BEAT_DASHBOARDS_HOST], - port=return_dict[Constants.BEAT_DASHBOARDS_PORT], - uri="api/status", - username=return_dict[Constants.BEAT_HTTP_USERNAME] - if (len(return_dict[Constants.BEAT_HTTP_USERNAME]) > 0) - else None, - password=return_dict[Constants.BEAT_HTTP_PASSWORD] - if (len(return_dict[Constants.BEAT_HTTP_PASSWORD]) > 0) - else None, - ssl_verify=return_dict[Constants.BEAT_DASHBOARDS_SSL_VERIFY], - ) - if retcode == 200: - code = d.msgbox(text=Constants.MSG_TESTING_CONNECTION_SUCCESS.format("Dashboards", retcode, message)) - else: - code = d.yesno( - text=Constants.MSG_TESTING_CONNECTION_FAILURE.format("Dashboards", retcode, message, "\n".join(output)), - yes_label="Ignore Error", - no_label="Start Over", - ) - if code != Dialog.OK: - raise CancelledError - return return_dict @@ -456,7 +345,6 @@ def main(): "OS_HOST" in capture_config_dict.keys() ): previous_config_values[Constants.BEAT_OS_HOST] = capture_config_dict["OS_HOST"] - previous_config_values[Constants.BEAT_DASHBOARDS_HOST] = capture_config_dict["OS_HOST"] if (Constants.BEAT_OS_PORT not in previous_config_values.keys()) and ( "OS_PORT" in capture_config_dict.keys() ): @@ -917,7 +805,7 @@ def main(): if fwd_mode == Constants.ARKIMECAP: # forwarding configuration for arkime capture - # get opensearch/dashboards connection information from user + # get opensearch connection information from user opensearch_config_dict = input_opensearch_connection_info( forwarder=fwd_mode, default_os_host=previous_config_values[Constants.BEAT_OS_HOST], @@ -1002,7 +890,7 @@ def main(): or (fwd_mode == Constants.SYSLOGBEAT) or (fwd_mode == Constants.HEATBEAT) ): - # forwarder configuration for beats + # forwarder configuration for beats -> logstash if not os.path.isdir(Constants.BEAT_DIR[fwd_mode]): # beat dir not found, give up @@ -1029,17 +917,34 @@ def main(): forwarder_dict = defaultdict(str) - if ( - (fwd_mode == Constants.METRICBEAT) - or (fwd_mode == Constants.AUDITBEAT) - or (fwd_mode == Constants.SYSLOGBEAT) - or (fwd_mode == Constants.HEATBEAT) - ): - #### auditbeat/metricbeat/filebeat-syslog ################################################################### - # enter beat configuration (in a few steps) + while True: + forwarder_dict = defaultdict(str) + + forwarder_config_error = False + log_path = None + logstash_host = None + logstash_port = None + beat_interval = None - if fwd_mode == Constants.METRICBEAT: - # interval is metricbeat only, the rest is used by both + if fwd_mode == Constants.FILEBEAT: + # zeek log dir is filebeat only + code, values = d.form( + Constants.MSG_CONFIG_GENERIC.format(fwd_mode), + [ + ('Log Path', 1, 1, capture_config_dict["ZEEK_LOG_PATH"], 1, 20, 30, 255), + ], + ) + if code == Dialog.CANCEL or code == Dialog.ESC: + raise CancelledError + values = [x.strip() for x in values] + if (len(values[0]) <= 0) or (not os.path.isdir(values[0])): + code = d.msgbox(text=Constants.MSG_ERROR_DIR_NOT_FOUND) + forwarder_config_error = True + else: + log_path = values[0] + + elif fwd_mode == Constants.METRICBEAT: + # interval is metricbeat only code, beat_interval = d.rangebox( f"{Constants.MSG_CONFIG_GENERIC.format(fwd_mode)} interval (seconds)", width=60, @@ -1049,178 +954,214 @@ def main(): ) if code == Dialog.CANCEL or code == Dialog.ESC: raise CancelledError - forwarder_dict[Constants.BEAT_INTERVAL] = f"{beat_interval}s" - - # get opensearch/dashboards connection information from user - forwarder_dict.update( - input_opensearch_connection_info( - forwarder=fwd_mode, - default_os_host=previous_config_values[Constants.BEAT_OS_HOST], - default_os_port=previous_config_values[Constants.BEAT_OS_PORT], - default_dashboards_host=previous_config_values[Constants.BEAT_DASHBOARDS_HOST], - default_dashboards_port=previous_config_values[Constants.BEAT_DASHBOARDS_PORT], - default_username=previous_config_values[Constants.BEAT_HTTP_USERNAME], - default_password=previous_config_values[Constants.BEAT_HTTP_PASSWORD], - ) - ) - elif fwd_mode == Constants.FILEBEAT: - #### filebeat ############################################################################################# - while True: - forwarder_dict = defaultdict(str) - - # enter main filebeat configuration + if not forwarder_config_error: + # host/port for LogStash code, values = d.form( - Constants.MSG_CONFIG_GENERIC.format(fwd_mode), + Constants.MSG_CONFIG_GENERIC.format(forwarder), [ - ('Log Path', 1, 1, capture_config_dict["ZEEK_LOG_PATH"], 1, 20, 30, 255), - ('Destination Host', 2, 1, "", 2, 20, 30, 255), - ('Destination Port', 3, 1, "5044", 3, 20, 6, 5), + ( + 'Logstash Host', + 1, + 1, + previous_config_values[Constants.BEAT_LS_HOST], + 1, + 25, + 30, + 255, + ), + ( + 'Logstash Port', + 2, + 1, + previous_config_values[Constants.BEAT_LS_PORT] + if Constants.BEAT_LS_PORT in previous_config_values + else "5044", + 2, + 25, + 6, + 5, + ), ], ) - values = [x.strip() for x in values] - - if (code == Dialog.CANCEL) or (code == Dialog.ESC): + if code == Dialog.CANCEL or code == Dialog.ESC: raise CancelledError + values = [x.strip() for x in values] + if (len(values[0]) <= 0) or (len(values[1]) <= 0) or (not values[1].isnumeric()): + code = d.msgbox(text=Constants.MSG_ERROR_BAD_HOST) + forwarder_config_error = True + else: + logstash_host = values[0] + logstash_port = values[1] - elif (len(values[0]) <= 0) or (not os.path.isdir(values[0])): - code = d.msgbox(text=Constants.MSG_ERROR_DIR_NOT_FOUND) + if not forwarder_config_error: + # store inputted items into the configuration dictionary for the forwarder - elif (len(values[1]) <= 0) or (len(values[2]) <= 0) or (not values[2].isnumeric()): - code = d.msgbox(text=Constants.MSG_ERROR_BAD_HOST) + if beat_interval is not None: + forwarder_dict[Constants.BEAT_INTERVAL] = f"{beat_interval}s" - else: + if log_path is not None: forwarder_dict[Constants.BEAT_ZEEK_LOG_PATTERN_KEY] = os.path.join( - os.path.join(values[0], Constants.BEAT_ZEEK_LOG_PATH_SUBDIR), + os.path.join(log_path, Constants.BEAT_ZEEK_LOG_PATH_SUBDIR), Constants.BEAT_ZEEK_LOG_PATTERN_VAL, ) forwarder_dict[Constants.BEAT_STATIC_ZEEK_LOG_PATTERN_KEY] = os.path.join( - os.path.join(values[0], Constants.BEAT_STATIC_ZEEK_LOG_PATH_SUBDIR), + os.path.join(log_path, Constants.BEAT_STATIC_ZEEK_LOG_PATH_SUBDIR), Constants.BEAT_ZEEK_LOG_PATTERN_VAL, ) forwarder_dict[Constants.BEAT_SURICATA_LOG_PATTERN_KEY] = os.path.join( - os.path.join(values[0], Constants.BEAT_SURICATA_LOG_PATH_SUBDIR), + os.path.join(log_path, Constants.BEAT_SURICATA_LOG_PATH_SUBDIR), Constants.BEAT_SURICATA_LOG_PATTERN_VAL, ) - forwarder_dict[Constants.BEAT_LS_HOST] = values[1] - forwarder_dict[Constants.BEAT_LS_PORT] = values[2] - break - # optionally, filebeat can use SSL if Logstash is configured for it - logstash_ssl = "false" - logstash_ssl_verify = "none" - if ( - d.yesno( - "Forward Zeek logs over SSL? (Note: This requires the destination to be similarly configured and a corresponding copy of the client SSL files.)", - yes_label="SSL", - no_label="Unencrypted", - ) - == Dialog.OK - ): - logstash_ssl = "true" - if ( - d.yesno("Logstash SSL verification", yes_label="None", no_label="Force Peer") - != Dialog.OK - ): - logstash_ssl_verify = "force_peer" - forwarder_dict[Constants.BEAT_LS_SSL] = logstash_ssl - forwarder_dict[Constants.BEAT_LS_SSL_VERIFY] = logstash_ssl_verify - - if forwarder_dict[Constants.BEAT_LS_SSL] == "true": - while True: - code, values = d.form( - Constants.MSG_CONFIG_GENERIC.format(fwd_mode), - [ - ('SSL Certificate Authorities File', 1, 1, "", 1, 35, 30, 255), - ('SSL Certificate File', 2, 1, "", 2, 35, 30, 255), - ('SSL Key File', 3, 1, "", 3, 35, 30, 255), - ], - ) - values = [x.strip() for x in values] + if logstash_host is not None: + forwarder_dict[Constants.BEAT_LS_HOST] = logstash_host - if (code == Dialog.CANCEL) or (code == Dialog.ESC): - raise CancelledError + if logstash_port is not None: + forwarder_dict[Constants.BEAT_LS_PORT] = logstash_port - elif ( - (len(values[0]) <= 0) - or (not os.path.isfile(values[0])) - or (len(values[1]) <= 0) - or (not os.path.isfile(values[1])) - or (len(values[2]) <= 0) - or (not os.path.isfile(values[2])) - ): - code = d.msgbox(text=Constants.MSG_ERROR_FILE_NOT_FOUND) + break - else: - forwarder_dict[Constants.BEAT_LS_SSL_CA_CRT] = values[0] - forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_CRT] = values[1] - forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_KEY] = values[2] - break + # optionally, filebeat can use SSL if Logstash is configured for it + logstash_ssl = "false" + logstash_ssl_verify = "none" + if ( + d.yesno( + "Forward to Logstash over SSL? (Note: This requires the destination to be similarly configured and a corresponding copy of the client SSL files.)", + yes_label="SSL", + no_label="Unencrypted", + ) + == Dialog.OK + ): + logstash_ssl = "true" + if d.yesno("Logstash SSL verification", yes_label="None", no_label="Force Peer") != Dialog.OK: + logstash_ssl_verify = "force_peer" + forwarder_dict[Constants.BEAT_LS_SSL] = logstash_ssl + forwarder_dict[Constants.BEAT_LS_SSL_VERIFY] = logstash_ssl_verify - else: - forwarder_dict[Constants.BEAT_LS_SSL_CA_CRT] = "" - forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_CRT] = "" - forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_KEY] = "" - - # see if logstash port is open (not a great connection test, but better than nothing!) - code = d.infobox(Constants.MSG_TESTING_CONNECTION.format("Logstash")) - if not check_socket( - forwarder_dict[Constants.BEAT_LS_HOST], int(forwarder_dict[Constants.BEAT_LS_PORT]) - ): - code = d.yesno( - text=Constants.MSG_TESTING_CONNECTION_FAILURE_LOGSTASH.format( - "Logstash", - forwarder_dict[Constants.BEAT_LS_HOST], - forwarder_dict[Constants.BEAT_LS_PORT], - ), - yes_label="Ignore Error", - no_label="Start Over", + if forwarder_dict[Constants.BEAT_LS_SSL] == "true": + while True: + code, values = d.form( + Constants.MSG_CONFIG_GENERIC.format(fwd_mode), + [ + ( + 'SSL Certificate Authorities File', + 1, + 1, + previous_config_values[Constants.BEAT_LS_SSL_CA_CRT] + if Constants.BEAT_LS_SSL_CA_CRT in previous_config_values + else f"{BEAT_LS_CERT_DIR_DEFAULT}/ca.crt", + 1, + 35, + 30, + 255, + ), + ( + 'SSL Certificate File', + 2, + 1, + previous_config_values[Constants.BEAT_LS_SSL_CLIENT_CRT] + if Constants.BEAT_LS_SSL_CLIENT_CRT in previous_config_values + else f"{BEAT_LS_CERT_DIR_DEFAULT}/client.crt", + 2, + 35, + 30, + 255, + ), + ( + 'SSL Key File', + 3, + 1, + previous_config_values[Constants.BEAT_LS_SSL_CLIENT_KEY] + if Constants.BEAT_LS_SSL_CLIENT_KEY in previous_config_values + else f"{BEAT_LS_CERT_DIR_DEFAULT}/client.key", + 3, + 35, + 30, + 255, + ), + ], ) - if code != Dialog.OK: + values = [x.strip() for x in values] + + if (code == Dialog.CANCEL) or (code == Dialog.ESC): raise CancelledError - # outside of filebeat/metricbeat if/else, get confirmation and write out the values to the keystore - if forwarder_dict: + elif ( + (len(values[0]) <= 0) + or (not os.path.isfile(values[0])) + or (len(values[1]) <= 0) + or (not os.path.isfile(values[1])) + or (len(values[2]) <= 0) + or (not os.path.isfile(values[2])) + ): + code = d.msgbox(text=Constants.MSG_ERROR_FILE_NOT_FOUND) - # get confirmation of parameters before we pull the trigger + else: + forwarder_dict[Constants.BEAT_LS_SSL_CA_CRT] = values[0] + forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_CRT] = values[1] + forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_KEY] = values[2] + break + + else: + forwarder_dict[Constants.BEAT_LS_SSL_CA_CRT] = "" + forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_CRT] = "" + forwarder_dict[Constants.BEAT_LS_SSL_CLIENT_KEY] = "" + + # see if logstash port is open (not a great connection test, but better than nothing!) + code = d.infobox(Constants.MSG_TESTING_CONNECTION.format("Logstash")) + if not check_socket( + forwarder_dict[Constants.BEAT_LS_HOST], int(forwarder_dict[Constants.BEAT_LS_PORT]) + ): code = d.yesno( - Constants.MSG_CONFIG_FORWARDING_CONFIRM.format( - fwd_mode, - "\n".join( - sorted([f"{k}={v}" for k, v in forwarder_dict.items() if "PASSWORD" not in k]) - ), + text=Constants.MSG_TESTING_CONNECTION_FAILURE_LOGSTASH.format( + "Logstash", + forwarder_dict[Constants.BEAT_LS_HOST], + forwarder_dict[Constants.BEAT_LS_PORT], ), - yes_label="OK", - no_label="Cancel", + yes_label="Ignore Error", + no_label="Start Over", ) if code != Dialog.OK: raise CancelledError - previous_config_values = forwarder_dict.copy() - - # it's go time, call keystore add for each item - for k, v in sorted(forwarder_dict.items()): - ecode, add_results = run_process( - f"{Constants.BEAT_CMD[fwd_mode]} keystore add {k} --stdin --force", stdin=v, stderr=True - ) - if ecode != 0: - # keystore creation failed - raise Exception(Constants.MSG_ERROR_KEYSTORE.format(fwd_mode, "\n".join(add_results))) + # get confirmation of parameters before we pull the trigger + code = d.yesno( + Constants.MSG_CONFIG_FORWARDING_CONFIRM.format( + fwd_mode, + "\n".join(sorted([f"{k}={v}" for k, v in forwarder_dict.items() if "PASSWORD" not in k])), + ), + yes_label="OK", + no_label="Cancel", + ) + if code != Dialog.OK: + raise CancelledError - # get a final list of parameters that were set to show the user that stuff happened - ecode, list_results = run_process(f"{Constants.BEAT_CMD[fwd_mode]} keystore list") - if ecode == 0: - code = d.msgbox( - text=Constants.MSG_CONFIG_FORWARDING_SUCCESS.format(fwd_mode, "\n".join(list_results)) - ) + previous_config_values = forwarder_dict.copy() - else: - # keystore list failed + # it's go time, call keystore add for each item + for k, v in sorted(forwarder_dict.items()): + ecode, add_results = run_process( + f"{Constants.BEAT_CMD[fwd_mode]} keystore add {k} --stdin --force", stdin=v, stderr=True + ) + if ecode != 0: + # keystore creation failed raise Exception(Constants.MSG_ERROR_KEYSTORE.format(fwd_mode, "\n".join(add_results))) + # get a final list of parameters that were set to show the user that stuff happened + ecode, list_results = run_process(f"{Constants.BEAT_CMD[fwd_mode]} keystore list") + if ecode == 0: + code = d.msgbox( + text=Constants.MSG_CONFIG_FORWARDING_SUCCESS.format(fwd_mode, "\n".join(list_results)) + ) + else: - # we got through the config but ended up with no values for configuration! - raise Exception(Constants.MSG_MESSAGE_ERROR.format(Constants.MSG_EMPTY_CONFIG_ERROR)) + # keystore list failed + raise Exception(Constants.MSG_ERROR_KEYSTORE.format(fwd_mode, "\n".join(add_results))) + + else: + # we're here without a valid forwarding type selection?!? + raise Exception(Constants.MSG_MESSAGE_ERROR.format(Constants.MSG_INVALID_FORWARDING_TYPE)) except CancelledError as c: # d.msgbox(text=Constants.MSG_CANCEL_ERROR) diff --git a/shared/bin/sensor-init.sh b/shared/bin/sensor-init.sh index 223cfaed5..201ccc063 100755 --- a/shared/bin/sensor-init.sh +++ b/shared/bin/sensor-init.sh @@ -20,6 +20,8 @@ if [[ -r "$SCRIPT_PATH"/common-init.sh ]]; then # set up some sensor-specific stuff if [[ -d /opt/sensor ]]; then + [[ -d /opt/sensor/sensor_ctl/ ]] && mkdir -p /opt/sensor/sensor_ctl/logstash-client-certificates + # set ownership for /opt/sensor files for sensor UID:GID chown -R 1000:1000 /opt/sensor find /opt/sensor/ -type d -exec chmod 750 "{}" \; From e2ba73b14043dc89bfe5d146c60f740fee0489e0 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 2 Jun 2022 07:10:31 -0600 Subject: [PATCH 021/122] tweaks for configure forwarding over logstash --- shared/bin/configure-capture.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index 61f6791cb..530f982fa 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -88,6 +88,14 @@ class Constants: # since the OpenSearch fork from ElasticSearch, we're no longer using beats forwarding directly to OpenSearch + # however, Arkime does connect directly to opensearch + BEAT_OS_HOST = "BEAT_OS_HOST" + BEAT_OS_PORT = "BEAT_OS_PORT" + BEAT_OS_PROTOCOL = "BEAT_OS_PROTOCOL" + BEAT_OS_SSL_VERIFY = "BEAT_OS_SSL_VERIFY" + BEAT_HTTP_PASSWORD = "BEAT_HTTP_PASSWORD" + BEAT_HTTP_USERNAME = "BEAT_HTTP_USERNAME" + # specific to filebeat BEAT_ZEEK_LOG_PATH_SUBDIR = os.path.join('logs', 'current') BEAT_ZEEK_LOG_PATTERN_KEY = 'BEAT_LOG_PATTERN' @@ -791,8 +799,8 @@ def main(): code, fwd_mode = d.menu( Constants.MSG_CONFIG_MODE, choices=[ - Constants.MSG_CONFIG_FILEBEAT, Constants.MSG_CONFIG_ARKIME, + Constants.MSG_CONFIG_FILEBEAT, Constants.MSG_CONFIG_METRICBEAT, Constants.MSG_CONFIG_AUDITBEAT, Constants.MSG_CONFIG_SYSLOGBEAT, @@ -958,7 +966,7 @@ def main(): if not forwarder_config_error: # host/port for LogStash code, values = d.form( - Constants.MSG_CONFIG_GENERIC.format(forwarder), + Constants.MSG_CONFIG_GENERIC.format(fwd_mode), [ ( 'Logstash Host', @@ -1050,7 +1058,7 @@ def main(): 1, previous_config_values[Constants.BEAT_LS_SSL_CA_CRT] if Constants.BEAT_LS_SSL_CA_CRT in previous_config_values - else f"{BEAT_LS_CERT_DIR_DEFAULT}/ca.crt", + else f"{Constants.BEAT_LS_CERT_DIR_DEFAULT}/ca.crt", 1, 35, 30, @@ -1062,7 +1070,7 @@ def main(): 1, previous_config_values[Constants.BEAT_LS_SSL_CLIENT_CRT] if Constants.BEAT_LS_SSL_CLIENT_CRT in previous_config_values - else f"{BEAT_LS_CERT_DIR_DEFAULT}/client.crt", + else f"{Constants.BEAT_LS_CERT_DIR_DEFAULT}/client.crt", 2, 35, 30, @@ -1074,7 +1082,7 @@ def main(): 1, previous_config_values[Constants.BEAT_LS_SSL_CLIENT_KEY] if Constants.BEAT_LS_SSL_CLIENT_KEY in previous_config_values - else f"{BEAT_LS_CERT_DIR_DEFAULT}/client.key", + else f"{Constants.BEAT_LS_CERT_DIR_DEFAULT}/client.key", 3, 35, 30, From da71a7503faa12942fa6fe073e93fd22ecc1d69c Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 2 Jun 2022 07:12:08 -0600 Subject: [PATCH 022/122] opensearch v2 is going to be malcolm v6.1.0 --- README.md | 70 +++++++++++++++++------------------ docker-compose-standalone.yml | 34 ++++++++--------- docker-compose.yml | 34 ++++++++--------- docs/web/download.md | 4 +- sensor-iso/README.md | 2 +- 5 files changed, 72 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 3b6afbf6a..dcaa6420c 100644 --- a/README.md +++ b/README.md @@ -184,23 +184,23 @@ You can then observe that the images have been retrieved by running `docker imag ``` $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE -malcolmnetsec/api 6.0.2 xxxxxxxxxxxx 3 days ago 158MB -malcolmnetsec/arkime 6.0.2 xxxxxxxxxxxx 3 days ago 816MB -malcolmnetsec/dashboards 6.0.2 xxxxxxxxxxxx 3 days ago 1.02GB -malcolmnetsec/dashboards-helper 6.0.2 xxxxxxxxxxxx 3 days ago 184MB -malcolmnetsec/filebeat-oss 6.0.2 xxxxxxxxxxxx 3 days ago 624MB -malcolmnetsec/file-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 588MB -malcolmnetsec/file-upload 6.0.2 xxxxxxxxxxxx 3 days ago 259MB -malcolmnetsec/freq 6.0.2 xxxxxxxxxxxx 3 days ago 132MB -malcolmnetsec/htadmin 6.0.2 xxxxxxxxxxxx 3 days ago 242MB -malcolmnetsec/logstash-oss 6.0.2 xxxxxxxxxxxx 3 days ago 1.35GB -malcolmnetsec/name-map-ui 6.0.2 xxxxxxxxxxxx 3 days ago 143MB -malcolmnetsec/nginx-proxy 6.0.2 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/opensearch 6.0.2 xxxxxxxxxxxx 3 days ago 1.17GB -malcolmnetsec/pcap-capture 6.0.2 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/pcap-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 213MB -malcolmnetsec/suricata 6.0.2 xxxxxxxxxxxx 3 days ago 278MB -malcolmnetsec/zeek 6.0.2 xxxxxxxxxxxx 3 days ago 1GB +malcolmnetsec/api 6.1.0 xxxxxxxxxxxx 3 days ago 158MB +malcolmnetsec/arkime 6.1.0 xxxxxxxxxxxx 3 days ago 816MB +malcolmnetsec/dashboards 6.1.0 xxxxxxxxxxxx 3 days ago 1.02GB +malcolmnetsec/dashboards-helper 6.1.0 xxxxxxxxxxxx 3 days ago 184MB +malcolmnetsec/filebeat-oss 6.1.0 xxxxxxxxxxxx 3 days ago 624MB +malcolmnetsec/file-monitor 6.1.0 xxxxxxxxxxxx 3 days ago 588MB +malcolmnetsec/file-upload 6.1.0 xxxxxxxxxxxx 3 days ago 259MB +malcolmnetsec/freq 6.1.0 xxxxxxxxxxxx 3 days ago 132MB +malcolmnetsec/htadmin 6.1.0 xxxxxxxxxxxx 3 days ago 242MB +malcolmnetsec/logstash-oss 6.1.0 xxxxxxxxxxxx 3 days ago 1.35GB +malcolmnetsec/name-map-ui 6.1.0 xxxxxxxxxxxx 3 days ago 143MB +malcolmnetsec/nginx-proxy 6.1.0 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/opensearch 6.1.0 xxxxxxxxxxxx 3 days ago 1.17GB +malcolmnetsec/pcap-capture 6.1.0 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/pcap-monitor 6.1.0 xxxxxxxxxxxx 3 days ago 213MB +malcolmnetsec/suricata 6.1.0 xxxxxxxxxxxx 3 days ago 278MB +malcolmnetsec/zeek 6.1.0 xxxxxxxxxxxx 3 days ago 1GB ``` #### Import from pre-packaged tarballs @@ -3427,7 +3427,7 @@ Building the ISO may take 30 minutes or more depending on your system. As the bu ``` … -Finished, created "/malcolm-build/malcolm-iso/malcolm-6.0.2.iso" +Finished, created "/malcolm-build/malcolm-iso/malcolm-6.1.0.iso" … ``` @@ -3829,23 +3829,23 @@ Pulling zeek ... done user@host:~/Malcolm$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE -malcolmnetsec/api 6.0.2 xxxxxxxxxxxx 3 days ago 158MB -malcolmnetsec/arkime 6.0.2 xxxxxxxxxxxx 3 days ago 816MB -malcolmnetsec/dashboards 6.0.2 xxxxxxxxxxxx 3 days ago 1.02GB -malcolmnetsec/dashboards-helper 6.0.2 xxxxxxxxxxxx 3 days ago 184MB -malcolmnetsec/filebeat-oss 6.0.2 xxxxxxxxxxxx 3 days ago 624MB -malcolmnetsec/file-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 588MB -malcolmnetsec/file-upload 6.0.2 xxxxxxxxxxxx 3 days ago 259MB -malcolmnetsec/freq 6.0.2 xxxxxxxxxxxx 3 days ago 132MB -malcolmnetsec/htadmin 6.0.2 xxxxxxxxxxxx 3 days ago 242MB -malcolmnetsec/logstash-oss 6.0.2 xxxxxxxxxxxx 3 days ago 1.35GB -malcolmnetsec/name-map-ui 6.0.2 xxxxxxxxxxxx 3 days ago 143MB -malcolmnetsec/nginx-proxy 6.0.2 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/opensearch 6.0.2 xxxxxxxxxxxx 3 days ago 1.17GB -malcolmnetsec/pcap-capture 6.0.2 xxxxxxxxxxxx 3 days ago 121MB -malcolmnetsec/pcap-monitor 6.0.2 xxxxxxxxxxxx 3 days ago 213MB -malcolmnetsec/suricata 6.0.2 xxxxxxxxxxxx 3 days ago 278MB -malcolmnetsec/zeek 6.0.2 xxxxxxxxxxxx 3 days ago 1GB +malcolmnetsec/api 6.1.0 xxxxxxxxxxxx 3 days ago 158MB +malcolmnetsec/arkime 6.1.0 xxxxxxxxxxxx 3 days ago 816MB +malcolmnetsec/dashboards 6.1.0 xxxxxxxxxxxx 3 days ago 1.02GB +malcolmnetsec/dashboards-helper 6.1.0 xxxxxxxxxxxx 3 days ago 184MB +malcolmnetsec/filebeat-oss 6.1.0 xxxxxxxxxxxx 3 days ago 624MB +malcolmnetsec/file-monitor 6.1.0 xxxxxxxxxxxx 3 days ago 588MB +malcolmnetsec/file-upload 6.1.0 xxxxxxxxxxxx 3 days ago 259MB +malcolmnetsec/freq 6.1.0 xxxxxxxxxxxx 3 days ago 132MB +malcolmnetsec/htadmin 6.1.0 xxxxxxxxxxxx 3 days ago 242MB +malcolmnetsec/logstash-oss 6.1.0 xxxxxxxxxxxx 3 days ago 1.35GB +malcolmnetsec/name-map-ui 6.1.0 xxxxxxxxxxxx 3 days ago 143MB +malcolmnetsec/nginx-proxy 6.1.0 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/opensearch 6.1.0 xxxxxxxxxxxx 3 days ago 1.17GB +malcolmnetsec/pcap-capture 6.1.0 xxxxxxxxxxxx 3 days ago 121MB +malcolmnetsec/pcap-monitor 6.1.0 xxxxxxxxxxxx 3 days ago 213MB +malcolmnetsec/suricata 6.1.0 xxxxxxxxxxxx 3 days ago 278MB +malcolmnetsec/zeek 6.1.0 xxxxxxxxxxxx 3 days ago 1GB ``` Finally, we can start Malcolm. When Malcolm starts it will stream informational and debug messages to the console. If you wish, you can safely close the console or use `Ctrl+C` to stop these messages; Malcolm will continue running in the background. diff --git a/docker-compose-standalone.yml b/docker-compose-standalone.yml index f60f1791f..ef12b0a4e 100644 --- a/docker-compose-standalone.yml +++ b/docker-compose-standalone.yml @@ -163,7 +163,7 @@ x-pcap-capture-variables: &pcap-capture-variables services: opensearch: - image: malcolmnetsec/opensearch:6.0.2 + image: malcolmnetsec/opensearch:6.1.0 restart: "no" stdin_open: false tty: true @@ -202,7 +202,7 @@ services: retries: 3 start_period: 180s dashboards-helper: - image: malcolmnetsec/dashboards-helper:6.0.2 + image: malcolmnetsec/dashboards-helper:6.1.0 restart: "no" stdin_open: false tty: true @@ -232,7 +232,7 @@ services: retries: 3 start_period: 30s dashboards: - image: malcolmnetsec/dashboards:6.0.2 + image: malcolmnetsec/dashboards:6.1.0 restart: "no" stdin_open: false tty: true @@ -255,7 +255,7 @@ services: retries: 3 start_period: 210s logstash: - image: malcolmnetsec/logstash-oss:6.0.2 + image: malcolmnetsec/logstash-oss:6.1.0 restart: "no" stdin_open: false tty: true @@ -300,7 +300,7 @@ services: retries: 3 start_period: 600s filebeat: - image: malcolmnetsec/filebeat-oss:6.0.2 + image: malcolmnetsec/filebeat-oss:6.1.0 restart: "no" stdin_open: false tty: true @@ -332,7 +332,7 @@ services: retries: 3 start_period: 60s arkime: - image: malcolmnetsec/arkime:6.0.2 + image: malcolmnetsec/arkime:6.1.0 restart: "no" stdin_open: false tty: true @@ -372,7 +372,7 @@ services: retries: 3 start_period: 210s zeek: - image: malcolmnetsec/zeek:6.0.2 + image: malcolmnetsec/zeek:6.1.0 restart: "no" stdin_open: false tty: true @@ -403,7 +403,7 @@ services: retries: 3 start_period: 60s suricata: - image: malcolmnetsec/suricata:6.0.2 + image: malcolmnetsec/suricata:6.1.0 restart: "no" stdin_open: false tty: true @@ -428,7 +428,7 @@ services: retries: 3 start_period: 120s file-monitor: - image: malcolmnetsec/file-monitor:6.0.2 + image: malcolmnetsec/file-monitor:6.1.0 restart: "no" stdin_open: false tty: true @@ -453,7 +453,7 @@ services: retries: 3 start_period: 60s pcap-capture: - image: malcolmnetsec/pcap-capture:6.0.2 + image: malcolmnetsec/pcap-capture:6.1.0 restart: "no" stdin_open: false tty: true @@ -473,7 +473,7 @@ services: volumes: - ./pcap/upload:/pcap pcap-monitor: - image: malcolmnetsec/pcap-monitor:6.0.2 + image: malcolmnetsec/pcap-monitor:6.1.0 restart: "no" stdin_open: false tty: true @@ -498,7 +498,7 @@ services: retries: 3 start_period: 90s upload: - image: malcolmnetsec/file-upload:6.0.2 + image: malcolmnetsec/file-upload:6.1.0 restart: "no" stdin_open: false tty: true @@ -526,7 +526,7 @@ services: retries: 3 start_period: 60s htadmin: - image: malcolmnetsec/htadmin:6.0.2 + image: malcolmnetsec/htadmin:6.1.0 restart: "no" stdin_open: false tty: true @@ -550,7 +550,7 @@ services: retries: 3 start_period: 60s freq: - image: malcolmnetsec/freq:6.0.2 + image: malcolmnetsec/freq:6.1.0 restart: "no" stdin_open: false tty: true @@ -570,7 +570,7 @@ services: retries: 3 start_period: 60s name-map-ui: - image: malcolmnetsec/name-map-ui:6.0.2 + image: malcolmnetsec/name-map-ui:6.1.0 restart: "no" stdin_open: false tty: true @@ -593,7 +593,7 @@ services: retries: 3 start_period: 60s api: - image: malcolmnetsec/api:6.0.2 + image: malcolmnetsec/api:6.1.0 command: gunicorn --bind 0:5000 manage:app restart: "no" stdin_open: false @@ -613,7 +613,7 @@ services: retries: 3 start_period: 60s nginx-proxy: - image: malcolmnetsec/nginx-proxy:6.0.2 + image: malcolmnetsec/nginx-proxy:6.1.0 restart: "no" stdin_open: false tty: true diff --git a/docker-compose.yml b/docker-compose.yml index e95029f96..c78a462e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -166,7 +166,7 @@ services: build: context: . dockerfile: Dockerfiles/opensearch.Dockerfile - image: malcolmnetsec/opensearch:6.0.2 + image: malcolmnetsec/opensearch:6.1.0 restart: "no" stdin_open: false tty: true @@ -208,7 +208,7 @@ services: build: context: . dockerfile: Dockerfiles/dashboards-helper.Dockerfile - image: malcolmnetsec/dashboards-helper:6.0.2 + image: malcolmnetsec/dashboards-helper:6.1.0 restart: "no" stdin_open: false tty: true @@ -241,7 +241,7 @@ services: build: context: . dockerfile: Dockerfiles/dashboards.Dockerfile - image: malcolmnetsec/dashboards:6.0.2 + image: malcolmnetsec/dashboards:6.1.0 restart: "no" stdin_open: false tty: true @@ -267,7 +267,7 @@ services: build: context: . dockerfile: Dockerfiles/logstash.Dockerfile - image: malcolmnetsec/logstash-oss:6.0.2 + image: malcolmnetsec/logstash-oss:6.1.0 restart: "no" stdin_open: false tty: true @@ -319,7 +319,7 @@ services: build: context: . dockerfile: Dockerfiles/filebeat.Dockerfile - image: malcolmnetsec/filebeat-oss:6.0.2 + image: malcolmnetsec/filebeat-oss:6.1.0 restart: "no" stdin_open: false tty: true @@ -354,7 +354,7 @@ services: build: context: . dockerfile: Dockerfiles/arkime.Dockerfile - image: malcolmnetsec/arkime:6.0.2 + image: malcolmnetsec/arkime:6.1.0 restart: "no" stdin_open: false tty: true @@ -400,7 +400,7 @@ services: build: context: . dockerfile: Dockerfiles/zeek.Dockerfile - image: malcolmnetsec/zeek:6.0.2 + image: malcolmnetsec/zeek:6.1.0 restart: "no" stdin_open: false tty: true @@ -435,7 +435,7 @@ services: build: context: . dockerfile: Dockerfiles/suricata.Dockerfile - image: malcolmnetsec/suricata:6.0.2 + image: malcolmnetsec/suricata:6.1.0 restart: "no" stdin_open: false tty: true @@ -463,7 +463,7 @@ services: build: context: . dockerfile: Dockerfiles/file-monitor.Dockerfile - image: malcolmnetsec/file-monitor:6.0.2 + image: malcolmnetsec/file-monitor:6.1.0 restart: "no" stdin_open: false tty: true @@ -491,7 +491,7 @@ services: build: context: . dockerfile: Dockerfiles/pcap-capture.Dockerfile - image: malcolmnetsec/pcap-capture:6.0.2 + image: malcolmnetsec/pcap-capture:6.1.0 restart: "no" stdin_open: false tty: true @@ -514,7 +514,7 @@ services: build: context: . dockerfile: Dockerfiles/pcap-monitor.Dockerfile - image: malcolmnetsec/pcap-monitor:6.0.2 + image: malcolmnetsec/pcap-monitor:6.1.0 restart: "no" stdin_open: false tty: true @@ -542,7 +542,7 @@ services: build: context: . dockerfile: Dockerfiles/file-upload.Dockerfile - image: malcolmnetsec/file-upload:6.0.2 + image: malcolmnetsec/file-upload:6.1.0 restart: "no" stdin_open: false tty: true @@ -570,7 +570,7 @@ services: retries: 3 start_period: 60s htadmin: - image: malcolmnetsec/htadmin:6.0.2 + image: malcolmnetsec/htadmin:6.1.0 build: context: . dockerfile: Dockerfiles/htadmin.Dockerfile @@ -597,7 +597,7 @@ services: retries: 3 start_period: 60s freq: - image: malcolmnetsec/freq:6.0.2 + image: malcolmnetsec/freq:6.1.0 build: context: . dockerfile: Dockerfiles/freq.Dockerfile @@ -620,7 +620,7 @@ services: retries: 3 start_period: 60s name-map-ui: - image: malcolmnetsec/name-map-ui:6.0.2 + image: malcolmnetsec/name-map-ui:6.1.0 build: context: . dockerfile: Dockerfiles/name-map-ui.Dockerfile @@ -646,7 +646,7 @@ services: retries: 3 start_period: 60s api: - image: malcolmnetsec/api:6.0.2 + image: malcolmnetsec/api:6.1.0 build: context: . dockerfile: Dockerfiles/api.Dockerfile @@ -672,7 +672,7 @@ services: build: context: . dockerfile: Dockerfiles/nginx.Dockerfile - image: malcolmnetsec/nginx-proxy:6.0.2 + image: malcolmnetsec/nginx-proxy:6.1.0 restart: "no" stdin_open: false tty: true diff --git a/docs/web/download.md b/docs/web/download.md index c398eb03e..2553ed90a 100644 --- a/docs/web/download.md +++ b/docs/web/download.md @@ -16,7 +16,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [malcolm-6.0.2.iso](/iso/malcolm-6.0.2.iso) (4.3GiB) | [`xxxxxxxx`](/iso/malcolm-6.0.2.iso.sha256.txt) | +| [malcolm-6.1.0.iso](/iso/malcolm-6.1.0.iso) (4.3GiB) | [`xxxxxxxx`](/iso/malcolm-6.1.0.iso.sha256.txt) | ## Hedgehog Linux @@ -26,7 +26,7 @@ While official downloads of the Malcolm installer ISO are not provided, an **uno | ISO | SHA256 | |---|---| -| [hedgehog-6.0.2.iso](/iso/hedgehog-6.0.2.iso) (2.32iB) | [`xxxxxxxx`](/iso/hedgehog-6.0.2.iso.sha256.txt) | +| [hedgehog-6.1.0.iso](/iso/hedgehog-6.1.0.iso) (2.32iB) | [`xxxxxxxx`](/iso/hedgehog-6.1.0.iso.sha256.txt) | ## Warning diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 8159981fb..d87172b33 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -409,7 +409,7 @@ Building the ISO may take 90 minutes or more depending on your system. As the bu ``` … -Finished, created "/sensor-build/hedgehog-6.0.2.iso" +Finished, created "/sensor-build/hedgehog-6.1.0.iso" … ``` From 3b721ee28cb94d285528e88b48b401ccc19df40b Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 14:31:34 -0600 Subject: [PATCH 023/122] Work in progress, going to dynamically load the ECS rather than copying it myself --- Dockerfiles/dashboards-helper.Dockerfile | 14 +- arkime/wise/source.zeeklogs.js | 2 +- .../scripts/create-arkime-sessions-index.sh | 18 +- .../templates/malcolm_beats_template.json | 79 +++----- dashboards/templates/malcolm_template.json | 177 +++--------------- logstash/pipelines/beats/12_lookups.conf | 2 +- logstash/pipelines/beats/98_finalize.conf | 2 +- logstash/pipelines/enrichment/11_lookups.conf | 2 +- .../pipelines/enrichment/98_finalize.conf | 2 +- .../pipelines/suricata/11_suricata_logs.conf | 2 +- logstash/pipelines/zeek/11_zeek_logs.conf | 4 +- 11 files changed, 81 insertions(+), 223 deletions(-) diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index 8d278dfc0..1cd09771a 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -49,6 +49,8 @@ ENV SUPERCRONIC "supercronic-linux-amd64" ENV SUPERCRONIC_SHA1SUM "048b95b48b708983effb2e5c935a1ef8483d9e3e" ENV SUPERCRONIC_CRONTAB "/etc/crontab" +ENV ECS_RELEASES_URL "https://api.github.com/repos/elastic/ecs/releases/latest" + ADD dashboards/dashboards /opt/dashboards # At the moment Beats won't import dashboards into OpenSearch dashboards # (see opensearch-project/OpenSearch-Dashboards#656 and @@ -83,8 +85,16 @@ RUN apk update --no-cache && \ adduser -D -H -u ${DEFAULT_UID} -h /nonexistant -s /sbin/nologin -G ${PGROUP} -g ${PUSER} ${PUSER} ; \ addgroup ${PUSER} tty ; \ addgroup ${PUSER} shadow ; \ - mkdir -p /data/init && \ - chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/templates /opt/maps /data/init /opt/anomaly_detectors && \ + mkdir -p /data/init /opt/ecs && \ + cd /opt && \ + curl -sSL "$(curl -sSL "$ECS_RELEASES_URL" | jq '.tarball_url' | tr -d '"')" | tar xzf - -C ./ecs --strip-components 1 && \ + mv /opt/ecs/generated/elasticsearch /opt/ecs-templates && \ + find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"match_only_text"/\1"text"/' "{}" \; && \ + find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"constant_keyword"/\1"keyword"/' "{}" \; && \ + find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"wildcard"/\1"keyword"/' "{}" \; && \ + find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"flattened"/\1"object"/' "{}" \; && \ + rm -rf /opt/ecs && \ + chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/templates /opt/ecs-templates /opt/maps /data/init /opt/anomaly_detectors && \ chmod 755 /data/*.sh /data/*.py /data/init && \ chmod 400 /opt/maps/* && \ (echo -e "*/2 * * * * /data/create-arkime-sessions-index.sh\n0 10 * * * /data/index-refresh.py --template malcolm_template --unassigned\n30 */6 * * * /data/refresh-auxiliary-index-patterns.sh\n*/20 * * * * /data/opensearch_index_size_prune.py" > ${SUPERCRONIC_CRONTAB}) diff --git a/arkime/wise/source.zeeklogs.js b/arkime/wise/source.zeeklogs.js index c665a91a3..8b3acf3f6 100644 --- a/arkime/wise/source.zeeklogs.js +++ b/arkime/wise/source.zeeklogs.js @@ -708,7 +708,7 @@ class MalcolmSource extends WISESource { "url.port", "url.query", "url.scheme", - "url.user", + "url.username", "user_agent.original", "vulnerability.category", "vulnerability.description", diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index 40f59fdec..ee3072072 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -27,12 +27,7 @@ INDEX_TIME_FIELD=${ARKIME_INDEX_TIME_FIELD:-"firstPacket"} DUMMY_DETECTOR_NAME=${DUMMY_DETECTOR_NAME:-"malcolm_init_dummy"} ALERTING_EXAMPLE_DESTINATION_NAME=${ALERTING_EXAMPLE_DESTINATION_NAME:-"Malcolm API Loopback Webhook"} -OTHER_INDEX_PATTERNS=( - "filebeat-*;filebeat-*;@timestamp" - "metricbeat-*;metricbeat-*;@timestamp" - "auditbeat-*;auditbeat-*;@timestamp" - "packetbeat-*;packetbeat-*;@timestamp" -) + INDEX_POLICY_FILE="/data/init/index-management-policy.json" INDEX_POLICY_FILE_HOST="/data/index-management-policy.json" @@ -89,6 +84,16 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then fi fi + if [[ -d /opt/ecs-templates/composable/component ]]; then + echo "Importing ECS composable templates..." + for i in /opt/ecs-templates/composable/component/*.json; do + TEMP_BASENAME="$(basename "$i")" + TEMP_FILENAME="${TEMP_BASENAME%.*}" + echo "Importing ECS composable templates $TEMP_FILENAME ..." + curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" "$OS_URL/_component_template/ecs_$TEMP_FILENAME" -d "@$i" 2>&1 || true + done + fi + echo "Importing malcolm_template..." if [[ -f "$MALCOLM_TEMPLATE_FILE_ORIG" ]] && [[ ! -f "$MALCOLM_TEMPLATE_FILE" ]]; then @@ -100,6 +105,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then "$OS_URL/_index_template/malcolm_template" -d "@$MALCOLM_TEMPLATE_FILE" 2>&1 # import other templates as well (and get info for creating their index patterns) + OTHER_INDEX_PATTERNS=() for i in "$MALCOLM_TEMPLATES_DIR"/*.json; do TEMP_BASENAME="$(basename "$i")" TEMP_FILENAME="${TEMP_BASENAME%.*}" diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index c557dc5dd..37079e5b2 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -1,61 +1,36 @@ { "index_patterns" : ["malcolm_beats_*"], + "composed_of": [ + "ecs_base", + "ecs_ecs", + "ecs_event", + "ecs_agent", + "ecs_client", + "ecs_destination", + "ecs_error", + "ecs_host", + "ecs_http", + "ecs_log", + "ecs_network", + "ecs_process", + "ecs_related", + "ecs_server", + "ecs_source", + "ecs_threat", + "ecs_url", + "ecs_user", + "ecs_user_agent" + ], "template" :{ + "settings" : { + "index" : { + "mapping.total_fields.limit" : "5000" + } + }, "mappings": { "properties": { - "@timestamp": { "type": "date" }, "timestamp": { "type": "date" }, - "client.address": { "type": "keyword" }, - "ecs.version": { "type": "keyword" }, - "error.message": { "type": "keyword", "index": false, "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "event.category": { "type": "keyword" }, - "event.dataset": { "type": "keyword" }, - "event.hash": { "type": "keyword" }, - "event.id": { "type": "keyword" }, - "event.ingested": { "type": "date" }, - "event.kind": { "type": "keyword" }, - "event.module": { "type": "keyword" }, - "event.original": { "type": "keyword", "index": false, "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "event.outcome": { "type": "keyword" }, - "event.provider": { "type": "keyword" }, - "http.request.body.bytes": { "type": "long" }, - "http.request.method": { "type": "keyword" }, - "http.request.mime_type": { "type": "keyword" }, - "http.request.referrer": { "type": "keyword" }, - "http.response.body.bytes": { "type": "long" }, - "http.response.mime_type": { "type": "keyword" }, - "http.response.status_code": { "type": "long" }, - "http.version": { "type": "keyword" }, - "log.file.path": { "type": "keyword" }, - "log.level": { "type": "keyword" }, - "node": { "type": "keyword" }, - "process.pid": { "type": "integer" }, - "process.thread.id": { "type": "integer" }, - "related.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "source.geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "source.geo.continent_code": { "type": "keyword" }, - "source.geo.country_code2": { "type": "keyword" }, - "source.geo.country_code3": { "type": "keyword" }, - "source.geo.country_iso_code": { "type": "keyword" }, - "source.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "source.geo.dma_code": { "type": "short" }, - "source.geo.ip": { "type": "ip" }, - "source.geo.latitude": { "type": "float" }, - "source.geo.location": { "type": "geo_point" }, - "source.geo.longitude": { "type": "float" }, - "source.geo.postal_code": { "type": "keyword" }, - "source.geo.region_code": { "type": "keyword" }, - "source.geo.region_name": { "type": "keyword" }, - "source.geo.timezone": { "type": "keyword" }, - "tags": { "type": "keyword" }, - "url.original": { "type": "keyword" }, - "user_agent.device.name": { "type": "keyword" }, - "user_agent.name": { "type": "keyword" }, - "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "user_agent.os.full": { "type": "keyword" }, - "user_agent.os.name": { "type": "keyword" }, - "user_agent.os.version": { "type": "keyword" }, - "user_agent.version": { "type": "keyword" } + "node": { "type": "keyword" } } } } diff --git a/dashboards/templates/malcolm_template.json b/dashboards/templates/malcolm_template.json index 1ec9d219a..461c6a602 100644 --- a/dashboards/templates/malcolm_template.json +++ b/dashboards/templates/malcolm_template.json @@ -1,161 +1,73 @@ { "index_patterns" : ["arkime_sessions3-*"], + "composed_of": [ + "ecs_base", + "ecs_ecs", + "ecs_event", + "ecs_agent", + "ecs_client", + "ecs_destination", + "ecs_error", + "ecs_host", + "ecs_http", + "ecs_log", + "ecs_network", + "ecs_process", + "ecs_related", + "ecs_server", + "ecs_source", + "ecs_threat", + "ecs_url", + "ecs_user", + "ecs_user_agent" + ], "template" :{ "settings" : { "index" : { - "mapping.total_fields.limit" : "3000" + "mapping.total_fields.limit" : "5000" } }, "mappings": { "properties": { "firstPacket": { "type": "date" }, "lastPacket": { "type": "date" }, - "@timestamp": { "type": "date" }, "timestamp": { "type": "date" }, - "client.domain": { "type": "keyword" }, - "destination.domain": { "type": "keyword" }, - "destination.geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "destination.geo.continent_code": { "type": "keyword" }, "destination.geo.country_code2": { "type": "keyword" }, "destination.geo.country_code3": { "type": "keyword" }, - "destination.geo.country_iso_code": { "type": "keyword" }, - "destination.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, "destination.geo.dma_code": { "type": "short" }, "destination.geo.ip": { "type": "ip" }, "destination.geo.latitude": { "type": "float" }, "destination.geo.location": { "type": "geo_point" }, "destination.geo.longitude": { "type": "float" }, - "destination.geo.postal_code": { "type": "keyword" }, - "destination.geo.region_code": { "type": "keyword" }, - "destination.geo.region_name": { "type": "keyword" }, - "destination.geo.timezone": { "type": "keyword" }, "destination.hostname": { "type": "keyword" }, - "destination.ip": { "type": "ip" }, "destination.ip_reverse_dns": { "type": "keyword" }, - "destination.mac": { "type": "keyword" }, "destination.oui": { "type": "keyword" }, - "destination.port": { "type": "long" }, "destination.segment": { "type": "keyword" }, - "dns.answers": { - "type": "nested", - "properties": { - "class": { "type": "keyword" }, - "data": { "type": "keyword" }, - "name": { "type": "keyword" }, - "ttl": { "type": "long" }, - "type": { "type": "keyword" } - } - }, - "dns.header_flags": { "type": "keyword" }, "dns.host": { "type": "keyword" }, - "dns.id": { "type": "keyword" }, - "dns.op_code": { "type": "keyword" }, - "dns.question.class": { "type": "keyword" }, - "dns.question.name": { "type": "keyword" }, - "dns.question.type": { "type": "keyword" }, - "dns.resolved_ip": { "type": "ip" }, - "dns.response_code": { "type": "keyword" }, - "dns.type": { "type": "keyword" }, - "ecs.version": { "type": "keyword" }, - "event.action": { "type": "keyword" }, - "event.category": { "type": "keyword" }, - "event.dataset": { "type": "keyword" }, - "event.duration": { "type": "long" }, - "event.end": { "type": "date" }, "event.freq_score_v1": { "type": "float" }, "event.freq_score_v2": { "type": "float" }, - "event.hash": { "type": "keyword" }, "event.hits": { "type": "long" }, - "event.id": { "type": "keyword" }, - "event.ingested": { "type": "date" }, - "event.kind": { "type": "keyword" }, - "event.module": { "type": "keyword" }, - "event.original": { "type": "keyword", "index": false, "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "event.outcome": { "type": "keyword" }, - "event.provider": { "type": "keyword" }, "event.result": { "type": "keyword" }, - "event.risk_score": { "type": "float" }, - "event.severity": { "type": "integer" }, "event.severity_tags": { "type": "keyword" }, - "event.start": { "type": "date" }, - "file.accessed": { "type": "date" }, - "file.created": { "type": "date" }, - "file.ctime": { "type": "date" }, - "file.directory": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "file.extension": { "type": "keyword" }, - "file.hash.md5": { "type": "keyword" }, - "file.hash.sha1": { "type": "keyword" }, - "file.hash.sha256": { "type": "keyword" }, - "file.mime_type": { "type": "keyword" }, - "file.mtime": { "type": "date" }, - "file.name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "file.path": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "file.size": { "type": "long" }, "file.source": { "type": "keyword" }, - "file.type": { "type": "keyword" }, - "http.request.body.bytes": { "type": "long" }, - "http.request.method": { "type": "keyword" }, - "http.request.mime_type": { "type": "keyword" }, - "http.request.referrer": { "type": "keyword" }, - "http.response.body.bytes": { "type": "long" }, - "http.response.mime_type": { "type": "keyword" }, - "http.response.status_code": { "type": "long" }, - "http.version": { "type": "keyword" }, - "log.file.path": { "type": "keyword" }, - "network.application": { "type": "keyword" }, - "network.bytes": { "type": "long" }, - "network.community_id": { "type": "keyword" }, - "network.direction": { "type": "keyword" }, - "network.iana_number": { "type": "keyword" }, - "network.inner.vlan.id": { "type": "keyword" }, - "network.name": { "type": "keyword" }, - "network.packets": { "type": "long" }, - "network.protocol": { "type": "keyword" }, "network.protocol_version": { "type": "keyword" }, - "network.transport": { "type": "keyword" }, - "network.type": { "type": "keyword" }, - "network.vlan.id": { "type": "keyword" }, "node": { "type": "keyword" }, "protocol": { "type": "keyword" }, "quic.host": { "type": "keyword" }, "quic.version": { "type": "keyword" }, - "related.hash": { "type": "keyword" }, - "related.hosts": { "type": "keyword" }, - "related.ip": { "type": "ip" }, "related.mac": { "type": "keyword" }, "related.oui": { "type": "keyword" }, "related.password": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "related.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "rule.author": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text", "norms": false } } }, - "rule.category": { "type": "keyword" }, - "rule.id": { "type": "keyword" }, - "rule.license": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "rule.name": { "type": "keyword" }, - "rule.reference": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "server.domain": { "type": "keyword" }, - "source.geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "source.geo.continent_code": { "type": "keyword" }, "source.geo.country_code2": { "type": "keyword" }, "source.geo.country_code3": { "type": "keyword" }, - "source.geo.country_iso_code": { "type": "keyword" }, - "source.geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, "source.geo.dma_code": { "type": "short" }, "source.geo.ip": { "type": "ip" }, "source.geo.latitude": { "type": "float" }, "source.geo.location": { "type": "geo_point" }, "source.geo.longitude": { "type": "float" }, - "source.geo.postal_code": { "type": "keyword" }, - "source.geo.region_code": { "type": "keyword" }, - "source.geo.region_name": { "type": "keyword" }, - "source.geo.timezone": { "type": "keyword" }, "source.hostname": { "type": "keyword" }, - "source.ip": { "type": "ip" }, "source.ip_reverse_dns": { "type": "keyword" }, - "source.mac": { "type": "keyword" }, - "source.nat.ip": { "type": "ip" }, - "source.nat.port": { "type": "long" }, "source.oui": { "type": "keyword" }, - "source.port": { "type": "long" }, "source.segment": { "type": "keyword" }, "suricata.alert.action": { "type": "keyword" }, "suricata.alert.metadata.created_at": { "type": "keyword" }, @@ -695,53 +607,8 @@ "suricata.tunnel.src_ip": { "type": "ip" }, "suricata.tunnel.src_port": { "type": "integer" }, "suricata.tx_id": { "type": "keyword" }, - "tags": { "type": "keyword" }, - "threat.framework": { "type": "keyword" }, - "threat.tactic.id": { "type": "keyword" }, - "threat.tactic.name": { "type": "keyword" }, - "threat.tactic.reference": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "threat.technique.id": { "type": "keyword" }, - "threat.technique.name": { "type": "keyword" }, - "threat.technique.reference": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "tls.cipher": { "type": "keyword" }, - "tls.client.issuer": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.client.ja3": { "type": "keyword" }, "tls.client.ja3_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.client.server_name": { "type": "keyword" }, - "tls.client.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.curve": { "type": "keyword" }, - "tls.established": { "type": "keyword" }, - "tls.next_protocol": { "type": "keyword" }, - "tls.resumed": { "type": "keyword" }, - "tls.server.issuer": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.server.ja3s": { "type": "keyword" }, "tls.server.ja3s_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.server.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.version": { "type": "keyword" }, - "tls.version_protocol": { "type": "keyword" }, - "url.domain": { "type": "keyword" }, - "url.extension": { "type": "keyword" }, - "url.fragment": { "type": "keyword" }, - "url.full": { "type": "keyword" }, - "url.original": { "type": "keyword" }, - "url.password": { "type": "keyword" }, - "url.path": { "type": "keyword" }, - "url.port": { "type": "long" }, - "url.query": { "type": "keyword" }, - "url.scheme": { "type": "keyword" }, - "url.user": { "type": "keyword" }, - "user_agent.device.name": { "type": "keyword" }, - "user_agent.name": { "type": "keyword" }, - "user_agent.original": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "user_agent.os.full": { "type": "keyword" }, - "user_agent.os.name": { "type": "keyword" }, - "user_agent.version": { "type": "keyword" }, - "vulnerability.category": { "type": "keyword" }, - "vulnerability.enumeration": { "type": "keyword" }, - "vulnerability.description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "vulnerability.id": { "type": "keyword" }, - "vulnerability.reference": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "vulnerability.scanner.vendor": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text", "norms": false } } }, "zeek.bacnet.bvlc_function": { "type": "keyword" }, "zeek.bacnet.invoke_id": { "type": "integer" }, "zeek.bacnet.pdu_service": { "type": "keyword" }, diff --git a/logstash/pipelines/beats/12_lookups.conf b/logstash/pipelines/beats/12_lookups.conf index ab8fa053f..2ee66edfa 100644 --- a/logstash/pipelines/beats/12_lookups.conf +++ b/logstash/pipelines/beats/12_lookups.conf @@ -12,7 +12,7 @@ filter { useragent { id => "user_agent_beats_original" source => "[user_agent][original]" - ecs_compatibility => "v1" + ecs_compatibility => "v8" } } diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 18a8f28d6..492d6309d 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -11,7 +11,7 @@ filter { source => [ "[event][original]" ] concatenate_sources => true # uses event.hash - ecs_compatibility => "v1" + ecs_compatibility => "v8" method => "MURMUR3_128" base64encode => true } diff --git a/logstash/pipelines/enrichment/11_lookups.conf b/logstash/pipelines/enrichment/11_lookups.conf index 1b7c9cd3f..20360d446 100644 --- a/logstash/pipelines/enrichment/11_lookups.conf +++ b/logstash/pipelines/enrichment/11_lookups.conf @@ -432,7 +432,7 @@ filter { useragent { id => "user_agent_original_parse" source => "[user_agent][original]" - ecs_compatibility => "v1" + ecs_compatibility => "v8" } } diff --git a/logstash/pipelines/enrichment/98_finalize.conf b/logstash/pipelines/enrichment/98_finalize.conf index eee3e28fd..c44e5dac0 100644 --- a/logstash/pipelines/enrichment/98_finalize.conf +++ b/logstash/pipelines/enrichment/98_finalize.conf @@ -17,7 +17,7 @@ filter { source => [ "[message]" ] concatenate_sources => true # uses event.hash - ecs_compatibility => "v1" + ecs_compatibility => "v8" method => "MURMUR3_128" base64encode => true } diff --git a/logstash/pipelines/suricata/11_suricata_logs.conf b/logstash/pipelines/suricata/11_suricata_logs.conf index 4e9611794..5706cce09 100644 --- a/logstash/pipelines/suricata/11_suricata_logs.conf +++ b/logstash/pipelines/suricata/11_suricata_logs.conf @@ -452,7 +452,7 @@ filter { "[log][offset]" ] concatenate_sources => true # uses event.hash - ecs_compatibility => "v1" + ecs_compatibility => "v8" method => "MURMUR3_128" base64encode => true } diff --git a/logstash/pipelines/zeek/11_zeek_logs.conf b/logstash/pipelines/zeek/11_zeek_logs.conf index 2bdcf6399..ed4b972ab 100644 --- a/logstash/pipelines/zeek/11_zeek_logs.conf +++ b/logstash/pipelines/zeek/11_zeek_logs.conf @@ -3726,7 +3726,7 @@ filter { "[log][offset]" ] concatenate_sources => true # uses event.hash - ecs_compatibility => "v1" + ecs_compatibility => "v8" method => "MURMUR3_128" base64encode => true } @@ -4436,7 +4436,7 @@ filter { event.set('[url][path]', uri) unless uri.nil? event.set('[url][port]', port) unless port.nil? event.set('[url][query]', query) unless query.nil? || query.empty? - event.set('[url][user]', Array(user).first) unless user.nil? + event.set('[url][username]', Array(user).first) unless user.nil? " # TODO: ECS url domain stuff (url.registered_domain, url.top_level_domain) # perhaps use something like https://github.com/plutonbacon/logstash-filter-publicsuffix From 88f767735e775f3ec923d79a06ecb663ead3ed5f Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 14:47:38 -0600 Subject: [PATCH 024/122] Work in progress, going to dynamically load the ECS rather than copying it myself --- Dockerfiles/dashboards-helper.Dockerfile | 2 +- dashboards/templates/malcolm_beats_template.json | 1 - dashboards/templates/malcolm_template.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index 1cd09771a..e5d418e63 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -92,7 +92,7 @@ RUN apk update --no-cache && \ find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"match_only_text"/\1"text"/' "{}" \; && \ find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"constant_keyword"/\1"keyword"/' "{}" \; && \ find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"wildcard"/\1"keyword"/' "{}" \; && \ - find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"flattened"/\1"object"/' "{}" \; && \ + find /opt/ecs-templates -name "*.json" -exec sed -i 's/\("type"[[:space:]]*:[[:space:]]*\)"flattened"/\1"nested"/' "{}" \; && \ rm -rf /opt/ecs && \ chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/templates /opt/ecs-templates /opt/maps /data/init /opt/anomaly_detectors && \ chmod 755 /data/*.sh /data/*.py /data/init && \ diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 37079e5b2..a65f3f599 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -18,7 +18,6 @@ "ecs_source", "ecs_threat", "ecs_url", - "ecs_user", "ecs_user_agent" ], "template" :{ diff --git a/dashboards/templates/malcolm_template.json b/dashboards/templates/malcolm_template.json index 461c6a602..6cd13a4a6 100644 --- a/dashboards/templates/malcolm_template.json +++ b/dashboards/templates/malcolm_template.json @@ -18,7 +18,6 @@ "ecs_source", "ecs_threat", "ecs_url", - "ecs_user", "ecs_user_agent" ], "template" :{ @@ -609,6 +608,7 @@ "suricata.tx_id": { "type": "keyword" }, "tls.client.ja3_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, "tls.server.ja3s_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "user": { "type": "keyword" }, "zeek.bacnet.bvlc_function": { "type": "keyword" }, "zeek.bacnet.invoke_id": { "type": "integer" }, "zeek.bacnet.pdu_service": { "type": "keyword" }, From 101582a834f3b25f23c760e3f2deda04da099c06 Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 14:52:13 -0600 Subject: [PATCH 025/122] spicy-plugin has been fixed (see zeek/spicy-plugin#112 and zeek/spicy-plugin#115) so unpin version --- Dockerfiles/zeek.Dockerfile | 2 +- sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfiles/zeek.Dockerfile b/Dockerfiles/zeek.Dockerfile index 12c54b673..7e272f662 100644 --- a/Dockerfiles/zeek.Dockerfile +++ b/Dockerfiles/zeek.Dockerfile @@ -127,7 +127,7 @@ RUN apt-get -q update && \ cd /tmp && \ mkdir -p "${CCACHE_DIR}" && \ zkg autoconfig --force && \ - zkg install --force --skiptests --version c9ca2d93aaf7bfb75fb282eaa7214a9057d4666e zeek/spicy-plugin && \ + zkg install --force --skiptests zeek/spicy-plugin && \ bash /usr/local/bin/zeek_install_plugins.sh && \ ( find "${ZEEK_DIR}"/lib/zeek/plugins/packages -type f -name "*.hlto" -exec chmod 755 "{}" \; || true ) && \ ( find "${ZEEK_DIR}"/lib "${ZEEK_DIR}"/var/lib/zkg \( -path "*/build/*" -o -path "*/CMakeFiles/*" \) -type f -name "*.*" -print0 | xargs -0 -I XXX bash -c 'file "XXX" | sed "s/^.*:[[:space:]]//" | grep -Pq "(ELF|gzip)" && rm -f "XXX"' || true ) && \ diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index 2529b7548..a22f16cac 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -86,7 +86,7 @@ dpkg -i ./*.deb # plugins cd /tmp zkg autoconfig --force -zkg install --force --skiptests --version c9ca2d93aaf7bfb75fb282eaa7214a9057d4666e zeek/spicy-plugin +zkg install --force --skiptests zeek/spicy-plugin bash /usr/local/bin/zeek_install_plugins.sh for FILE in /opt/zeek/var/lib/zkg/logs/*; do [[ -r "$FILE" ]] && echo "$FILE" && cat "$FILE" && echo "" From 73fd9a4b5c2dd23aae41b78b66e30e133c59c833 Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 15:11:37 -0600 Subject: [PATCH 026/122] update plugin APIs for opensearch --- .../scripts/create-arkime-sessions-index.sh | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index ee3072072..a547991a3 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -76,7 +76,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then if [[ -f "$INDEX_POLICY_FILE" ]]; then # make API call to define index management policy # https://opensearch.org/docs/latest/im-plugin/ism/api/#create-policy - curl -w "\n" -L --silent --output /dev/null --show-error -XPUT -H "Content-Type: application/json" "$OS_URL/_opendistro/_ism/policies/$INDEX_POLICY_NAME" -d "@$INDEX_POLICY_FILE" + curl -w "\n" -L --silent --output /dev/null --show-error -XPUT -H "Content-Type: application/json" "$OS_URL/_plugins/_ism/policies/$INDEX_POLICY_NAME" -d "@$INDEX_POLICY_FILE" if [[ -f "$MALCOLM_TEMPLATE_FILE_ORIG" ]]; then # insert OpenSearch ISM stuff into index template settings @@ -185,7 +185,7 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # Create anomaly detectors here for i in /opt/anomaly_detectors/*.json; do - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done # trigger a start/stop for the dummy detector to make sure the .opendistro-anomaly-detection-state index gets created @@ -198,15 +198,15 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then DUMMY_DETECTOR_ID="" until [[ -n "$DUMMY_DETECTOR_ID" ]]; do sleep 5 - DUMMY_DETECTOR_ID="$(curl -L --fail --silent --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/_search" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "{ \"query\": { \"match\": { \"name\": \"$DUMMY_DETECTOR_NAME\" } } }" | jq '.. | ._id? // empty' 2>/dev/null | head -n 1 | tr -d '"')" + DUMMY_DETECTOR_ID="$(curl -L --fail --silent --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/_search" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "{ \"query\": { \"match\": { \"name\": \"$DUMMY_DETECTOR_NAME\" } } }" | jq '.. | ._id? // empty' 2>/dev/null | head -n 1 | tr -d '"')" done set -e if [[ -n "$DUMMY_DETECTOR_ID" ]]; then - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_start" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_start" -H 'osd-xsrf:true' -H 'Content-type:application/json' sleep 10 - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_stop" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID/_stop" -H 'osd-xsrf:true' -H 'Content-type:application/json' sleep 10 - curl -L --silent --output /dev/null --show-error -XDELETE "$OS_URL/_opendistro/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID" -H 'osd-xsrf:true' -H 'Content-type:application/json' + curl -L --silent --output /dev/null --show-error -XDELETE "$OS_URL/_plugins/_anomaly_detection/detectors/$DUMMY_DETECTOR_ID" -H 'osd-xsrf:true' -H 'Content-type:application/json' fi echo "OpenSearch anomaly detectors creation complete!" @@ -217,11 +217,11 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # destinations for i in /opt/alerting/destinations/*.json; do - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/destinations" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/destinations" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done # get example destination ID ALERTING_EXAMPLE_DESTINATION_ID=$(curl -L --silent --show-error -XGET -H 'osd-xsrf:true' -H 'Content-type:application/json' \ - "$OS_URL/_opendistro/_alerting/destinations" | \ + "$OS_URL/_plugins/_alerting/destinations" | \ jq -r ".destinations[] | select(.name == \"$ALERTING_EXAMPLE_DESTINATION_NAME\").id" | \ head -n 1) @@ -232,11 +232,11 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then # replace example destination ID in monitor definition TMP_MONITOR_FILENAME="$(mktemp)" sed "s/ALERTING_EXAMPLE_DESTINATION_ID/$ALERTING_EXAMPLE_DESTINATION_ID/g" "$i" > "$TMP_MONITOR_FILENAME" - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$TMP_MONITOR_FILENAME" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$TMP_MONITOR_FILENAME" rm -f "$TMP_MONITOR_FILENAME" else # insert monitor as defined - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_opendistro/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" fi done From 318036772bb6625301ae7e6775c3c93f2c001e07 Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 15:34:21 -0600 Subject: [PATCH 027/122] added 'heatbeat' stuff to my template --- .../templates/malcolm_beats_template.json | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index a65f3f599..d2e5e6f13 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -18,6 +18,7 @@ "ecs_source", "ecs_threat", "ecs_url", + "ecs_user", "ecs_user_agent" ], "template" :{ @@ -29,7 +30,60 @@ "mappings": { "properties": { "timestamp": { "type": "date" }, - "node": { "type": "keyword" } + "node": { "type": "keyword" }, + "cpu_rpm_avg": { + "type": "float" + }, + "cpu_volt_avg": { + "type": "float" + }, + "cpu_temp_avg": { + "type": "float" + }, + "gpu_rpm_avg": { + "type": "float" + }, + "gpu_volt_avg": { + "type": "float" + }, + "gpu_temp_avg": { + "type": "float" + }, + "hdd_temp_avg": { + "type": "float" + }, + "other_volt_avg": { + "type": "float" + }, + "other_rpm_avg": { + "type": "float" + }, + "other_temp_avg": { + "type": "float" + }, + "sensors.adapter": { + "type": "keyword", + "norms": false + }, + "sensors.class": { + "type": "keyword", + "norms": false + }, + "sensors.label": { + "type": "keyword", + "norms": false + }, + "sensors.name": { + "type": "keyword", + "norms": false + }, + "sensors.units": { + "type": "keyword", + "norms": false + }, + "sensors.value": { + "type": "float" + } } } } From a79237c04b81725cc74533c8dff34fabb9a1ac48 Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 2 Jun 2022 15:49:07 -0600 Subject: [PATCH 028/122] remove some beats stuff from sensor --- .../Protologbeat-temperatures-dashboard.json | 0 .../Auditbeat-auditd-overview-custom.json | 142 --------------- .../Filebeat-syslog-custom.json | 167 ------------------ .../kibana/7/index-pattern/protologbeat.json | 16 -- .../heatbeat/protologbeat.template.json | 117 ------------ .../sensor_ctl/heatbeat/protologbeat.yml | 11 -- 6 files changed, 453 deletions(-) rename {sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/dashboard => dashboards/dashboards/beats}/Protologbeat-temperatures-dashboard.json (100%) delete mode 100644 sensor-iso/config/includes.chroot/usr/share/auditbeat/kibana/7/dashboard-custom/Auditbeat-auditd-overview-custom.json delete mode 100644 sensor-iso/config/includes.chroot/usr/share/filebeat/kibana/7/dashboard-custom/Filebeat-syslog-custom.json delete mode 100644 sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/index-pattern/protologbeat.json delete mode 100644 sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.template.json diff --git a/sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/dashboard/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json similarity index 100% rename from sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/dashboard/Protologbeat-temperatures-dashboard.json rename to dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json diff --git a/sensor-iso/config/includes.chroot/usr/share/auditbeat/kibana/7/dashboard-custom/Auditbeat-auditd-overview-custom.json b/sensor-iso/config/includes.chroot/usr/share/auditbeat/kibana/7/dashboard-custom/Auditbeat-auditd-overview-custom.json deleted file mode 100644 index 1bb9304f7..000000000 --- a/sensor-iso/config/includes.chroot/usr/share/auditbeat/kibana/7/dashboard-custom/Auditbeat-auditd-overview-custom.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "version": "7.6.2", - "objects": [ - { - "id": "072befc0-ffba-11e8-a854-ad7782ef6a55", - "type": "dashboard", - "updated_at": "2019-12-23T19:07:39.093Z", - "version": "WzE2MDIsMV0=", - "attributes": { - "description": "Summary of Linux kernel audit events.", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"version\":true,\"highlightAll\":true}" - }, - "optionsJSON": "{\"darkTheme\":true,\"useMargins\":false}", - "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":0,\"w\":28,\"h\":26,\"i\":\"1\"},\"version\":\"7.3.0\",\"panelIndex\":\"1\",\"panelRefName\":\"panel_0\"},{\"gridData\":{\"x\":28,\"y\":0,\"w\":20,\"h\":26,\"i\":\"4\"},\"version\":\"7.3.0\",\"panelIndex\":\"4\",\"panelRefName\":\"panel_1\"},{\"gridData\":{\"x\":0,\"y\":26,\"w\":48,\"h\":38,\"i\":\"5\"},\"version\":\"7.3.0\",\"panelIndex\":\"5\",\"embeddableConfig\":{\"columns\":[\"beat.hostname\",\"auditd.summary.actor.primary\",\"auditd.summary.actor.secondary\",\"auditd.summary.object.type\",\"event.action\",\"auditd.summary.object.primary\",\"auditd.summary.object.secondary\",\"auditd.summary.how\",\"auditd.result\"]},\"panelRefName\":\"panel_2\"}]", - "timeRestore": false, - "title": "[Auditbeat auditd] Overview dashboard", - "version": 1 - }, - "references": [ - { - "name": "panel_0", - "type": "visualization", - "id": "97680df0-c1c0-11e7-8995-936807a28b16" - }, - { - "name": "panel_1", - "type": "visualization", - "id": "08679220-c25a-11e7-8692-232bd1143e8a" - }, - { - "name": "panel_2", - "type": "search", - "id": "0f10c430-c1c3-11e7-8995-936807a28b16" - } - ], - "migrationVersion": { - "dashboard": "7.3.0" - } - }, - { - "id": "97680df0-c1c0-11e7-8995-936807a28b16", - "type": "visualization", - "updated_at": "2019-12-23T19:07:39.093Z", - "version": "WzE1OTksMV0=", - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Event Actions [Auditbeat Auditd Overview]", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\":\"metrics\",\"params\":{\"bar_color_rules\":[{\"id\":\"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}],\"gauge_color_rules\":[{\"id\":\"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}],\"background_color_rules\":[{\"id\":\"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"auditbeat-*\",\"gauge_inner_width\":10,\"series\":[{\"line_width\":1,\"terms_field\":\"event.action\",\"point_size\":1,\"color\":\"#68BC00\",\"label\":\"Actions\",\"metrics\":[{\"type\":\"count\",\"id\":\"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}],\"seperate_axis\":0,\"split_mode\":\"terms\",\"chart_type\":\"line\",\"stacked\":\"none\",\"axis_position\":\"right\",\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"fill\":0.5}],\"axis_formatter\":\"number\",\"interval\":\"auto\",\"filter\":{\"query\":\"event.module:auditd\",\"language\":\"lucene\"},\"legend_position\":\"left\",\"show_legend\":1,\"show_grid\":1,\"gauge_style\":\"half\",\"axis_position\":\"left\",\"gauge_width\":10,\"type\":\"timeseries\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\"},\"aggs\":[],\"title\":\"Event Actions [Auditbeat Auditd Overview]\"}" - }, - "references": [], - "migrationVersion": { - "visualization": "7.4.2" - } - }, - { - "id": "08679220-c25a-11e7-8692-232bd1143e8a", - "type": "visualization", - "updated_at": "2019-12-23T19:07:39.093Z", - "version": "WzE2MDAsMV0=", - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - }, - "title": "Event Categories [Auditbeat Auditd]", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\":\"pie\",\"params\":{\"legendPosition\":\"right\",\"type\":\"pie\",\"isDonut\":true,\"addTooltip\":true,\"addLegend\":true},\"aggs\":[{\"params\":{},\"type\":\"count\",\"enabled\":true,\"id\":\"1\",\"schema\":\"metric\"},{\"params\":{\"orderBy\":\"1\",\"field\":\"event.category\",\"customLabel\":\"Category\",\"order\":\"desc\",\"size\":5},\"type\":\"terms\",\"enabled\":true,\"id\":\"2\",\"schema\":\"segment\"},{\"params\":{\"orderBy\":\"1\",\"field\":\"event.action\",\"customLabel\":\"Action\",\"order\":\"desc\",\"size\":20},\"type\":\"terms\",\"enabled\":true,\"id\":\"3\",\"schema\":\"segment\"}],\"title\":\"Event Categories [Auditbeat Auditd]\"}", - "savedSearchRefName": "search_0" - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "auditbeat-*" - }, - { - "type": "search", - "name": "search_0", - "id": "0f10c430-c1c3-11e7-8995-936807a28b16" - } - ], - "migrationVersion": { - "visualization": "7.4.2" - } - }, - { - "id": "0f10c430-c1c3-11e7-8995-936807a28b16", - "type": "search", - "updated_at": "2019-12-23T19:07:39.093Z", - "version": "WzE2MDEsMV0=", - "attributes": { - "columns": [ - "beat.hostname", - "auditd.summary.actor.primary", - "auditd.summary.actor.secondary", - "event.action", - "auditd.summary.object.type", - "auditd.summary.object.primary", - "auditd.summary.object.secondary", - "auditd.summary.how", - "auditd.result" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"match\":{\"event.module\":{\"query\":\"auditd\",\"type\":\"phrase\"}}},\"meta\":{\"value\":\"auditd\",\"disabled\":false,\"alias\":null,\"params\":{\"query\":\"auditd\",\"type\":\"phrase\"},\"key\":\"event.module\",\"negate\":false,\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"$state\":{\"store\":\"appState\"}}],\"version\":true,\"highlightAll\":true,\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "title": "Audit Event Table [Auditbeat Auditd]", - "version": 1 - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "auditbeat-*" - }, - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "type": "index-pattern", - "id": "auditbeat-*" - } - ], - "migrationVersion": { - "search": "7.4.0" - } - } - ] -} \ No newline at end of file diff --git a/sensor-iso/config/includes.chroot/usr/share/filebeat/kibana/7/dashboard-custom/Filebeat-syslog-custom.json b/sensor-iso/config/includes.chroot/usr/share/filebeat/kibana/7/dashboard-custom/Filebeat-syslog-custom.json deleted file mode 100644 index ba4da7d03..000000000 --- a/sensor-iso/config/includes.chroot/usr/share/filebeat/kibana/7/dashboard-custom/Filebeat-syslog-custom.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "version": "7.6.2", - "objects": [ - { - "id": "1ca59220-ffb0-11e8-a854-ad7782ef6a55", - "type": "dashboard", - "updated_at": "2019-12-23T19:04:34.880Z", - "version": "WzE0MzcsMV0=", - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" - }, - "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":false}", - "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":27,\"w\":48,\"h\":41,\"i\":\"1\"},\"panelIndex\":\"1\",\"title\":\"Syslog Events\",\"version\":\"7.3.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":30,\"y\":0,\"w\":18,\"h\":27,\"i\":\"3\"},\"panelIndex\":\"3\",\"version\":\"7.3.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":17,\"y\":0,\"w\":13,\"h\":27,\"i\":\"4\"},\"panelIndex\":\"4\",\"version\":\"7.3.0\",\"panelRefName\":\"panel_2\"},{\"gridData\":{\"x\":0,\"y\":0,\"w\":17,\"h\":27,\"i\":\"5\"},\"version\":\"7.3.0\",\"panelIndex\":\"5\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"}]", - "timeRestore": false, - "title": "[Filebeat] Syslog dashboard", - "version": 1 - }, - "references": [ - { - "name": "panel_0", - "type": "search", - "id": "c1e3d120-ffb0-11e8-a854-ad7782ef6a55" - }, - { - "name": "panel_1", - "type": "visualization", - "id": "462e04d0-ffb3-11e8-a854-ad7782ef6a55" - }, - { - "name": "panel_2", - "type": "visualization", - "id": "cc3f9cf0-ffb3-11e8-a854-ad7782ef6a55" - }, - { - "name": "panel_3", - "type": "visualization", - "id": "96e77ef0-ffb4-11e8-a854-ad7782ef6a55" - } - ], - "migrationVersion": { - "dashboard": "7.3.0" - } - }, - { - "id": "c1e3d120-ffb0-11e8-a854-ad7782ef6a55", - "type": "search", - "updated_at": "2019-12-23T19:04:34.880Z", - "version": "WzE0MzMsMV0=", - "attributes": { - "columns": [ - "host.name", - "syslog.severity_label", - "syslog.facility_label", - "process.program", - "message" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"_exists_:syslog\",\"language\":\"lucene\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "title": "[Filebeat] Syslog search", - "version": 1 - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "filebeat-*" - } - ], - "migrationVersion": { - "search": "7.4.0" - } - }, - { - "id": "462e04d0-ffb3-11e8-a854-ad7782ef6a55", - "type": "visualization", - "updated_at": "2019-12-23T19:04:34.880Z", - "version": "WzE0MzQsMV0=", - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "[Filebeat] Syslog by Host Timeline", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"[Filebeat] Syslog by Host Timeline\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\",\"mode\":\"quick\"},\"useNormalizedEsInterval\":true,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"host.name\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Host\"}}]}", - "savedSearchRefName": "search_0" - }, - "references": [ - { - "type": "search", - "name": "search_0", - "id": "c1e3d120-ffb0-11e8-a854-ad7782ef6a55" - } - ], - "migrationVersion": { - "visualization": "7.4.2" - } - }, - { - "id": "cc3f9cf0-ffb3-11e8-a854-ad7782ef6a55", - "type": "visualization", - "updated_at": "2019-12-23T19:04:34.880Z", - "version": "WzE0MzUsMV0=", - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "[Filebeat] Syslog Process Cloud", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"[Filebeat] Syslog Process Cloud\",\"type\":\"tagcloud\",\"params\":{\"scale\":\"log\",\"orientation\":\"single\",\"minFontSize\":18,\"maxFontSize\":72,\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"process.program\",\"size\":25,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Process\"}}]}", - "savedSearchRefName": "search_0" - }, - "references": [ - { - "type": "search", - "name": "search_0", - "id": "c1e3d120-ffb0-11e8-a854-ad7782ef6a55" - } - ], - "migrationVersion": { - "visualization": "7.4.2" - } - }, - { - "id": "96e77ef0-ffb4-11e8-a854-ad7782ef6a55", - "type": "visualization", - "updated_at": "2019-12-23T19:04:34.880Z", - "version": "WzE0MzYsMV0=", - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "[Filebeat] Syslog Facility by Host Pie Chart", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"[Filebeat] Syslog Facility by Host Pie Chart\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":false,\"labels\":{\"show\":false,\"values\":true,\"last_level\":false,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"syslog.facility_label\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Syslog Facility\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"host.name\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Host\"}}]}", - "savedSearchRefName": "search_0" - }, - "references": [ - { - "type": "search", - "name": "search_0", - "id": "c1e3d120-ffb0-11e8-a854-ad7782ef6a55" - } - ], - "migrationVersion": { - "visualization": "7.4.2" - } - } - ] -} \ No newline at end of file diff --git a/sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/index-pattern/protologbeat.json b/sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/index-pattern/protologbeat.json deleted file mode 100644 index d686f2c3d..000000000 --- a/sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/index-pattern/protologbeat.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "fieldFormatMap": "{\"@timestamp\":{\"id\":\"date\"}}", - "fields": "[{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"counter\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cpu_rpm_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cpu_volt_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cpu_temp_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"gpu_rpm_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"gpu_volt_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"gpu_temp_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hdd_temp_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"other_rpm_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"other_volt_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"other_temp_avg\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.adapter\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.class\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.label\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.units\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sensors.value\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"beat.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"beat.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.timezone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"beat.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"@timestamp\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tags\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"fields\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.provider\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.instance_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.instance_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.machine_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.availability_zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.project_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"meta.cloud.region\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.image\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.ip\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.uid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.namespace\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.node.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.annotations\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.image\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_id\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_index\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_score\",\"scripted\":false,\"searchable\":false,\"type\":\"number\"}]", - "timeFieldName": "@timestamp", - "title": "protologbeat-*" - }, - "id": "protologbeat-*", - "type": "index-pattern", - "version": 1 - } - ], - "version": "6.5.3" -} \ No newline at end of file diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.template.json b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.template.json deleted file mode 100644 index dacd12f90..000000000 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.template.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "index_patterns": ["protologbeat-*"], - "mappings": { - "_meta": { - "version": "7.6.2" - }, - "dynamic_templates": [{ - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - }], - "properties": { - "@timestamp": { - "type": "date" - }, - "cpu_rpm_avg": { - "type": "float" - }, - "cpu_volt_avg": { - "type": "float" - }, - "cpu_temp_avg": { - "type": "float" - }, - "gpu_rpm_avg": { - "type": "float" - }, - "gpu_volt_avg": { - "type": "float" - }, - "gpu_temp_avg": { - "type": "float" - }, - "hdd_temp_avg": { - "type": "float" - }, - "other_volt_avg": { - "type": "float" - }, - "other_rpm_avg": { - "type": "float" - }, - "other_temp_avg": { - "type": "float" - }, - "sensors": { - "properties": { - "adapter": { - "ignore_above": 1024, - "type": "keyword", - "norms": false - }, - "class": { - "ignore_above": 1024, - "type": "keyword", - "norms": false - }, - "label": { - "ignore_above": 1024, - "type": "keyword", - "norms": false - }, - "name": { - "ignore_above": 1024, - "type": "keyword", - "norms": false - }, - "units": { - "ignore_above": 1024, - "type": "keyword", - "norms": false - }, - "value": { - "type": "float" - } - } - }, - "beat": { - "properties": { - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "tags": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "order": 0, - "settings": { - "index.mapping.total_fields.limit": 5000, - "index.refresh_interval": "5s" - } -} \ No newline at end of file diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 65258fa08..c821498b1 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -14,17 +14,6 @@ processors: - add_tags: tags: [_malcolm_beats] -#============================== Template ======================================= - -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 -setup.template.json.enabled: true -setup.template.json.path: "${path.config}/protologbeat.template.json" -setup.template.json.name: "protologbeat" - #================================ Outputs ====================================== #-------------------------- Logstash Output ------------------------------------ From 34dfc87fe40ae2cb343bcec86ca7f661db7342eb Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 2 Jun 2022 17:06:34 -0600 Subject: [PATCH 029/122] don't reference unused files --- Dockerfiles/dashboards-helper.Dockerfile | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index e5d418e63..49af02e85 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -52,14 +52,6 @@ ENV SUPERCRONIC_CRONTAB "/etc/crontab" ENV ECS_RELEASES_URL "https://api.github.com/repos/elastic/ecs/releases/latest" ADD dashboards/dashboards /opt/dashboards -# At the moment Beats won't import dashboards into OpenSearch dashboards -# (see opensearch-project/OpenSearch-Dashboards#656 and -# opensearch-project/OpenSearch-Dashboards#831), although the templates/index -# patterns work ok. As such, we're going to manually add the dashboards we care about to -# /opt/dashboards/beats and load them when the container starts up. -ADD sensor-iso/config/includes.chroot/usr/share/filebeat/kibana/7/dashboard-custom/*.json /opt/dashboards/beats -ADD sensor-iso/config/includes.chroot/usr/share/auditbeat/kibana/7/dashboard-custom/*.json /opt/dashboards/beats -ADD sensor-iso/config/includes.chroot/usr/share/protologbeat/kibana/7/dashboard/*.json /opt/dashboards/beats ADD dashboards/anomaly_detectors /opt/anomaly_detectors ADD dashboards/alerting /opt/alerting ADD dashboards/maps /opt/maps From a59393f877b3542ae7a2da2ae2b6556f49d34a87 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 09:08:06 -0600 Subject: [PATCH 030/122] fix alerting/notifications creation via API for opensearch v2.0 --- Dockerfiles/dashboards-helper.Dockerfile | 1 + .../malcolm_api_loopback_destination.json | 14 ---------- .../malcolm_api_loopback_monitor.json | 2 +- .../malcolm_api_loopback_webhook.json | 16 +++++++++++ .../scripts/create-arkime-sessions-index.sh | 27 ++++--------------- 5 files changed, 23 insertions(+), 37 deletions(-) delete mode 100644 dashboards/alerting/destinations/malcolm_api_loopback_destination.json create mode 100644 dashboards/notifications/channels/malcolm_api_loopback_webhook.json diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index 49af02e85..15b258a23 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -54,6 +54,7 @@ ENV ECS_RELEASES_URL "https://api.github.com/repos/elastic/ecs/releases/latest" ADD dashboards/dashboards /opt/dashboards ADD dashboards/anomaly_detectors /opt/anomaly_detectors ADD dashboards/alerting /opt/alerting +ADD dashboards/notifications /opt/notifications ADD dashboards/maps /opt/maps ADD dashboards/scripts /data/ ADD dashboards/supervisord.conf /etc/supervisord.conf diff --git a/dashboards/alerting/destinations/malcolm_api_loopback_destination.json b/dashboards/alerting/destinations/malcolm_api_loopback_destination.json deleted file mode 100644 index 0b0cb2fe2..000000000 --- a/dashboards/alerting/destinations/malcolm_api_loopback_destination.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "custom_webhook", - "name": "Malcolm API Loopback Webhook", - "custom_webhook": { - "path": "alert", - "header_params": { - "Content-Type": "application/json" - }, - "scheme": "HTTP", - "method": "POST", - "port": 5000, - "host": "api" - } -} diff --git a/dashboards/alerting/monitors/malcolm_api_loopback_monitor.json b/dashboards/alerting/monitors/malcolm_api_loopback_monitor.json index 2b45087f6..0472c806b 100644 --- a/dashboards/alerting/monitors/malcolm_api_loopback_monitor.json +++ b/dashboards/alerting/monitors/malcolm_api_loopback_monitor.json @@ -56,7 +56,7 @@ "actions": [ { "name": "Malcolm API Loopback Action", - "destination_id": "ALERTING_EXAMPLE_DESTINATION_ID", + "destination_id": "malcolm-api-loopback-webook", "message_template": { "source": "{\n \"alert\": {\n \"monitor\": {\n \"name\": \"{{ctx.monitor.name}}\"\n },\n \"trigger\": {\n \"name\": \"{{ctx.trigger.name}}\",\n \"severity\": {{ctx.trigger.severity}}\n },\n \"period\": {\n \"start\": \"{{ctx.periodStart}}\",\n \"end\": \"{{ctx.periodEnd}}\"\n },\n \"results\": {{#toJson}}ctx.results{{/toJson}},\n \"body\": \"{{#toJson}}ctx.payload{{/toJson}}\",\n \"alert\": \"{{ctx.alert.id}}\",\n \"error\": \"{{ctx.error}}\"\n }\n}", "lang": "mustache" diff --git a/dashboards/notifications/channels/malcolm_api_loopback_webhook.json b/dashboards/notifications/channels/malcolm_api_loopback_webhook.json new file mode 100644 index 000000000..7046f94d9 --- /dev/null +++ b/dashboards/notifications/channels/malcolm_api_loopback_webhook.json @@ -0,0 +1,16 @@ +{ + "config_id": "malcolm-api-loopback-webook", + "name": "malcolm-api-loopback-webook", + "config": { + "name": "Malcolm API Loopback Webhook", + "description": "Malcolm API webhook to index OpenSearch alerts as session documents", + "config_type": "webhook", + "webhook": { + "url": "http://api:5000/alert", + "method": "POST", + "header_params": { + "Content-Type": "application/json" + } + } + } +} diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index a547991a3..9876d9d93 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -25,8 +25,6 @@ INDEX_PATTERN=${ARKIME_INDEX_PATTERN:-"arkime_sessions3-*"} INDEX_PATTERN_ID=${ARKIME_INDEX_PATTERN_ID:-"arkime_sessions3-*"} INDEX_TIME_FIELD=${ARKIME_INDEX_TIME_FIELD:-"firstPacket"} DUMMY_DETECTOR_NAME=${DUMMY_DETECTOR_NAME:-"malcolm_init_dummy"} -ALERTING_EXAMPLE_DESTINATION_NAME=${ALERTING_EXAMPLE_DESTINATION_NAME:-"Malcolm API Loopback Webhook"} - INDEX_POLICY_FILE="/data/init/index-management-policy.json" @@ -213,31 +211,16 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then echo "Creating OpenSearch alerting objects..." - # Create alerting objects here + # Create notification/alerting objects here - # destinations - for i in /opt/alerting/destinations/*.json; do - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/destinations" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" + # notification channels + for i in /opt/notifications/channels/*.json; do + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_notifications/configs" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done - # get example destination ID - ALERTING_EXAMPLE_DESTINATION_ID=$(curl -L --silent --show-error -XGET -H 'osd-xsrf:true' -H 'Content-type:application/json' \ - "$OS_URL/_plugins/_alerting/destinations" | \ - jq -r ".destinations[] | select(.name == \"$ALERTING_EXAMPLE_DESTINATION_NAME\").id" | \ - head -n 1) # monitors for i in /opt/alerting/monitors/*.json; do - if [[ -n "$ALERTING_EXAMPLE_DESTINATION_ID" ]] && \ - grep -q ALERTING_EXAMPLE_DESTINATION_ID "$i"; then - # replace example destination ID in monitor definition - TMP_MONITOR_FILENAME="$(mktemp)" - sed "s/ALERTING_EXAMPLE_DESTINATION_ID/$ALERTING_EXAMPLE_DESTINATION_ID/g" "$i" > "$TMP_MONITOR_FILENAME" - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$TMP_MONITOR_FILENAME" - rm -f "$TMP_MONITOR_FILENAME" - else - # insert monitor as defined - curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" - fi + curl -L --silent --output /dev/null --show-error -XPOST "$OS_URL/_plugins/_alerting/monitors" -H 'osd-xsrf:true' -H 'Content-type:application/json' -d "@$i" done echo "OpenSearch alerting objects creation complete!" From d5a03edfd5bf94e61cef37324ae01cb9d9e33bed Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 09:29:07 -0600 Subject: [PATCH 031/122] bump zeek to v4.2.2 (https://github.com/zeek/zeek/releases/tag/v4.2.2) --- Dockerfiles/zeek.Dockerfile | 2 +- sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfiles/zeek.Dockerfile b/Dockerfiles/zeek.Dockerfile index 7e272f662..259b51378 100644 --- a/Dockerfiles/zeek.Dockerfile +++ b/Dockerfiles/zeek.Dockerfile @@ -25,7 +25,7 @@ ENV PUSER_PRIV_DROP true # for download and install ARG ZEEK_LTS= -ARG ZEEK_VERSION=4.2.1-0 +ARG ZEEK_VERSION=4.2.2-0 ARG SPICY_VERSION=1.4.1 ENV ZEEK_LTS $ZEEK_LTS diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index a22f16cac..a150c6e1c 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -9,7 +9,7 @@ export CCACHE_COMPRESS=1 NETSNIFF_VER="0.6.8" NETSNIFF_URL="https://github.com/netsniff-ng/netsniff-ng/archive/v$NETSNIFF_VER.tar.gz" -ZEEK_VERSION=4.2.1-0 +ZEEK_VERSION=4.2.2-0 ZEEK_LTS= SPICY_VERSION=1.4.1 ZEEK_DIR="/opt/zeek" From f8cb309d8af12269a4cdd60ea9a0a913a22a5e0c Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 11:42:33 -0600 Subject: [PATCH 032/122] remove status from curl commands in malcolmmonitor --- malcolm-iso/config/includes.chroot/etc/bash.bash_functions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/malcolm-iso/config/includes.chroot/etc/bash.bash_functions b/malcolm-iso/config/includes.chroot/etc/bash.bash_functions index 01bed6c6d..0a84bb064 100644 --- a/malcolm-iso/config/includes.chroot/etc/bash.bash_functions +++ b/malcolm-iso/config/includes.chroot/etc/bash.bash_functions @@ -509,9 +509,9 @@ function malcolmmonitor () { select-pane -t 5 \; \ send-keys 'while true; do clear; free -m | head -n 2; sleep 60; done' C-m \; \ select-pane -t 6 \; \ - send-keys "while true; do clear; pushd ~/Malcolm >/dev/null 2>&1; docker-compose exec -u $(id -u) api curl 'http://localhost:5000/agg/event.dataset?from=1970' | python3 -m json.tool | grep -P '\b(doc_count|key)\b' | tr -d '\", ' | cut -d: -f2 | paste - - -d'\t\t' | head -n $(( (MAX_HEIGHT / 2) - 1 )) ; popd >/dev/null 2>&1; sleep 60; done" C-m \; \ + send-keys "while true; do clear; pushd ~/Malcolm >/dev/null 2>&1; docker-compose exec -u $(id -u) api curl -sSL 'http://localhost:5000/agg/event.dataset?from=1970' | python3 -m json.tool | grep -P '\b(doc_count|key)\b' | tr -d '\", ' | cut -d: -f2 | paste - - -d'\t\t' | head -n $(( (MAX_HEIGHT / 2) - 1 )) ; popd >/dev/null 2>&1; sleep 60; done" C-m \; \ select-pane -t 7 \; \ - send-keys "while true; do clear; pushd ~/Malcolm >/dev/null 2>&1; docker-compose exec -u $(id -u) api curl 'http://localhost:5000/agg?from=1970' | python3 -m json.tool | grep -P '\b(doc_count|key)\b' | tr -d '\", ' | cut -d: -f2 | paste - - -d'\t\t' ; popd >/dev/null 2>&1; sleep 60; done" C-m \; \ + send-keys "while true; do clear; pushd ~/Malcolm >/dev/null 2>&1; docker-compose exec -u $(id -u) api curl -sSL 'http://localhost:5000/agg?from=1970' | python3 -m json.tool | grep -P '\b(doc_count|key)\b' | tr -d '\", ' | cut -d: -f2 | paste - - -d'\t\t' ; popd >/dev/null 2>&1; sleep 60; done" C-m \; \ split-window -v \; \ select-pane -t 8 \; \ send-keys "while true; do clear; find ~/Malcolm/zeek-logs/extract_files -type f | sed 's@.*/\(.*\)/.*@\1@' | sort | uniq -c | sort -nr; sleep 60; done" C-m \; \ From 78a290650e42ec0e689bce37188f67095b97c7b0 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 14:02:05 -0600 Subject: [PATCH 033/122] continued work on progress for updates for opensearch v2.0 with hedgehog --- logstash/pipelines/beats/01_input_beats.conf | 4 + logstash/pipelines/beats/11_beats_logs.conf | 102 +++++++++++++++++- logstash/pipelines/beats/98_finalize.conf | 80 ++++++++++---- .../enrichment/18_tags_finalize.conf | 1 + .../sensor_ctl/auditbeat/auditbeat.yml | 2 +- .../filebeat-syslog/filebeat-syslog.yml | 2 +- .../sensor_ctl/heatbeat/protologbeat.yml | 2 +- .../sensor_ctl/metricbeat/metricbeat.yml | 2 +- 8 files changed, 165 insertions(+), 30 deletions(-) diff --git a/logstash/pipelines/beats/01_input_beats.conf b/logstash/pipelines/beats/01_input_beats.conf index adf233ff4..d3a26348d 100644 --- a/logstash/pipelines/beats/01_input_beats.conf +++ b/logstash/pipelines/beats/01_input_beats.conf @@ -12,4 +12,8 @@ filter { } else { drop { id => "drop_not_malcolm_beats" } } + + # rename message to event.original + mutate { id => "mutate_rename_beats_message" + rename => { "[message]" => "[event][original]" } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 1f5352d06..f849a18d3 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -1,12 +1,14 @@ filter { - if ([event][module] == "nginx") { + if ([agent][type] == "filebeat") and ([event][module] == "nginx") { + + # event.hash will be done based on event.original in 98_finalize.conf if ([event][dataset] == "nginx.access") { grok { id => "grok_beat_nginx_access" patterns_dir => "/usr/share/logstash/malcolm-patterns" - match => { "message" => "%{NGINX_ACCESS}" } + match => { "[event][original]" => "%{NGINX_ACCESS}" } # remove_tag => ["_grokparsefailure"] } } @@ -14,7 +16,7 @@ filter { grok { id => "grok_beat_nginx_error" patterns_dir => "/usr/share/logstash/malcolm-patterns" - match => { "message" => "%{NGINX_ERROR}" } + match => { "[event][original]" => "%{NGINX_ERROR}" } # remove_tag => ["_grokparsefailure"] } } @@ -28,6 +30,98 @@ filter { } } - } # nginx + mutate { id => "mutate_replace_agent_type_beats_filebeat_nginx" + replace => { "[agent][type]" => "nginx" } } + + } else if ([agent][type] == "auditbeat") { + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_beats_auditbeat" + source => [ "[host][name]", + "[event][module]", + "[event][kind]", + "[event][category]", + "[event][action]", + "[auditd][session]", + "[auditd][sequence]", + "[process][pid]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + } else if ([agent][type] == "filebeat") and ([input][type] == "syslog") { + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_beats_filebeat_syslog" + source => [ "[host][name]", + "[event][module]", + "[syslog][facility]", + "[syslog][priority]", + "[event][original]", + "[process][pid]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + mutate { id => "mutate_replace_agent_type_beats_filebeat_syslog" + replace => { "[agent][type]" => "syslog" } } + + } else if ([agent][type] == "metricbeat") { + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_beats_metricbeat" + source => [ "[host][name]", + "[event][module]", + "[event][dataset]", + "[metricset][name]", + "[metricset][period]", + "[process][pid]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + } else if ("_malcolm_heatbeat" in [tags]) { + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_beats_heatbeat" + source => [ "[host][name]", + "[sensors][adapter]", + "[sensors][class]", + "[sensors][label]", + "[sensors][name]", + "[sensors][units]", + "[sensors][value]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + mutate { id => "mutate_replace_agent_type_beats_heatbeat" + replace => { "[agent][type]" => "heatbeat" } } + + } # event.module (nginx/auditd/etc.) } \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 492d6309d..ac4dc2c87 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -1,21 +1,44 @@ filter { - # store message as event.original - mutate { id => "mutate_rename_beats_message" - rename => { "[message]" => "[event][original]" } } - if (![event][hash]) { + # create a repeatable fingerprint for document ID into event.hash - fingerprint { - id => "fingerprint_malcolm_beats_message" - source => [ "[event][original]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true - } - } + + if ([event][original]) { + fingerprint { + id => "fingerprint_malcolm_beats_event_original" + source => [ "[host][name]", + "[event][original]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + + } else { + # at this point we should have already assigned a hash (or had event.original + # to hash). This generally should not happen so if it is reexamine where we're not + # doing the work we should be. + fingerprint { + id => "fingerprint_malcolm_beats_unknown" + source => [ "[host][name]", + "[event][module]", + "[event][dataset]", + "[agent][type]", + "[input][type]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + add_tag => [ "_beats_unknown_fingerprint" ] + } + + } #if [event][original] /else + } # ![event][hash] # arkime doesn't like / in the record ID mutate { id => "mutate_beats_gsub_event_hash_urlsafe" @@ -24,10 +47,7 @@ filter { "[event][hash]", "=+", "" ] } # this identifies which node the log came from - if ([beat][name]) { - mutate { id => "mutate_beats_add_field_beat_name_node" - add_field => { "[node]" => "%{[beat][name]}" } } - } else if ([host][name]) { + if ([host][name]) { mutate { id => "mutate_beats_add_field_host_name_node" add_field => { "[node]" => "%{[host][name]}" } } } else { @@ -46,9 +66,7 @@ filter { "[beat]", "[agent][ephemeral_id]", "[agent][id]", - "[agent][type]", "[agent][version]", - "[input][type]", "[log][offset]", "[prospector]" ] @@ -57,6 +75,12 @@ filter { # remove tags we'd rather not see mutate { id => "mutate_beats_tags_remove" remove_tag => [ "beats_input_codec_plain_applied", + "beats_input_raw_event", + "_malcolm_auditbeat", + "_malcolm_filebeat_syslog", + "_malcolm_heatbeat", + "_malcolm_metricbeat", + "_malcolm_protologbeat", "_dateparsefailure", "_grokparsefailure", "_jsonparsefailure", @@ -88,7 +112,19 @@ filter { } # this field is used to determine opensearch index prefix - mutate { id => "mutate_add_malcolm_beats_index_prefix" - add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_%{[event][module]}" } } + if ([agent][type]) { + mutate { id => "mutate_add_malcolm_beats_index_prefix_agent_type" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_%{[agent][type]}" } } + } else if ([event][module]) { + mutate { id => "mutate_add_malcolm_beats_index_prefix_event_module" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_%{[event][module]}" } } + } else if ([input][type]) { + mutate { id => "mutate_add_malcolm_beats_index_prefix_input_type" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_%{[input][type]}" } } + } else { + mutate { id => "mutate_add_malcolm_beats_index_prefix_beats" + add_field => { "[@metadata][malcolm_opensearch_index_prefix]" => "malcolm_beats_" } } + } + } \ No newline at end of file diff --git a/logstash/pipelines/enrichment/18_tags_finalize.conf b/logstash/pipelines/enrichment/18_tags_finalize.conf index 57878f555..5151655b7 100644 --- a/logstash/pipelines/enrichment/18_tags_finalize.conf +++ b/logstash/pipelines/enrichment/18_tags_finalize.conf @@ -4,6 +4,7 @@ filter { mutate { id => "mutate_enrichment_tags_remove" remove_tag => [ "beats_input_codec_plain_applied", + "beats_input_raw_event", "_dateparsefailure", "_grokparsefailure", "_jsonparsefailure", diff --git a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml b/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml index b4e21ab44..8b8a1cca7 100644 --- a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml +++ b/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml @@ -292,7 +292,7 @@ fields_under_root: true processors: - add_tags: - tags: [_malcolm_beats] + tags: [_malcolm_beats, _malcolm_auditbeat] #================================ Outputs ====================================== diff --git a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml b/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml index dd3cefaef..f319f42dc 100644 --- a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml +++ b/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml @@ -8,7 +8,7 @@ fields_under_root: true processors: - add_tags: - tags: [_malcolm_beats] + tags: [_malcolm_beats, _malcolm_filebeat_syslog] #================================ Outputs ====================================== diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index c821498b1..9a29ea8c8 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -12,7 +12,7 @@ fields_under_root: true processors: - add_tags: - tags: [_malcolm_beats] + tags: [_malcolm_beats, _malcolm_protologbeat] #================================ Outputs ====================================== diff --git a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml b/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml index 45747009c..79e7230ed 100644 --- a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml +++ b/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml @@ -44,7 +44,7 @@ fields_under_root: true processors: - add_tags: - tags: [_malcolm_beats] + tags: [_malcolm_beats, _malcolm_metricbeat] #================================ Outputs ====================================== From e3f12fc4e6363b79d60e5a1a499047b2a6a13a05 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 14:09:47 -0600 Subject: [PATCH 034/122] update malcolm beats index pattern periodically --- Dockerfiles/dashboards-helper.Dockerfile | 2 +- dashboards/scripts/refresh-auxiliary-index-patterns.sh | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100755 dashboards/scripts/refresh-auxiliary-index-patterns.sh diff --git a/Dockerfiles/dashboards-helper.Dockerfile b/Dockerfiles/dashboards-helper.Dockerfile index 15b258a23..b1f2f9d44 100644 --- a/Dockerfiles/dashboards-helper.Dockerfile +++ b/Dockerfiles/dashboards-helper.Dockerfile @@ -90,7 +90,7 @@ RUN apk update --no-cache && \ chown -R ${PUSER}:${PGROUP} /opt/dashboards /opt/templates /opt/ecs-templates /opt/maps /data/init /opt/anomaly_detectors && \ chmod 755 /data/*.sh /data/*.py /data/init && \ chmod 400 /opt/maps/* && \ - (echo -e "*/2 * * * * /data/create-arkime-sessions-index.sh\n0 10 * * * /data/index-refresh.py --template malcolm_template --unassigned\n30 */6 * * * /data/refresh-auxiliary-index-patterns.sh\n*/20 * * * * /data/opensearch_index_size_prune.py" > ${SUPERCRONIC_CRONTAB}) + (echo -e "*/2 * * * * /data/create-arkime-sessions-index.sh\n0 10 * * * /data/index-refresh.py --template malcolm_template --unassigned\n30 */2 * * * /data/index-refresh.py --index 'malcolm_beats_*' --template malcolm_beats_template --unassigned\n*/20 * * * * /data/opensearch_index_size_prune.py" > ${SUPERCRONIC_CRONTAB}) EXPOSE $OFFLINE_REGION_MAPS_PORT diff --git a/dashboards/scripts/refresh-auxiliary-index-patterns.sh b/dashboards/scripts/refresh-auxiliary-index-patterns.sh deleted file mode 100755 index e00e058b1..000000000 --- a/dashboards/scripts/refresh-auxiliary-index-patterns.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -for IDX in auditbeat filebeat metricbeat packetbeat; do - echo "Attempting to refresh \"${IDX}-*\"..." - /data/index-refresh.py -i "${IDX}-*" 2>/dev/null -done From 4d7e0861b797ce412cd29f004eff6ef4f9dab01a Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 15:02:50 -0600 Subject: [PATCH 035/122] compose templates for hedgehog beats --- .../scripts/create-arkime-sessions-index.sh | 12 +- .../composable/component/auditd.json | 935 ++++++++++ .../composable/component/heatbeat.json | 61 + .../composable/component/syslog.json | 26 + .../composable/component/system.json | 1555 +++++++++++++++++ .../templates/malcolm_beats_template.json | 61 +- 6 files changed, 2594 insertions(+), 56 deletions(-) create mode 100644 dashboards/templates/composable/component/auditd.json create mode 100644 dashboards/templates/composable/component/heatbeat.json create mode 100644 dashboards/templates/composable/component/syslog.json create mode 100644 dashboards/templates/composable/component/system.json diff --git a/dashboards/scripts/create-arkime-sessions-index.sh b/dashboards/scripts/create-arkime-sessions-index.sh index 9876d9d93..fa5a31bc8 100755 --- a/dashboards/scripts/create-arkime-sessions-index.sh +++ b/dashboards/scripts/create-arkime-sessions-index.sh @@ -87,11 +87,21 @@ if [[ "$CREATE_OS_ARKIME_SESSION_INDEX" = "true" ]] ; then for i in /opt/ecs-templates/composable/component/*.json; do TEMP_BASENAME="$(basename "$i")" TEMP_FILENAME="${TEMP_BASENAME%.*}" - echo "Importing ECS composable templates $TEMP_FILENAME ..." + echo "Importing ECS composable template $TEMP_FILENAME ..." curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" "$OS_URL/_component_template/ecs_$TEMP_FILENAME" -d "@$i" 2>&1 || true done fi + if [[ -d "$MALCOLM_TEMPLATES_DIR"/composable/component ]]; then + echo "Importing custom ECS composable templates..." + for i in "$MALCOLM_TEMPLATES_DIR"/composable/component/*.json; do + TEMP_BASENAME="$(basename "$i")" + TEMP_FILENAME="${TEMP_BASENAME%.*}" + echo "Importing custom ECS composable template $TEMP_FILENAME ..." + curl -w "\n" -sSL --fail -XPOST -H "Content-Type: application/json" "$OS_URL/_component_template/custom_$TEMP_FILENAME" -d "@$i" 2>&1 || true + done + fi + echo "Importing malcolm_template..." if [[ -f "$MALCOLM_TEMPLATE_FILE_ORIG" ]] && [[ ! -f "$MALCOLM_TEMPLATE_FILE" ]]; then diff --git a/dashboards/templates/composable/component/auditd.json b/dashboards/templates/composable/component/auditd.json new file mode 100644 index 000000000..50d58eb15 --- /dev/null +++ b/dashboards/templates/composable/component/auditd.json @@ -0,0 +1,935 @@ +{ + "template": { + "mappings": { + "properties": { + "auditd": { + "properties": { + "data": { + "properties": { + "a0": { + "ignore_above": 1024, + "type": "keyword" + }, + "a1": { + "ignore_above": 1024, + "type": "keyword" + }, + "a2": { + "ignore_above": 1024, + "type": "keyword" + }, + "a3": { + "ignore_above": 1024, + "type": "keyword" + }, + "a[0-3]": { + "ignore_above": 1024, + "type": "keyword" + }, + "acct": { + "ignore_above": 1024, + "type": "keyword" + }, + "acl": { + "ignore_above": 1024, + "type": "keyword" + }, + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "added": { + "ignore_above": 1024, + "type": "keyword" + }, + "addr": { + "ignore_above": 1024, + "type": "keyword" + }, + "apparmor": { + "ignore_above": 1024, + "type": "keyword" + }, + "arch": { + "ignore_above": 1024, + "type": "keyword" + }, + "argc": { + "ignore_above": 1024, + "type": "keyword" + }, + "audit_backlog_limit": { + "ignore_above": 1024, + "type": "keyword" + }, + "audit_backlog_wait_time": { + "ignore_above": 1024, + "type": "keyword" + }, + "audit_enabled": { + "ignore_above": 1024, + "type": "keyword" + }, + "audit_failure": { + "ignore_above": 1024, + "type": "keyword" + }, + "banners": { + "ignore_above": 1024, + "type": "keyword" + }, + "bool": { + "ignore_above": 1024, + "type": "keyword" + }, + "bus": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_fe": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_fi": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_fp": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_fver": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_pe": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_pi": { + "ignore_above": 1024, + "type": "keyword" + }, + "cap_pp": { + "ignore_above": 1024, + "type": "keyword" + }, + "capability": { + "ignore_above": 1024, + "type": "keyword" + }, + "cgroup": { + "ignore_above": 1024, + "type": "keyword" + }, + "changed": { + "ignore_above": 1024, + "type": "keyword" + }, + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "cmd": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "compat": { + "ignore_above": 1024, + "type": "keyword" + }, + "daddr": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "default-context": { + "ignore_above": 1024, + "type": "keyword" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "dir": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "dmac": { + "ignore_above": 1024, + "type": "keyword" + }, + "dport": { + "ignore_above": 1024, + "type": "keyword" + }, + "enforcing": { + "ignore_above": 1024, + "type": "keyword" + }, + "entries": { + "ignore_above": 1024, + "type": "keyword" + }, + "exit": { + "ignore_above": 1024, + "type": "keyword" + }, + "fam": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "fd": { + "ignore_above": 1024, + "type": "keyword" + }, + "fe": { + "ignore_above": 1024, + "type": "keyword" + }, + "feature": { + "ignore_above": 1024, + "type": "keyword" + }, + "fi": { + "ignore_above": 1024, + "type": "keyword" + }, + "file": { + "ignore_above": 1024, + "type": "keyword" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "format": { + "ignore_above": 1024, + "type": "keyword" + }, + "fp": { + "ignore_above": 1024, + "type": "keyword" + }, + "fver": { + "ignore_above": 1024, + "type": "keyword" + }, + "grantors": { + "ignore_above": 1024, + "type": "keyword" + }, + "grp": { + "ignore_above": 1024, + "type": "keyword" + }, + "hook": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "icmp_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "igid": { + "ignore_above": 1024, + "type": "keyword" + }, + "img-ctx": { + "ignore_above": 1024, + "type": "keyword" + }, + "inif": { + "ignore_above": 1024, + "type": "keyword" + }, + "ino": { + "ignore_above": 1024, + "type": "keyword" + }, + "inode_gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "inode_uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "invalid_context": { + "ignore_above": 1024, + "type": "keyword" + }, + "ioctlcmd": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "ignore_above": 1024, + "type": "keyword" + }, + "ipid": { + "ignore_above": 1024, + "type": "keyword" + }, + "ipx-net": { + "ignore_above": 1024, + "type": "keyword" + }, + "items": { + "ignore_above": 1024, + "type": "keyword" + }, + "iuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "ksize": { + "ignore_above": 1024, + "type": "keyword" + }, + "laddr": { + "ignore_above": 1024, + "type": "keyword" + }, + "len": { + "ignore_above": 1024, + "type": "keyword" + }, + "list": { + "ignore_above": 1024, + "type": "keyword" + }, + "lport": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "macproto": { + "ignore_above": 1024, + "type": "keyword" + }, + "maj": { + "ignore_above": 1024, + "type": "keyword" + }, + "major": { + "ignore_above": 1024, + "type": "keyword" + }, + "minor": { + "ignore_above": 1024, + "type": "keyword" + }, + "model": { + "ignore_above": 1024, + "type": "keyword" + }, + "msg": { + "ignore_above": 1024, + "type": "keyword" + }, + "nargs": { + "ignore_above": 1024, + "type": "keyword" + }, + "net": { + "ignore_above": 1024, + "type": "keyword" + }, + "new": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-chardev": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-disk": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-enabled": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-fs": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-level": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-log_passwd": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-mem": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-net": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-range": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-rng": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-role": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-seuser": { + "ignore_above": 1024, + "type": "keyword" + }, + "new-vcpu": { + "ignore_above": 1024, + "type": "keyword" + }, + "new_gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "new_lock": { + "ignore_above": 1024, + "type": "keyword" + }, + "new_pe": { + "ignore_above": 1024, + "type": "keyword" + }, + "new_pi": { + "ignore_above": 1024, + "type": "keyword" + }, + "new_pp": { + "ignore_above": 1024, + "type": "keyword" + }, + "nlnk-fam": { + "ignore_above": 1024, + "type": "keyword" + }, + "nlnk-grp": { + "ignore_above": 1024, + "type": "keyword" + }, + "nlnk-pid": { + "ignore_above": 1024, + "type": "keyword" + }, + "oauid": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "ocomm": { + "ignore_above": 1024, + "type": "keyword" + }, + "oflag": { + "ignore_above": 1024, + "type": "keyword" + }, + "old": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-auid": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-chardev": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-disk": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-enabled": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-fs": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-level": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-log_passwd": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-mem": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-net": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-range": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-rng": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-role": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-ses": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-seuser": { + "ignore_above": 1024, + "type": "keyword" + }, + "old-vcpu": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_enforcing": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_lock": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_pe": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_pi": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_pp": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_prom": { + "ignore_above": 1024, + "type": "keyword" + }, + "old_val": { + "ignore_above": 1024, + "type": "keyword" + }, + "op": { + "ignore_above": 1024, + "type": "keyword" + }, + "opid": { + "ignore_above": 1024, + "type": "keyword" + }, + "oses": { + "ignore_above": 1024, + "type": "keyword" + }, + "outif": { + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "ignore_above": 1024, + "type": "keyword" + }, + "per": { + "ignore_above": 1024, + "type": "keyword" + }, + "perm": { + "ignore_above": 1024, + "type": "keyword" + }, + "perm_mask": { + "ignore_above": 1024, + "type": "keyword" + }, + "permissive": { + "ignore_above": 1024, + "type": "keyword" + }, + "pfs": { + "ignore_above": 1024, + "type": "keyword" + }, + "printer": { + "ignore_above": 1024, + "type": "keyword" + }, + "prom": { + "ignore_above": 1024, + "type": "keyword" + }, + "proto": { + "ignore_above": 1024, + "type": "keyword" + }, + "qbytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "range": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "removed": { + "ignore_above": 1024, + "type": "keyword" + }, + "res": { + "ignore_above": 1024, + "type": "keyword" + }, + "resrc": { + "ignore_above": 1024, + "type": "keyword" + }, + "rport": { + "ignore_above": 1024, + "type": "keyword" + }, + "sauid": { + "ignore_above": 1024, + "type": "keyword" + }, + "scontext": { + "ignore_above": 1024, + "type": "keyword" + }, + "selected-context": { + "ignore_above": 1024, + "type": "keyword" + }, + "seperm": { + "ignore_above": 1024, + "type": "keyword" + }, + "seperms": { + "ignore_above": 1024, + "type": "keyword" + }, + "seqno": { + "ignore_above": 1024, + "type": "keyword" + }, + "seresult": { + "ignore_above": 1024, + "type": "keyword" + }, + "ses": { + "ignore_above": 1024, + "type": "keyword" + }, + "seuser": { + "ignore_above": 1024, + "type": "keyword" + }, + "sig": { + "ignore_above": 1024, + "type": "keyword" + }, + "sigev_signo": { + "ignore_above": 1024, + "type": "keyword" + }, + "smac": { + "ignore_above": 1024, + "type": "keyword" + }, + "socket": { + "properties": { + "addr": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "ignore_above": 1024, + "type": "keyword" + }, + "saddr": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "spid": { + "ignore_above": 1024, + "type": "keyword" + }, + "sport": { + "ignore_above": 1024, + "type": "keyword" + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "subj": { + "ignore_above": 1024, + "type": "keyword" + }, + "success": { + "ignore_above": 1024, + "type": "keyword" + }, + "syscall": { + "ignore_above": 1024, + "type": "keyword" + }, + "table": { + "ignore_above": 1024, + "type": "keyword" + }, + "tclass": { + "ignore_above": 1024, + "type": "keyword" + }, + "tcontext": { + "ignore_above": 1024, + "type": "keyword" + }, + "terminal": { + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "ignore_above": 1024, + "type": "keyword" + }, + "unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "uri": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "val": { + "ignore_above": 1024, + "type": "keyword" + }, + "ver": { + "ignore_above": 1024, + "type": "keyword" + }, + "virt": { + "ignore_above": 1024, + "type": "keyword" + }, + "vm": { + "ignore_above": 1024, + "type": "keyword" + }, + "vm-ctx": { + "ignore_above": 1024, + "type": "keyword" + }, + "vm-pid": { + "ignore_above": 1024, + "type": "keyword" + }, + "watch": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "paths": { + "properties": { + "dev": { + "ignore_above": 1024, + "type": "keyword" + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "item": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "nametype": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_role": { + "ignore_above": 1024, + "type": "keyword" + }, + "obj_user": { + "ignore_above": 1024, + "type": "keyword" + }, + "objtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "ogid": { + "ignore_above": 1024, + "type": "keyword" + }, + "ouid": { + "ignore_above": 1024, + "type": "keyword" + }, + "rdev": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sequence": { + "type": "long" + }, + "session": { + "ignore_above": 1024, + "type": "keyword" + }, + "summary": { + "properties": { + "actor": { + "properties": { + "primary": { + "ignore_above": 1024, + "type": "keyword" + }, + "secondary": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "how": { + "ignore_above": 1024, + "type": "keyword" + }, + "object": { + "properties": { + "primary": { + "ignore_above": 1024, + "type": "keyword" + }, + "secondary": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + } + } + } + } +} diff --git a/dashboards/templates/composable/component/heatbeat.json b/dashboards/templates/composable/component/heatbeat.json new file mode 100644 index 000000000..ea40b2319 --- /dev/null +++ b/dashboards/templates/composable/component/heatbeat.json @@ -0,0 +1,61 @@ +{ + "template": { + "mappings": { + "properties": { + "cpu_rpm_avg": { + "type": "float" + }, + "cpu_volt_avg": { + "type": "float" + }, + "cpu_temp_avg": { + "type": "float" + }, + "gpu_rpm_avg": { + "type": "float" + }, + "gpu_volt_avg": { + "type": "float" + }, + "gpu_temp_avg": { + "type": "float" + }, + "hdd_temp_avg": { + "type": "float" + }, + "other_volt_avg": { + "type": "float" + }, + "other_rpm_avg": { + "type": "float" + }, + "other_temp_avg": { + "type": "float" + }, + "sensors.adapter": { + "type": "keyword", + "norms": false + }, + "sensors.class": { + "type": "keyword", + "norms": false + }, + "sensors.label": { + "type": "keyword", + "norms": false + }, + "sensors.name": { + "type": "keyword", + "norms": false + }, + "sensors.units": { + "type": "keyword", + "norms": false + }, + "sensors.value": { + "type": "float" + } + } + } + } +} diff --git a/dashboards/templates/composable/component/syslog.json b/dashboards/templates/composable/component/syslog.json new file mode 100644 index 000000000..cbcc786c1 --- /dev/null +++ b/dashboards/templates/composable/component/syslog.json @@ -0,0 +1,26 @@ +{ + "template": { + "mappings": { + "properties": { + "syslog": { + "properties": { + "facility": { + "type": "long" + }, + "facility_label": { + "ignore_above": 1024, + "type": "keyword" + }, + "priority": { + "type": "long" + }, + "severity_label": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } +} diff --git a/dashboards/templates/composable/component/system.json b/dashboards/templates/composable/component/system.json new file mode 100644 index 000000000..17c04ebe0 --- /dev/null +++ b/dashboards/templates/composable/component/system.json @@ -0,0 +1,1555 @@ +{ + "template": { + "mappings": { + "properties": { + "system": { + "properties": { + "core": { + "properties": { + "id": { + "type": "long" + }, + "idle": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "iowait": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "irq": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "nice": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "softirq": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "steal": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "system": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "user": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + } + } + }, + "cpu": { + "properties": { + "cores": { + "type": "long" + }, + "idle": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "iowait": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "irq": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "nice": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "softirq": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "steal": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + } + } + } + } + }, + "diskio": { + "properties": { + "io": { + "properties": { + "time": { + "type": "long" + } + } + }, + "iostat": { + "properties": { + "await": { + "type": "float" + }, + "busy": { + "type": "float" + }, + "queue": { + "properties": { + "avg_size": { + "type": "float" + } + } + }, + "read": { + "properties": { + "await": { + "type": "float" + }, + "per_sec": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "request": { + "properties": { + "merges_per_sec": { + "type": "float" + }, + "per_sec": { + "type": "float" + } + } + } + } + }, + "request": { + "properties": { + "avg_size": { + "type": "float" + } + } + }, + "service_time": { + "type": "float" + }, + "write": { + "properties": { + "await": { + "type": "float" + }, + "per_sec": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "request": { + "properties": { + "merges_per_sec": { + "type": "float" + }, + "per_sec": { + "type": "float" + } + } + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "read": { + "properties": { + "bytes": { + "type": "long" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "write": { + "properties": { + "bytes": { + "type": "long" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + } + } + }, + "entropy": { + "properties": { + "available_bits": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "filesystem": { + "properties": { + "available": { + "type": "long" + }, + "device_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "files": { + "type": "long" + }, + "free": { + "type": "long" + }, + "free_files": { + "type": "long" + }, + "mount_point": { + "ignore_above": 1024, + "type": "keyword" + }, + "total": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "used": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "fsstat": { + "properties": { + "count": { + "type": "long" + }, + "total_files": { + "type": "long" + }, + "total_size": { + "properties": { + "free": { + "type": "long" + }, + "total": { + "type": "long" + }, + "used": { + "type": "long" + } + } + } + } + }, + "load": { + "properties": { + "1": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "15": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "5": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "cores": { + "type": "long" + }, + "norm": { + "properties": { + "1": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "15": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "5": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + }, + "used": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "free": { + "type": "long" + }, + "hugepages": { + "properties": { + "default_size": { + "type": "long" + }, + "free": { + "type": "long" + }, + "reserved": { + "type": "long" + }, + "surplus": { + "type": "long" + }, + "swap": { + "properties": { + "out": { + "properties": { + "fallback": { + "type": "long" + }, + "pages": { + "type": "long" + } + } + } + } + }, + "total": { + "type": "long" + }, + "used": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "type": "long" + } + } + } + } + }, + "page_stats": { + "properties": { + "direct_efficiency": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "kswapd_efficiency": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pgfree": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "pgscan_direct": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "pgscan_kswapd": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "pgsteal_direct": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "pgsteal_kswapd": { + "properties": { + "pages": { + "type": "long" + } + } + } + } + }, + "swap": { + "properties": { + "free": { + "type": "long" + }, + "in": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "out": { + "properties": { + "pages": { + "type": "long" + } + } + }, + "readahead": { + "properties": { + "cached": { + "type": "long" + }, + "pages": { + "type": "long" + } + } + }, + "total": { + "type": "long" + }, + "used": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "total": { + "type": "long" + }, + "used": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "network": { + "properties": { + "in": { + "properties": { + "bytes": { + "type": "long" + }, + "dropped": { + "type": "long" + }, + "errors": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "out": { + "properties": { + "bytes": { + "type": "long" + }, + "dropped": { + "type": "long" + }, + "errors": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "network_summary": { + "properties": { + "icmp": { + "properties": { + "*": { + "type": "object" + } + } + }, + "ip": { + "properties": { + "*": { + "type": "object" + } + } + }, + "tcp": { + "properties": { + "*": { + "type": "object" + } + } + }, + "udp": { + "properties": { + "*": { + "type": "object" + } + } + }, + "udp_lite": { + "properties": { + "*": { + "type": "object" + } + } + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "blkio": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "total": { + "properties": { + "bytes": { + "type": "long" + }, + "ios": { + "type": "long" + } + } + } + } + }, + "cpu": { + "properties": { + "cfs": { + "properties": { + "period": { + "properties": { + "us": { + "type": "long" + } + } + }, + "quota": { + "properties": { + "us": { + "type": "long" + } + } + }, + "shares": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "rt": { + "properties": { + "period": { + "properties": { + "us": { + "type": "long" + } + } + }, + "runtime": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "periods": { + "type": "long" + }, + "throttled": { + "properties": { + "ns": { + "type": "long" + }, + "periods": { + "type": "long" + } + } + } + } + } + } + }, + "cpuacct": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "percpu": { + "type": "object" + }, + "stats": { + "properties": { + "system": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "user": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "total": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "memory": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "kmem": { + "properties": { + "failures": { + "type": "long" + }, + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + }, + "max": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + }, + "kmem_tcp": { + "properties": { + "failures": { + "type": "long" + }, + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + }, + "max": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + }, + "mem": { + "properties": { + "failures": { + "type": "long" + }, + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + }, + "max": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + }, + "memsw": { + "properties": { + "failures": { + "type": "long" + }, + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + }, + "max": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "stats": { + "properties": { + "active_anon": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "active_file": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cache": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "hierarchical_memory_limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "hierarchical_memsw_limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "inactive_anon": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "major_page_faults": { + "type": "long" + }, + "mapped_file": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "page_faults": { + "type": "long" + }, + "pages_in": { + "type": "long" + }, + "pages_out": { + "type": "long" + }, + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "rss_huge": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "swap": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "unevictable": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cmdline": { + "ignore_above": 2048, + "type": "keyword" + }, + "cpu": { + "properties": { + "start_time": { + "type": "date" + }, + "system": { + "properties": { + "ticks": { + "type": "long" + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + }, + "ticks": { + "type": "long" + }, + "value": { + "type": "long" + } + } + }, + "user": { + "properties": { + "ticks": { + "type": "long" + } + } + } + } + }, + "env": { + "type": "object" + }, + "fd": { + "properties": { + "limit": { + "properties": { + "hard": { + "type": "long" + }, + "soft": { + "type": "long" + } + } + }, + "open": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + }, + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "share": { + "type": "long" + }, + "size": { + "type": "long" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "summary": { + "properties": { + "dead": { + "type": "long" + }, + "idle": { + "type": "long" + }, + "running": { + "type": "long" + }, + "sleeping": { + "type": "long" + }, + "stopped": { + "type": "long" + }, + "total": { + "type": "long" + }, + "unknown": { + "type": "long" + }, + "zombie": { + "type": "long" + } + } + } + } + }, + "raid": { + "properties": { + "blocks": { + "properties": { + "synced": { + "type": "long" + }, + "total": { + "type": "long" + } + } + }, + "disks": { + "properties": { + "active": { + "type": "long" + }, + "failed": { + "type": "long" + }, + "spare": { + "type": "long" + }, + "states": { + "properties": { + "*": { + "type": "object" + } + } + }, + "total": { + "type": "long" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync_action": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "exec_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "load_state": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resources": { + "properties": { + "cpu": { + "properties": { + "usage": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "memory": { + "properties": { + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "network": { + "properties": { + "in": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "out": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "tasks": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_since": { + "type": "date" + }, + "sub_state": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "socket": { + "properties": { + "local": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cmdline": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "remote": { + "properties": { + "etld_plus_one": { + "ignore_above": 1024, + "type": "keyword" + }, + "host": { + "ignore_above": 1024, + "type": "keyword" + }, + "host_error": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "summary": { + "properties": { + "all": { + "properties": { + "count": { + "type": "long" + }, + "listening": { + "type": "long" + } + } + }, + "tcp": { + "properties": { + "all": { + "properties": { + "close_wait": { + "type": "long" + }, + "count": { + "type": "long" + }, + "established": { + "type": "long" + }, + "listening": { + "type": "long" + }, + "orphan": { + "type": "long" + }, + "time_wait": { + "type": "long" + } + } + }, + "memory": { + "type": "long" + } + } + }, + "udp": { + "properties": { + "all": { + "properties": { + "count": { + "type": "long" + } + } + }, + "memory": { + "type": "long" + } + } + } + } + } + } + }, + "uptime": { + "properties": { + "duration": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "users": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "leader": { + "type": "long" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "remote": { + "type": "boolean" + }, + "remote_host": { + "ignore_above": 1024, + "type": "keyword" + }, + "scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "seat": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "ignore_above": 1024, + "type": "keyword" + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + } + } +} diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index d2e5e6f13..ff5e0116d 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -19,7 +19,11 @@ "ecs_threat", "ecs_url", "ecs_user", - "ecs_user_agent" + "ecs_user_agent", + "custom_auditd", + "custom_heatbeat", + "custom_syslog", + "custom_system" ], "template" :{ "settings" : { @@ -30,60 +34,7 @@ "mappings": { "properties": { "timestamp": { "type": "date" }, - "node": { "type": "keyword" }, - "cpu_rpm_avg": { - "type": "float" - }, - "cpu_volt_avg": { - "type": "float" - }, - "cpu_temp_avg": { - "type": "float" - }, - "gpu_rpm_avg": { - "type": "float" - }, - "gpu_volt_avg": { - "type": "float" - }, - "gpu_temp_avg": { - "type": "float" - }, - "hdd_temp_avg": { - "type": "float" - }, - "other_volt_avg": { - "type": "float" - }, - "other_rpm_avg": { - "type": "float" - }, - "other_temp_avg": { - "type": "float" - }, - "sensors.adapter": { - "type": "keyword", - "norms": false - }, - "sensors.class": { - "type": "keyword", - "norms": false - }, - "sensors.label": { - "type": "keyword", - "norms": false - }, - "sensors.name": { - "type": "keyword", - "norms": false - }, - "sensors.units": { - "type": "keyword", - "norms": false - }, - "sensors.value": { - "type": "float" - } + "node": { "type": "keyword" } } } } From 35d82a6b3b0c3ce9da9ab5bf24fcd367be6f170d Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 6 Jun 2022 15:06:55 -0600 Subject: [PATCH 036/122] added metricset stuff into system template --- dashboards/templates/composable/component/system.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dashboards/templates/composable/component/system.json b/dashboards/templates/composable/component/system.json index 17c04ebe0..c800349f6 100644 --- a/dashboards/templates/composable/component/system.json +++ b/dashboards/templates/composable/component/system.json @@ -2,6 +2,17 @@ "template": { "mappings": { "properties": { + "metricset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "period": { + "type": "long" + } + } + }, "system": { "properties": { "core": { From 62480dd33ea664e3716ca7f3c2d590e060d1fc43 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Tue, 7 Jun 2022 06:58:33 -0600 Subject: [PATCH 037/122] more work in progress on the dashboards for hedgehog --- .../dashboards/beats/Filebeat-auditd.json | 10 +- .../dashboards/beats/Filebeat-syslog.json | 213 ++++++---- .../beats/Metricbeat-host-overview.json | 94 ++--- .../beats/Metricbeat-system-overview.json | 46 +-- .../dashboards/beats/Packetbeat-dhcpv4.json | 153 ------- .../beats/Packetbeat-dns-overview.json | 167 -------- .../beats/Packetbeat-dns-tunneling.json | 115 ------ .../dashboards/beats/Packetbeat-flows.json | 137 ------- .../dashboards/beats/Packetbeat-http.json | 161 -------- .../dashboards/beats/Packetbeat-overview.json | 336 ---------------- .../dashboards/beats/Packetbeat-tls.json | 374 ------------------ .../Protologbeat-temperatures-dashboard.json | 10 +- .../beats/auditbeat-file-integrity.json | 24 +- .../beats/auditbeat-kernel-executions.json | 4 +- .../beats/auditbeat-kernel-overview.json | 6 +- .../beats/auditbeat-kernel-sockets.json | 12 +- .../templates/malcolm_beats_template.json | 1 + dashboards/templates/malcolm_template.json | 1 + .../normal/0910-sensor-build.hook.chroot | 24 +- 19 files changed, 239 insertions(+), 1649 deletions(-) delete mode 100644 dashboards/dashboards/beats/Packetbeat-dhcpv4.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-dns-overview.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-dns-tunneling.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-flows.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-http.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-overview.json delete mode 100644 dashboards/dashboards/beats/Packetbeat-tls.json diff --git a/dashboards/dashboards/beats/Filebeat-auditd.json b/dashboards/dashboards/beats/Filebeat-auditd.json index 9b20c24f2..db9024a2c 100644 --- a/dashboards/dashboards/beats/Filebeat-auditd.json +++ b/dashboards/dashboards/beats/Filebeat-auditd.json @@ -4,7 +4,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, "title": "Event types breakdown [Filebeat Auditd] ECS", "uiStateJSON": "{}", @@ -19,7 +19,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"event.action:EXECVE\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" + "searchSourceJSON": "{\"query\": {\"query\": \"event.action:EXECVE\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, "title": "Top Exec Commands [Filebeat Auditd] ECS", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", @@ -49,7 +49,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, "title": "Event Address Geo Location [Filebeat Auditd] ECS", "uiStateJSON": "{}", @@ -64,7 +64,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"filebeat-*\"}" + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, "title": "Event Account Tag Cloud [Filebeat Auditd] ECS", "uiStateJSON": "{}", @@ -85,7 +85,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"event.dataset:auditd.log\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"index\": \"filebeat-*\", \"highlightAll\": true}" + "searchSourceJSON": "{\"query\": {\"query\": \"event.dataset:auditd.log\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"index\": \"malcolm_beats_*\", \"highlightAll\": true}" }, "sort": [ "@timestamp", diff --git a/dashboards/dashboards/beats/Filebeat-syslog.json b/dashboards/dashboards/beats/Filebeat-syslog.json index 87c214b79..b161e97a1 100644 --- a/dashboards/dashboards/beats/Filebeat-syslog.json +++ b/dashboards/dashboards/beats/Filebeat-syslog.json @@ -1,93 +1,144 @@ { - "objects": [ + "version": "2.0.0", + "objects": [ + { + "id": "Filebeat-syslog-dashboard-ecs", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-06T22:19:27.173Z", + "version": "WzkyMywxXQ==", + "attributes": { + "title": "[Filebeat System] Syslog dashboard ECS", + "hits": 0, + "description": "Syslog dashboard from the Filebeat System module", + "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":36,\"h\":22,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":22,\"w\":48,\"h\":28,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"columns\":[\"host.name\",\"process.program\",\"event.original\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":36,\"y\":0,\"w\":12,\"h\":22,\"i\":\"29d428e5-2e38-4055-990a-127002b9239e\"},\"panelIndex\":\"29d428e5-2e38-4055-990a-127002b9239e\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"}]", + "optionsJSON": "{\"darkTheme\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"version\":true,\"highlightAll\":true,\"filter\":[]}" + } + }, + "references": [ { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "Syslog-system-logs-ecs", - "title": "Syslog events by hostname [Filebeat System] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"histogram\", \"listeners\": {}, \"params\": {\"times\": [], \"addTimeMarker\": false, \"setYExtents\": false, \"shareYAxis\": true, \"legendPosition\": \"right\", \"scale\": \"linear\", \"yAxis\": {}, \"addTooltip\": true, \"addLegend\": true, \"mode\": \"stacked\", \"defaultYExtents\": false}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"date_histogram\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"interval\": \"auto\", \"min_doc_count\": 1, \"customInterval\": \"2h\", \"extended_bounds\": {}, \"field\": \"@timestamp\"}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"3\", \"schema\": \"group\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"host.hostname\"}}], \"title\": \"Syslog events by hostname ECS\"}" - }, - "id": "Syslog-events-by-hostname-ecs", - "type": "visualization", - "version": 2 + "name": "panel_0", + "type": "visualization", + "id": "Syslog-events-by-hostname-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "Syslog-system-logs-ecs", - "title": "Syslog hostnames and processes [Filebeat System] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"bottom\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true, \"shareYAxis\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"host.hostname\"}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"3\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 5, \"order\": \"desc\", \"field\": \"process.name\"}}], \"title\": \"Syslog hostnames and processes ECS\"}" - }, - "id": "Syslog-hostnames-and-processes-ecs", - "type": "visualization", - "version": 2 + "name": "panel_1", + "type": "search", + "id": "Syslog-system-logs-ecs" }, { - "attributes": { - "columns": [ - "host.hostname", - "process.name", - "message" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"event.dataset:system.syslog\", \"language\": \"kuery\"}, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"fields\": {\"*\": {}}, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647}, \"filter\": [], \"index\": \"filebeat-*\", \"highlightAll\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Syslog logs [Filebeat System] ECS", - "version": 1 - }, - "id": "Syslog-system-logs-ecs", - "type": "search", - "version": 2 + "name": "panel_2", + "type": "visualization", + "id": "acd5bc10-e5e6-11ec-93b8-7d74ebb8d857" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "Syslog-events-by-hostname-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-06T22:16:35.490Z", + "version": "WzkyMSwxXQ==", + "attributes": { + "title": "Syslog events by hostname [Filebeat System] ECS", + "visState": "{\"title\":\"Syslog events by hostname [Filebeat System] ECS\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"group\"}],\"params\":{\"times\":[],\"addTimeMarker\":false,\"setYExtents\":false,\"shareYAxis\":true,\"legendPosition\":\"bottom\",\"scale\":\"linear\",\"yAxis\":{},\"addTooltip\":true,\"addLegend\":true,\"mode\":\"stacked\",\"defaultYExtents\":false,\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" }, + "savedSearchRefName": "search_0" + }, + "references": [ { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Dashboards [Filebeat System] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"markdown\", \"params\": {\"markdown\": \"[Syslog](#/dashboard/Filebeat-syslog-dashboard-ecs) | [Sudo commands](#/dashboard/277876d0-fa2c-11e6-bbd3-29c986c96e5a-ecs) | [SSH logins](#/dashboard/5517a150-f9ce-11e6-8115-a7c18106d86a-ecs) | [New users and groups](#/dashboard/0d3f2380-fa78-11e6-ae9b-81e5311e8cab-ecs)\", \"fontSize\": 12}, \"aggs\": [], \"title\": \"Dashboards [Filebeat System] ECS\"}" - }, - "id": "327417e0-8462-11e7-bab8-bd2f0fb42c54-ecs", - "type": "visualization", - "version": 1 + "name": "search_0", + "type": "search", + "id": "Syslog-system-logs-ecs" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "Syslog-system-logs-ecs", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-06T22:09:20.377Z", + "version": "Wzg0MiwxXQ==", + "attributes": { + "columns": [ + "host.name", + "process.program", + "event.original" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"agent.type:syslog\",\"language\":\"kuery\"},\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"filter\":[],\"highlightAll\":true,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "Syslog logs [Filebeat System] ECS", + "version": 1 + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "search": "7.9.3" + } + }, + { + "id": "acd5bc10-e5e6-11ec-93b8-7d74ebb8d857", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-06T22:19:04.657Z", + "version": "WzkyMiwxXQ==", + "attributes": { + "title": "Syslog Program Name", + "visState": "{\"title\":\"Syslog Program Name\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"process.program.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Program Name\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"agent.type:syslog\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ { - "attributes": { - "description": "Syslog dashboard from the Filebeat System module", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"size_x\": 8, \"size_y\": 4, \"panelIndex\": 1, \"id\": \"Syslog-events-by-hostname-ecs\", \"col\": 1, \"row\": 2}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 2, \"id\": \"Syslog-hostnames-and-processes-ecs\", \"col\": 9, \"row\": 2}, {\"type\": \"search\", \"columns\": [\"host.hostname\", \"process.name\", \"message\"], \"size_x\": 12, \"size_y\": 7, \"panelIndex\": 3, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"Syslog-system-logs-ecs\", \"col\": 1, \"row\": 6}, {\"type\": \"visualization\", \"size_x\": 12, \"size_y\": 1, \"panelIndex\": 4, \"id\": \"327417e0-8462-11e7-bab8-bd2f0fb42c54-ecs\", \"col\": 1, \"row\": 1}]", - "timeRestore": false, - "title": "[Filebeat System] Syslog dashboard ECS", - "uiStateJSON": "{}", - "version": 1 - }, - "id": "Filebeat-syslog-dashboard-ecs", - "type": "dashboard", - "version": 6 + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" } - ], - "version": "6.0.0-beta1-SNAPSHOT" + ], + "migrationVersion": { + "visualization": "7.10.0" + } + } + ] } \ No newline at end of file diff --git a/dashboards/dashboards/beats/Metricbeat-host-overview.json b/dashboards/dashboards/beats/Metricbeat-host-overview.json index c8841587b..be0550140 100644 --- a/dashboards/dashboards/beats/Metricbeat-host-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-host-overview.json @@ -10,7 +10,7 @@ "optionsJSON": "{\"darkTheme\": false}", "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"1\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"1\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"2\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"2\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"3\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"3\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"4\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"4\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"5\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"5\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"6\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"6\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"7\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"7\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"8\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"8\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"9\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"10\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"10\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_10\", \"panelIndex\": \"11\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"11\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_11\", \"panelIndex\": \"12\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_12\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"13\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_13\", \"panelIndex\": \"14\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"14\", \"w\": 16, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_14\", \"panelIndex\": \"16\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"16\", \"w\": 24, \"y\": 0, \"h\": 5}}, {\"panelRefName\": \"panel_15\", \"panelIndex\": \"21\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"21\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_16\", \"panelIndex\": \"22\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"22\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_17\", \"panelIndex\": \"23\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"23\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_18\", \"panelIndex\": \"25\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"25\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_19\", \"panelIndex\": \"27\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"27\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_20\", \"panelIndex\": \"28\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"28\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_21\", \"panelIndex\": \"29\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"29\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_22\", \"panelIndex\": \"30\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"30\", \"w\": 24, \"y\": 0, \"h\": 5}}]", "timeRestore": false, - "title": "[Metricbeat System] Host overview ECS", + "title": "Metricbeat Hosts Overview", "version": 1 }, "id": "79ffd6e0-faa0-11e6-947f-177f697178b8-ecs", @@ -144,10 +144,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Network Traffic (Packets) [Metricbeat System] ECS", + "title": "Network Traffic (Packets)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"c0da3d80-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"ecaad010-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound\", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"fe5fbdc0-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Packets) ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"c0da3d80-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"ecaad010-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound\", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"fe5fbdc0-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Packets) ECS\", \"type\": \"metrics\"}" }, "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs", "migrationVersion": { @@ -164,10 +164,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "System Load [Metricbeat System] ECS", + "title": "System Load", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Load [Metricbeat System] ECS\", \"params\": {\"id\": \"f6264ad0-1b14-11e7-b09e-037021c4f8df\", \"index_pattern\": \"metricbeat-*\", \"series\": [{\"id\": \"f62671e0-1b14-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(115,216,255,1)\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"f62671e1-1b14-11e7-b09e-037021c4f8df\", \"field\": \"system.load.1\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"1m\", \"stacked\": \"none\"}, {\"id\": \"1c324850-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"1c324851-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"5m\", \"stacked\": \"none\"}, {\"id\": \"3287e740-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,98,177,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32880e50-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.15\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"15m\", \"stacked\": \"none\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"System Load\", \"params\": {\"id\": \"f6264ad0-1b14-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"f62671e0-1b14-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(115,216,255,1)\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"f62671e1-1b14-11e7-b09e-037021c4f8df\", \"field\": \"system.load.1\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"1m\", \"stacked\": \"none\"}, {\"id\": \"1c324850-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"1c324851-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"5m\", \"stacked\": \"none\"}, {\"id\": \"3287e740-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,98,177,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32880e50-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.15\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"15m\", \"stacked\": \"none\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" }, "id": "4d546850-1b15-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -184,10 +184,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Network Traffic (Bytes) [Metricbeat System] ECS", + "title": "Network Traffic (Bytes)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"a87398e0-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"2d533df0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound \", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"533da9b0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound \", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Bytes) ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"a87398e0-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"2d533df0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound \", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"533da9b0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound \", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Bytes) ECS\", \"type\": \"metrics\"}" }, "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -204,10 +204,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Memory Usage [Metricbeat System] ECS", + "title": "Memory Usage", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage [Metricbeat System] ECS\", \"params\": {\"id\": \"32f46f40-1b16-11e7-b09e-037021c4f8df\", \"index_pattern\": \"metricbeat-*\", \"series\": [{\"id\": \"4ff61fd0-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"4ff61fd1-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Used\", \"stacked\": \"stacked\"}, {\"id\": \"753a6080-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}, {\"id\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.used.bytes\", \"type\": \"avg\"}, {\"id\": \"869cc160-1b16-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"890f9620-1b16-11e7-b09e-037021c4f8df\", \"field\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"name\": \"actual\"}, {\"id\": \"8f3ab7f0-1b16-11e7-b09e-037021c4f8df\", \"field\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"name\": \"used\"}], \"script\": \"params.actual != null && params.used != null ? params.used - params.actual : null\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Cache\", \"stacked\": \"stacked\"}, {\"id\": \"32f46f41-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32f46f42-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.free\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Free\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Memory Usage\", \"params\": {\"id\": \"32f46f40-1b16-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"4ff61fd0-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"4ff61fd1-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Used\", \"stacked\": \"stacked\"}, {\"id\": \"753a6080-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}, {\"id\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.used.bytes\", \"type\": \"avg\"}, {\"id\": \"869cc160-1b16-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"890f9620-1b16-11e7-b09e-037021c4f8df\", \"field\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"name\": \"actual\"}, {\"id\": \"8f3ab7f0-1b16-11e7-b09e-037021c4f8df\", \"field\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"name\": \"used\"}], \"script\": \"params.actual != null && params.used != null ? params.used - params.actual : null\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Cache\", \"stacked\": \"stacked\"}, {\"id\": \"32f46f41-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32f46f42-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.free\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Free\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" }, "id": "bfa5e400-1b16-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -224,10 +224,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Top Processes By CPU [Metricbeat System] ECS", + "title": "Top Processes By CPU", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Processes By CPU [Metricbeat System] ECS\", \"params\": {\"id\": \"5f5b8d50-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"5f5b8d51-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.cpu.total.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"60e11be0-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Top Processes By CPU\", \"params\": {\"id\": \"5f5b8d50-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"5f5b8d51-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.cpu.total.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"60e11be0-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}]}, \"type\": \"metrics\"}" }, "id": "e0f001c0-1b18-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -244,10 +244,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Processes By Memory [Metricbeat System] ECS", + "title": "Processes By Memory", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Processes By Memory [Metricbeat System] ECS\", \"params\": {\"id\": \"edfceb30-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"edfceb31-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.memory.rss.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"efb9b660-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"17fcb820-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1dd61070-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Processes By Memory\", \"params\": {\"id\": \"edfceb30-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"edfceb31-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.memory.rss.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"efb9b660-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"17fcb820-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1dd61070-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" }, "id": "2e224660-1b19-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -264,10 +264,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "CPU Usage [Metricbeat System] ECS", + "title": "CPU Usage", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage [Metricbeat System] ECS\", \"params\": {\"id\": \"80a04950-1b19-11e7-b09e-037021c4f8df\", \"index_pattern\": \"metricbeat-*\", \"series\": [{\"id\": \"80a04951-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"80a04952-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"user\", \"stacked\": \"stacked\"}, {\"id\": \"993acf30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"993acf31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"system\", \"stacked\": \"stacked\"}, {\"id\": \"65ca35e0-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(123,100,255,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"65ca5cf0-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.nice.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"nice\", \"stacked\": \"stacked\"}, {\"id\": \"741b5f20-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(226,115,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"741b5f21-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.irq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"irq\", \"stacked\": \"stacked\"}, {\"id\": \"2efc5d40-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(176,188,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"2efc5d41-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.softirq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"softirq\", \"stacked\": \"stacked\"}, {\"id\": \"ae644a30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(15,20,25,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"ae644a31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.iowait.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"iowait\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"CPU Usage\", \"params\": {\"id\": \"80a04950-1b19-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"80a04951-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"80a04952-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"user\", \"stacked\": \"stacked\"}, {\"id\": \"993acf30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"993acf31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"system\", \"stacked\": \"stacked\"}, {\"id\": \"65ca35e0-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(123,100,255,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"65ca5cf0-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.nice.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"nice\", \"stacked\": \"stacked\"}, {\"id\": \"741b5f20-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(226,115,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"741b5f21-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.irq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"irq\", \"stacked\": \"stacked\"}, {\"id\": \"2efc5d40-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(176,188,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"2efc5d41-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.softirq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"softirq\", \"stacked\": \"stacked\"}, {\"id\": \"ae644a30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(15,20,25,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"ae644a31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.iowait.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"iowait\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" }, "id": "ab2d1e90-1b1a-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -284,10 +284,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Disk IO (Bytes) [Metricbeat System] ECS", + "title": "Disk IO (Bytes)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk IO (Bytes) [Metricbeat System] ECS\", \"params\": {\"id\": \"d3c67db0-1b1a-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"d3c67db1-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(22,165,165,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.read.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"dcbbb100-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"positive_only\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"reads\", \"stacked\": \"none\"}, {\"id\": \"144124d0-1b1b-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(251,158,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.write.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"id\": \"144124d4-1b1b-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"144124d3-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"name\": \"rate\"}], \"script\": \"params.rate > 0 ? params.rate * -1 : 0\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"writes\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Disk IO (Bytes)\", \"params\": {\"id\": \"d3c67db0-1b1a-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"d3c67db1-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(22,165,165,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.read.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"dcbbb100-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"positive_only\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"reads\", \"stacked\": \"none\"}, {\"id\": \"144124d0-1b1b-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(251,158,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.write.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"id\": \"144124d4-1b1b-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"144124d3-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"name\": \"rate\"}], \"script\": \"params.rate > 0 ? params.rate * -1 : 0\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"writes\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" }, "id": "4e4bb1e0-1b1b-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -304,10 +304,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Load Gauge [Metricbeat System] ECS", + "title": "Load Gauge", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Load Gauge [Metricbeat System] ECS\", \"params\": {\"id\": \"fdcc6180-1b90-11e7-bec4-a5e9ec5cab8b\", \"series\": [{\"id\": \"fdcc6181-1b90-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"fdcc6182-1b90-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"5m Load\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"feefabd0-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"show_legend\": 1, \"gauge_inner_width\": 10, \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"gauge_color_rules\": [{\"id\": \"ffd94880-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Load Gauge\", \"params\": {\"id\": \"fdcc6180-1b90-11e7-bec4-a5e9ec5cab8b\", \"series\": [{\"id\": \"fdcc6181-1b90-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"fdcc6182-1b90-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"5m Load\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"feefabd0-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"show_legend\": 1, \"gauge_inner_width\": 10, \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"gauge_color_rules\": [{\"id\": \"ffd94880-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "26732e20-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -324,10 +324,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "CPU Usage Gauge [Metricbeat System] ECS", + "title": "CPU Usage Gauge", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge [Metricbeat System] ECS\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -344,10 +344,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Memory Usage Gauge [Metricbeat System] ECS", + "title": "Memory Usage Gauge", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge [Metricbeat System] ECS\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -364,10 +364,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Inbound Traffic [Metricbeat System] ECS", + "title": "Inbound Traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" }, "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -384,10 +384,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Outbound Traffic [Metricbeat System] ECS", + "title": "Outbound Traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" }, "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", "migrationVersion": { @@ -404,10 +404,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Disk Usage [Metricbeat System] ECS", + "title": "Disk Usage", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk Usage [Metricbeat System] ECS\", \"params\": {\"id\": \"9f7e48a0-1b95-11e7-8ada-3df93aab833e\", \"filter\": {\"query\": \"-system.filesystem.mount_point:\\\\/run* AND -system.filesystem.mount_point:\\\\/sys* AND -system.filesystem.mount_point:\\\\/dev* AND -system.filesystem.mount_point:\\\\/proc* AND -system.filesystem.mount_point:\\\\/var* AND -system.filesystem.mount_point:\\\\/boot\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"9f7e48a1-1b95-11e7-8ada-3df93aab833e\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.filesystem.mount_point\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f7e48a2-1b95-11e7-8ada-3df93aab833e\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.filesystem.used.pct\", \"size\": 1, \"order\": \"desc\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"stacked\": \"none\"}], \"default_index_pattern\": \"metricbeat-*\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"default_timefield\": \"@timestamp\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"bf525310-1b95-11e7-8ada-3df93aab833e\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"125fc4c0-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1a5c7240-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Disk Usage\", \"params\": {\"id\": \"9f7e48a0-1b95-11e7-8ada-3df93aab833e\", \"filter\": {\"query\": \"-system.filesystem.mount_point:\\\\/run* AND -system.filesystem.mount_point:\\\\/sys* AND -system.filesystem.mount_point:\\\\/dev* AND -system.filesystem.mount_point:\\\\/proc* AND -system.filesystem.mount_point:\\\\/var* AND -system.filesystem.mount_point:\\\\/boot\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"9f7e48a1-1b95-11e7-8ada-3df93aab833e\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.filesystem.mount_point\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f7e48a2-1b95-11e7-8ada-3df93aab833e\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.filesystem.used.pct\", \"size\": 1, \"order\": \"desc\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"stacked\": \"none\"}], \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"default_timefield\": \"@timestamp\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"bf525310-1b95-11e7-8ada-3df93aab833e\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"125fc4c0-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1a5c7240-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" }, "id": "34f97ee0-1b96-11e7-8ada-3df93aab833e-ecs", "migrationVersion": { @@ -424,10 +424,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "System Navigation [Metricbeat System] ECS", + "title": "System Navigation", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation [Metricbeat System] ECS\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" + "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" }, "id": "System-Navigation-ecs", "migrationVersion": { @@ -444,10 +444,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Swap usage [Metricbeat System] ECS", + "title": "Swap usage", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Swap usage [Metricbeat System] ECS\", \"params\": {\"id\": \"cee2fd20-4d59-11e7-aee5-fdc812cc3bec\", \"filter\": \"\", \"series\": [{\"id\": \"cee2fd21-4d59-11e7-aee5-fdc812cc3bec\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\", \"field\": \"system.memory.swap.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Swap usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"d17c1e90-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fc1d3490-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"0e204240-4d5a-11e7-aee5-fdc812cc3bec\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Swap usage\", \"params\": {\"id\": \"cee2fd20-4d59-11e7-aee5-fdc812cc3bec\", \"filter\": \"\", \"series\": [{\"id\": \"cee2fd21-4d59-11e7-aee5-fdc812cc3bec\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\", \"field\": \"system.memory.swap.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Swap usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"d17c1e90-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fc1d3490-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"0e204240-4d5a-11e7-aee5-fdc812cc3bec\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "19e123b0-4d5a-11e7-aee5-fdc812cc3bec-ecs", "migrationVersion": { @@ -464,10 +464,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Memory usage vs total [Metricbeat System] ECS", + "title": "Memory usage vs total", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"6bc65720-4d5c-11e7-aa29-87a97a796de6\", \"index_pattern\": \"metricbeat-*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6bc65721-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6bc65722-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory usage\", \"stacked\": \"none\"}, {\"id\": \"b8fe6820-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"b8fe6821-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.total\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Memory\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_legend\": 1}, \"title\": \"Memory usage vs total ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"6bc65720-4d5c-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6bc65721-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6bc65722-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory usage\", \"stacked\": \"none\"}, {\"id\": \"b8fe6820-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"b8fe6821-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.total\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Memory\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_legend\": 1}, \"title\": \"Memory usage vs total ECS\", \"type\": \"metrics\"}" }, "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs", "migrationVersion": { @@ -484,10 +484,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Disk used [Metricbeat System] ECS", + "title": "Disk used", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk used [Metricbeat System] ECS\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"metricbeat-*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Disk used\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", "migrationVersion": { @@ -504,10 +504,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Packetloss [Metricbeat System] ECS", + "title": "Packetloss", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Packetloss [Metricbeat System] ECS\", \"params\": {\"id\": \"6984af10-4d5d-11e7-aa29-87a97a796de6\", \"index_pattern\": \"metricbeat-*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6984af11-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6984af12-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.in.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"In Packetloss\", \"stacked\": \"none\"}, {\"id\": \"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.out.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Out Packetloss\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Packetloss\", \"params\": {\"id\": \"6984af10-4d5d-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6984af11-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6984af12-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.in.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"In Packetloss\", \"stacked\": \"none\"}, {\"id\": \"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.out.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Out Packetloss\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" }, "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs", "migrationVersion": { @@ -524,10 +524,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Interfaces by Incoming traffic [Metricbeat System] ECS", + "title": "Interfaces by Incoming traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Interfaces by Incoming traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"metricbeat-*\", \"series\": [{\"id\": \"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.in.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Incoming traffic\", \"terms_order_by\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Interfaces by Incoming traffic\", \"params\": {\"id\": \"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.in.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Incoming traffic\", \"terms_order_by\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" }, "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", "migrationVersion": { @@ -544,10 +544,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Interfaces by Outgoing traffic [Metricbeat System] ECS", + "title": "Interfaces by Outgoing traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Interfaces by Outgoing traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"metricbeat-*\", \"series\": [{\"id\": \"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.out.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Outgoing traffic\", \"terms_order_by\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Interfaces by Outgoing traffic\", \"params\": {\"id\": \"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.out.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Outgoing traffic\", \"terms_order_by\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" }, "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", "migrationVersion": { @@ -564,7 +564,7 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" }, - "title": "Number of processes [Metricbeat System] ECS", + "title": "Number of processes", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"process.pid\", \"customLabel\": \"Processes\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"listeners\": {}, \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": 60}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": true, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"title\": \"Number of processes ECS\", \"type\": \"metric\"}" @@ -575,7 +575,7 @@ }, "references": [ { - "id": "metricbeat-*", + "id": "malcolm_beats_*", "name": "kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" } @@ -590,10 +590,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{}" }, - "title": "Tip [Metricbeat System] ECS", + "title": "Tip", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Tip [Metricbeat System] ECS\", \"params\": {\"markdown\": \"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and double-click a host name.\", \"fontSize\": 12}, \"type\": \"markdown\"}" + "visState": "{\"aggs\": [], \"title\": \"Tip\", \"params\": {\"markdown\": \"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and double-click a host name.\", \"fontSize\": 12}, \"type\": \"markdown\"}" }, "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", "migrationVersion": { diff --git a/dashboards/dashboards/beats/Metricbeat-system-overview.json b/dashboards/dashboards/beats/Metricbeat-system-overview.json index 05d90dadc..5b0fa5cb8 100644 --- a/dashboards/dashboards/beats/Metricbeat-system-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-system-overview.json @@ -10,7 +10,7 @@ "optionsJSON": "{\"darkTheme\": false}", "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"9\", \"w\": 48, \"y\": 0, \"h\": 4}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"11\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"11\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"12\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"13\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"14\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"45% - 60%\": \"rgb(35,139,69)\", \"0% - 15%\": \"rgb(247,252,245)\", \"15% - 30%\": \"rgb(199,233,192)\", \"30% - 45%\": \"rgb(116,196,118)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"14\", \"w\": 48, \"y\": 32, \"h\": 24}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"16\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"16\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"17\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"17\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"18\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"18\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"19\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"19\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"20\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"20\", \"w\": 8, \"y\": 4, \"h\": 8}}]", "timeRestore": false, - "title": "[Metricbeat System] Overview ECS", + "title": "Metricbeat System Overview", "version": 1 }, "id": "Metricbeat-system-overview-ecs", @@ -79,10 +79,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "System Navigation [Metricbeat System] ECS", + "title": "System Navigation", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation [Metricbeat System] ECS\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" + "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" }, "id": "System-Navigation-ecs", "migrationVersion": { @@ -99,10 +99,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" }, - "title": "Number of hosts [Metricbeat System] ECS", + "title": "Number of hosts", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"host.name\", \"customLabel\": \"Number of hosts\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"title\": \"Number of hosts [Metricbeat System] ECS\", \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": \"63\"}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": false, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"type\": \"metric\"}" + "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"host.name\", \"customLabel\": \"Number of hosts\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"title\": \"Number of hosts\", \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": \"63\"}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": false, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"type\": \"metric\"}" }, "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", "migrationVersion": { @@ -110,7 +110,7 @@ }, "references": [ { - "id": "metricbeat-*", + "id": "malcolm_beats_*", "name": "kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" } @@ -125,10 +125,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Top Hosts By Memory (Realtime) [Metricbeat System] ECS", + "title": "Top Hosts By Memory (Realtime)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Hosts By Memory (Realtime) [Metricbeat System] ECS\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Top Hosts By Memory (Realtime)\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" }, "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -145,10 +145,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Top Hosts By CPU (Realtime) [Metricbeat System] ECS", + "title": "Top Hosts By CPU (Realtime)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Hosts By CPU (Realtime) [Metricbeat System] ECS\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Top Hosts By CPU (Realtime)\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" }, "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -165,10 +165,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" }, - "title": "Hosts histogram by CPU usage [Metricbeat System] ECS", + "title": "Hosts histogram by CPU usage", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"10% - 15%\": \"rgb(116,196,118)\", \"5% - 10%\": \"rgb(199,233,192)\", \"0% - 5%\": \"rgb(247,252,245)\", \"15% - 20%\": \"rgb(35,139,69)\"}}}", "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"system.cpu.user.pct\", \"customLabel\": \"CPU usage\"}, \"id\": \"1\", \"type\": \"avg\"}, {\"enabled\": true, \"schema\": \"segment\", \"params\": {\"min_doc_count\": 1, \"extended_bounds\": {}, \"field\": \"@timestamp\", \"interval\": \"auto\"}, \"id\": \"2\", \"type\": \"date_histogram\"}, {\"enabled\": true, \"schema\": \"group\", \"params\": {\"size\": 20, \"orderBy\": \"1\", \"field\": \"host.name\", \"customLabel\": \"Hosts\", \"order\": \"desc\"}, \"id\": \"3\", \"type\": \"terms\"}], \"title\": \"Hosts histogram by CPU usage [Metricbeat System] ECS\", \"params\": {\"addTooltip\": true, \"colorsNumber\": 4, \"colorsRange\": [], \"invertColors\": false, \"setColorRange\": false, \"enableHover\": false, \"valueAxes\": [{\"scale\": {\"type\": \"linear\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\", \"labels\": {\"rotate\": 0, \"show\": false, \"color\": \"#555\"}, \"show\": false, \"type\": \"value\"}], \"type\": \"heatmap\", \"times\": [], \"percentageMode\": false, \"colorSchema\": \"Greens\", \"addLegend\": true, \"legendPosition\": \"right\"}, \"type\": \"heatmap\"}" + "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"system.cpu.user.pct\", \"customLabel\": \"CPU usage\"}, \"id\": \"1\", \"type\": \"avg\"}, {\"enabled\": true, \"schema\": \"segment\", \"params\": {\"min_doc_count\": 1, \"extended_bounds\": {}, \"field\": \"@timestamp\", \"interval\": \"auto\"}, \"id\": \"2\", \"type\": \"date_histogram\"}, {\"enabled\": true, \"schema\": \"group\", \"params\": {\"size\": 20, \"orderBy\": \"1\", \"field\": \"host.name\", \"customLabel\": \"Hosts\", \"order\": \"desc\"}, \"id\": \"3\", \"type\": \"terms\"}], \"title\": \"Hosts histogram by CPU usage\", \"params\": {\"addTooltip\": true, \"colorsNumber\": 4, \"colorsRange\": [], \"invertColors\": false, \"setColorRange\": false, \"enableHover\": false, \"valueAxes\": [{\"scale\": {\"type\": \"linear\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\", \"labels\": {\"rotate\": 0, \"show\": false, \"color\": \"#555\"}, \"show\": false, \"type\": \"value\"}], \"type\": \"heatmap\", \"times\": [], \"percentageMode\": false, \"colorSchema\": \"Greens\", \"addLegend\": true, \"legendPosition\": \"right\"}, \"type\": \"heatmap\"}" }, "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", "migrationVersion": { @@ -176,7 +176,7 @@ }, "references": [ { - "id": "metricbeat-*", + "id": "malcolm_beats_*", "name": "kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" } @@ -191,10 +191,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Inbound Traffic [Metricbeat System] ECS", + "title": "Inbound Traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" }, "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -211,10 +211,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Outbound Traffic [Metricbeat System] ECS", + "title": "Outbound Traffic", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic [Metricbeat System] ECS\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"metricbeat-*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" }, "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", "migrationVersion": { @@ -231,10 +231,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Disk used [Metricbeat System] ECS", + "title": "Disk used", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk used [Metricbeat System] ECS\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"filebeat-*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Disk used\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", "migrationVersion": { @@ -251,10 +251,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "Memory Usage Gauge [Metricbeat System] ECS", + "title": "Memory Usage Gauge", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge [Metricbeat System] ECS\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { @@ -271,10 +271,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - "title": "CPU Usage Gauge [Metricbeat System] ECS", + "title": "CPU Usage Gauge", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge [Metricbeat System] ECS\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"metricbeat-*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" }, "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "migrationVersion": { diff --git a/dashboards/dashboards/beats/Packetbeat-dhcpv4.json b/dashboards/dashboards/beats/Packetbeat-dhcpv4.json deleted file mode 100644 index a58ca02b3..000000000 --- a/dashboards/dashboards/beats/Packetbeat-dhcpv4.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Message Types over Time [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"type\": \"metrics\", \"title\": \"Message Types over Time [Packetbeat DHCPv4] ECS\", \"params\": {\"type\": \"timeseries\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"drop_last_bucket\": 1, \"filter\": \"type:dhcpv4\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"background_color_rules\": [{\"id\": \"c2cf4410-8ba8-11e8-ae15-bdcba81344e6\"}], \"ignore_global_filter\": 0, \"show_legend\": 1, \"index_pattern\": \"packetbeat-*\", \"interval\": \"auto\", \"series\": [{\"fill\": 0.5, \"filter\": \"NOT dhcpv4.option.message_type:nak NOT dhcpv4.option.message_type:decline\", \"line_width\": 1, \"seperate_axis\": 0, \"formatter\": \"number\", \"id\": \"8abe6eb0-8ba9-11e8-ae15-bdcba81344e6\", \"metrics\": [{\"type\": \"count\", \"id\": \"8abe6eb1-8ba9-11e8-ae15-bdcba81344e6\"}], \"split_mode\": \"terms\", \"chart_type\": \"line\", \"stacked\": \"none\", \"axis_position\": \"right\", \"color\": \"#68BC00\", \"point_size\": 1, \"terms_field\": \"dhcpv4.option.message_type\", \"label\": \"Response\"}, {\"fill\": 0.5, \"filter\": \"dhcpv4.option.message_type:nak\", \"line_width\": \"4\", \"seperate_axis\": 0, \"formatter\": \"number\", \"id\": \"ae5610d0-8ba9-11e8-ae15-bdcba81344e6\", \"metrics\": [{\"type\": \"count\", \"id\": \"ae5610d1-8ba9-11e8-ae15-bdcba81344e6\"}], \"split_mode\": \"everything\", \"series_drop_last_bucket\": 0, \"chart_type\": \"line\", \"stacked\": \"none\", \"axis_position\": \"right\", \"color\": \"rgba(244,78,59,1)\", \"point_size\": \"3\", \"label\": \"nak\"}, {\"fill\": 0.5, \"filter\": \"dhcpv4.option.message_type:decline\", \"line_width\": \"4\", \"seperate_axis\": 0, \"formatter\": \"number\", \"id\": \"cf7ba180-8ba9-11e8-ae15-bdcba81344e6\", \"metrics\": [{\"type\": \"count\", \"id\": \"cf7ba181-8ba9-11e8-ae15-bdcba81344e6\"}], \"split_mode\": \"everything\", \"series_drop_last_bucket\": 0, \"chart_type\": \"line\", \"stacked\": \"none\", \"axis_position\": \"right\", \"color\": \"rgba(244,78,59,1)\", \"point_size\": \"3\", \"label\": \"decline\"}], \"show_grid\": 1}}" - }, - "id": "8460fcd0-8baa-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"dhcpv4.option.message_type:nak OR dhcpv4.option.message_type:decline\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "title": "NAK and Decline Count [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"NAK and Decline Count [Packetbeat DHCPv4] ECS\", \"params\": {\"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 57}}, \"addLegend\": false, \"addTooltip\": true, \"type\": \"metric\"}}" - }, - "id": "4ad9db20-8bab-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "title": "Message Types [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"field\": \"dhcpv4.op_code\", \"customLabel\": \"Op Code\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"dhcpv4.option.message_type\", \"customLabel\": \"Message Type\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"Message Types [Packetbeat DHCPv4] ECS\", \"params\": {\"labels\": {\"truncate\": 100, \"last_level\": true, \"show\": false, \"values\": true}, \"type\": \"pie\", \"legendPosition\": \"right\", \"isDonut\": true, \"addLegend\": true, \"addTooltip\": true}}" - }, - "id": "418dfbe0-8bac-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "dhcpv4.transaction_id", - "dhcpv4.op_code", - "dhcpv4.option.message_type", - "source.ip", - "destination.ip", - "dhcpv4.client_mac", - "dhcpv4.option.hostname", - "dhcpv4.option.class_identifier" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.dataset\": {\"type\": \"phrase\", \"query\": \"dhcpv4\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"dhcpv4\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"dhcpv4\"}, \"index\": \"packetbeat-*\", \"key\": \"event.dataset\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "DHCPv4 [Packetbeat] ECS", - "version": 1 - }, - "id": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "title": "Transaction Count [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"dhcpv4.transaction_id\", \"customLabel\": \"Unique Transactions\"}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"Transaction Count [Packetbeat DHCPv4] ECS\", \"params\": {\"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 60}}, \"addLegend\": false, \"addTooltip\": true, \"type\": \"metric\"}}" - }, - "id": "d0120dc0-8bac-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "title": "Client Count [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"dhcpv4.client_mac\", \"customLabel\": \"Unique MACs\"}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"Client Count [Packetbeat DHCPv4] ECS\", \"params\": {\"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 60}}, \"addLegend\": false, \"addTooltip\": true, \"type\": \"metric\"}}" - }, - "id": "11d33ea0-8bad-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "b8992150-8ba8-11e8-9676-ef67484126fb-ecs", - "title": "Data Transfer [Packetbeat DHCPv4] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"client.bytes\", \"customLabel\": \"Requests\"}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"2\", \"params\": {\"field\": \"server.bytes\", \"customLabel\": \"Responses\"}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"Data Transfer [Packetbeat DHCPv4] ECS\", \"params\": {\"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 24}}, \"addLegend\": false, \"addTooltip\": true, \"type\": \"metric\"}}" - }, - "id": "f43a8f20-8bb5-11e8-9676-ef67484126fb-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - }, - { - "attributes": { - "description": "DHCPv4 Overview", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"useMargins\": true, \"hidePanelTitles\": false, \"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 9, \"y\": 7, \"i\": \"1\"}, \"version\": \"6.3.0\", \"panelIndex\": \"1\", \"embeddableConfig\": {}, \"id\": \"8460fcd0-8baa-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 8, \"x\": 0, \"h\": 7, \"y\": 0, \"i\": \"2\"}, \"version\": \"6.3.0\", \"panelIndex\": \"2\", \"embeddableConfig\": {}, \"id\": \"4ad9db20-8bab-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 11, \"x\": 37, \"h\": 7, \"y\": 0, \"i\": \"3\"}, \"version\": \"6.3.0\", \"panelIndex\": \"3\", \"embeddableConfig\": {}, \"id\": \"418dfbe0-8bac-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"search\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 14, \"y\": 16, \"i\": \"5\"}, \"version\": \"6.3.0\", \"panelIndex\": \"5\", \"embeddableConfig\": {}, \"id\": \"b8992150-8ba8-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 8, \"x\": 8, \"h\": 7, \"y\": 0, \"i\": \"6\"}, \"version\": \"6.3.0\", \"panelIndex\": \"6\", \"embeddableConfig\": {}, \"id\": \"d0120dc0-8bac-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 8, \"x\": 16, \"h\": 7, \"y\": 0, \"i\": \"7\"}, \"version\": \"6.3.0\", \"panelIndex\": \"7\", \"embeddableConfig\": {}, \"id\": \"11d33ea0-8bad-11e8-9676-ef67484126fb-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 13, \"x\": 24, \"h\": 7, \"y\": 0, \"i\": \"8\"}, \"version\": \"6.3.0\", \"panelIndex\": \"8\", \"embeddableConfig\": {}, \"id\": \"f43a8f20-8bb5-11e8-9676-ef67484126fb-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] DHCPv4 ECS", - "version": 1 - }, - "id": "a7b35890-8baa-11e8-9676-ef67484126fb-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:22.006Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-dns-overview.json b/dashboards/dashboards/beats/Packetbeat-dns-overview.json deleted file mode 100644 index 009aa49e6..000000000 --- a/dashboards/dashboards/beats/Packetbeat-dns-overview.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Query Summary [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"2\", \"params\": {\"field\": \"source.bytes\", \"customLabel\": \"Client Bytes\"}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {\"field\": \"destination.bytes\", \"customLabel\": \"Server Bytes\"}, \"enabled\": true}, {\"type\": \"avg\", \"schema\": \"metric\", \"id\": \"4\", \"params\": {\"field\": \"event.duration\", \"customLabel\": \"Avg Response Time (ns)\"}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"DNS Query Summary [Packetbeat] ECS\", \"params\": {\"type\": \"metric\", \"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 28}}, \"handleNoResults\": true, \"fontSize\": \"17\", \"addLegend\": false, \"addTooltip\": true}}" - }, - "id": "DNS-Query-Summary-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Request Status Over Time [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"colors\": {\"Error\": \"#890F02\", \"OK\": \"#0A50A1\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"status\", \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"area\", \"title\": \"DNS Request Status Over Time [Packetbeat] ECS\", \"params\": {\"type\": \"area\", \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"mode\": \"stacked\"}], \"interpolate\": \"linear\", \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": false, \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "DNS-Request-Status-Over-Time-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Question Types [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.type\", \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"DNS Question Types [Packetbeat] ECS\", \"params\": {\"labels\": {\"truncate\": 100, \"last_level\": true, \"show\": false, \"values\": true}, \"type\": \"pie\", \"shareYAxis\": true, \"legendPosition\": \"right\", \"isDonut\": false, \"addLegend\": true, \"addTooltip\": true}}" - }, - "id": "DNS-Question-Types-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"status\": {\"type\": \"phrase\", \"query\": \"OK\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"OK\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"OK\"}, \"index\": \"packetbeat-*\", \"key\": \"status\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Top 10 Questions [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.name\", \"customLabel\": \"Question\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 30}, \"enabled\": true}], \"type\": \"table\", \"title\": \"DNS Top 10 Questions [Packetbeat] ECS\", \"params\": {\"totalFunc\": \"sum\", \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10, \"showMetricsAtAllLevels\": false}}" - }, - "id": "DNS-Top-10-Questions-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Response Codes [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"dns.response_code\", \"customLabel\": \"Response Code\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"DNS Response Codes [Packetbeat] ECS\", \"params\": {\"totalFunc\": \"sum\", \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10, \"showMetricsAtAllLevels\": false}}" - }, - "id": "DNS-Response-Codes-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Min/Max/Avg Response Time Histogram [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"colors\": {\"Avg Response Time (ns)\": \"#629E51\", \"Max Response Time (ns)\": \"#E24D42\", \"Min Response Time (ns)\": \"#70DBED\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"min\", \"schema\": \"metric\", \"id\": \"4\", \"params\": {\"field\": \"event.duration\", \"customLabel\": \"Min Response Time (ns)\"}, \"enabled\": true}, {\"type\": \"avg\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"event.duration\", \"customLabel\": \"Avg Response Time (ns)\"}, \"enabled\": true}, {\"type\": \"max\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {\"field\": \"event.duration\", \"customLabel\": \"Max Response Time (ns)\"}, \"enabled\": true}], \"type\": \"area\", \"title\": \"DNS Min/Max/Avg Response Time Histogram [Packetbeat] ECS\", \"params\": {\"type\": \"area\", \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"times\": [], \"legendPosition\": \"right\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Average event.duration\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-1\"}], \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": true, \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Min Response Time (ns)\", \"id\": \"4\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}, {\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Avg Response Time (ns)\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}, {\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": true, \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Max Response Time (ns)\", \"id\": \"3\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}], \"addLegend\": true, \"addTooltip\": true, \"addTimeMarker\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}]}}" - }, - "id": "735d25c0-1459-11e9-9de0-f98d1808db8e-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Client and Servers Pie Chart [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"field\": \"destination.ip\", \"customLabel\": \"Server\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"source.ip\", \"customLabel\": \"Client\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"DNS Client and Servers Pie Chart [Packetbeat] ECS\", \"params\": {\"labels\": {\"truncate\": 100, \"last_level\": true, \"show\": false, \"values\": true}, \"type\": \"pie\", \"legendPosition\": \"right\", \"isDonut\": true, \"addLegend\": true, \"addTooltip\": true}}" - }, - "id": "bacb6ed0-1459-11e9-9de0-f98d1808db8e-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "server.ip", - "destination.ip", - "dns.question.name", - "status" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"dns\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"dns\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"dns\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "DNS Protocol [Packetbeat] ECS", - "version": 1 - }, - "id": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 2 - }, - { - "attributes": { - "description": "Overview of DNS request and response metrics.", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "optionsJSON": "{\"useMargins\": true, \"hidePanelTitles\": false, \"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 15, \"y\": 0, \"i\": \"1\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"1\", \"embeddableConfig\": {}, \"id\": \"DNS-Query-Summary-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 0, \"i\": \"2\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"2\", \"embeddableConfig\": {}, \"id\": \"DNS-Request-Status-Over-Time-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 13, \"x\": 0, \"h\": 15, \"y\": 15, \"i\": \"3\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"3\", \"embeddableConfig\": {}, \"id\": \"DNS-Question-Types-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 15, \"y\": 30, \"i\": \"5\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"5\", \"embeddableConfig\": {}, \"id\": \"DNS-Top-10-Questions-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 30, \"i\": \"6\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"6\", \"embeddableConfig\": {}, \"id\": \"DNS-Response-Codes-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 15, \"i\": \"7\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"7\", \"embeddableConfig\": {}, \"id\": \"735d25c0-1459-11e9-9de0-f98d1808db8e-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 11, \"x\": 13, \"h\": 15, \"y\": 15, \"i\": \"8\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"8\", \"embeddableConfig\": {}, \"id\": \"bacb6ed0-1459-11e9-9de0-f98d1808db8e-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] DNS Overview ECS", - "version": 1 - }, - "id": "65120940-1454-11e9-9de0-f98d1808db8e-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-dns-tunneling.json b/dashboards/dashboards/beats/Packetbeat-dns-tunneling.json deleted file mode 100644 index 450f5d37a..000000000 --- a/dashboards/dashboards/beats/Packetbeat-dns-tunneling.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "Unique FQDNs per eTLD+1 ECS", - "uiStateJSON": "{\"vis\": {\"colors\": {\"Count\": \"#1F78C1\", \"Unique count of dns.question.name\": \"#E0752D\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"dns.question.name\", \"customLabel\": \"Unique Subdomain Count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.etld_plus_one\", \"customLabel\": \"Domains\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 20}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"Unique FQDNs per eTLD+1 ECS\", \"listeners\": {}, \"params\": {\"shareYAxis\": true, \"times\": [], \"setYExtents\": false, \"legendPosition\": \"right\", \"mode\": \"grouped\", \"addLegend\": true, \"scale\": \"linear\", \"addTooltip\": true, \"addTimeMarker\": false, \"defaultYExtents\": true, \"yAxis\": {}}}" - }, - "id": "Unique-FQDNs-per-eTLD 1-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:23.036Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "Unique FQDNs per eTLD+1 Table ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.etld_plus_one\", \"customLabel\": \"ETLD+1\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 20}, \"enabled\": true}, {\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {\"field\": \"dns.question.name\", \"customLabel\": \"Unique Domains\"}, \"enabled\": true}], \"type\": \"table\", \"title\": \"Unique FQDNs per eTLD+1 Table ECS\", \"listeners\": {}, \"params\": {\"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10}}" - }, - "id": "Unique-FQDNs-per-eTLD 1-Table-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:23.036Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "Bytes Transferred per Domain ECS", - "uiStateJSON": "{\"vis\": {\"colors\": {\"Count\": \"#1F78C1\", \"Bytes In\": \"#F2C96D\", \"Unique count of dns.question.name\": \"#E0752D\", \"Bytes Out\": \"#629E51\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"destination.bytes\", \"customLabel\": \"Bytes Out\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.etld_plus_one\", \"customLabel\": \"Domains\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 20}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {\"field\": \"source.bytes\", \"customLabel\": \"Bytes In\"}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"Bytes Transferred per Domain ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"normal\", \"data\": {\"label\": \"Bytes Out\", \"id\": \"1\"}}, {\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": true, \"mode\": \"normal\", \"data\": {\"label\": \"Bytes In\", \"id\": \"3\"}}], \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": true, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"grouped\", \"defaultYExtents\": true}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"grouped\", \"legendPosition\": \"right\"}}" - }, - "id": "Bytes-Transferred-per-Domain-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:23.036Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"type:dns\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "Top Domains by Data Volume ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"source.bytes\", \"customLabel\": \"Bytes In\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"dns.question.etld_plus_one\", \"customLabel\": \"ETLD+1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"3\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 20}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {\"field\": \"destination.bytes\", \"customLabel\": \"Bytes Out\"}, \"enabled\": true}], \"type\": \"table\", \"title\": \"Top Domains by Data Volume ECS\", \"params\": {\"totalFunc\": \"sum\", \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10, \"showMetricsAtAllLevels\": false}}" - }, - "id": "dc743240-1665-11e7-a6de-cbac1a3d0a7d-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:23.036Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "server.ip", - "destination.ip", - "dns.question.name", - "status" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"dns\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"dns\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"dns\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "DNS Protocol [Packetbeat] ECS", - "version": 1 - }, - "id": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 2 - }, - { - "attributes": { - "description": "Detecting tunneling over DNS.", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"NOT dns.question.type:PTR\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 20, \"y\": 0, \"i\": \"1\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"1\", \"embeddableConfig\": {\"spy\": {\"mode\": {\"name\": null, \"fill\": false}}, \"vis\": {\"legendOpen\": false, \"colors\": {\"Count\": \"#1F78C1\", \"Unique Subdomain Count\": \"#EF843C\", \"Unique count of dns.question.name\": \"#E0752D\"}}}, \"id\": \"Unique-FQDNs-per-eTLD 1-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 20, \"y\": 35, \"i\": \"2\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"2\", \"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"id\": \"Unique-FQDNs-per-eTLD 1-Table-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 15, \"y\": 20, \"i\": \"4\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"4\", \"embeddableConfig\": {\"vis\": {\"legendOpen\": false}}, \"id\": \"Bytes-Transferred-per-Domain-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 20, \"y\": 35, \"i\": \"5\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"5\", \"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"id\": \"dc743240-1665-11e7-a6de-cbac1a3d0a7d-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] DNS Tunneling ECS", - "version": 1 - }, - "id": "DNS-Unique-Domains-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:23.036Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-flows.json b/dashboards/dashboards/beats/Packetbeat-flows.json deleted file mode 100644 index dcbcc3f7d..000000000 --- a/dashboards/dashboards/beats/Packetbeat-flows.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Flows-Search-ecs", - "title": "Top Hosts Creating Traffic [Packetbeat Flows] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"source.bytes\", \"customLabel\": \"Source Bytes\"}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"source.ip\", \"customLabel\": \"Source IP\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"area\", \"title\": \"Top Hosts Creating Traffic [Packetbeat Flows] ECS\", \"params\": {\"type\": \"area\", \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"data\": {\"label\": \"Source Bytes\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"mode\": \"stacked\"}], \"interpolate\": \"linear\", \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": true, \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Top-hosts-creating-traffic-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Navigation [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"type\": \"markdown\", \"title\": \"Navigation [Packetbeat] ECS\", \"params\": {\"fontSize\": 10, \"openLinksInNewTab\": false, \"markdown\": \"### Packetbeat:\\n\\n[Overview](#/dashboard/Packetbeat-Dashboard-ecs)\\n\\n[Network Flows](#/dashboard/Packetbeat-Flows-ecs)\\n\\n[DNS Overview](#/dashboard/65120940-1454-11e9-9de0-f98d1808db8e-ecs) | [Tunneling](#/dashboard/DNS-Unique-Domains-ecs)\\n\\n[DHCPv4 Transactions](#/dashboard/a7b35890-8baa-11e8-9676-ef67484126fb-ecs)\\n\\n[TLS Overview](#/dashboard/tls-sessions-ecs)\\n\\n[HTTP transactions](#/dashboard/Packetbeat-HTTP-ecs)\\n\\nDatabases: [MySQL](#/dashboard/Packetbeat-MySQL-performance-ecs) | [PostgreSQL](#/dashboard/Packetbeat-PgSQL-performance-ecs) | [MongoDB](#/dashboard/Packetbeat-MongoDB-performance-ecs) | [Cassandra](#/dashboard/Packetbeat-Cassandra-ecs)\\n\\nRPC: [Thrift](#/dashboard/Packetbeat-Thrift-performance-ecs)\\n\\nStorage: [NFS](#/dashboard/Packetbeat-NFS-ecs)\"}}" - }, - "id": "Navigation-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:18:59.372Z", - "version": 11 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Flows-Search-ecs", - "title": "Connections over time [Packetbeat Flows] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"flow.id\", \"customLabel\": \"Unique Flows\"}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}], \"type\": \"area\", \"title\": \"Connections over time [Packetbeat Flows] ECS\", \"params\": {\"type\": \"area\", \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"data\": {\"label\": \"Unique Flows\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"mode\": \"stacked\"}], \"interpolate\": \"linear\", \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": true, \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Connections-over-time-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Flows-Search-ecs", - "title": "Top Hosts Receiving Traffic [Packetbeat Flows] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"destination.bytes\", \"customLabel\": \"Destination Bytes\"}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"destination.ip\", \"customLabel\": \"Destination IP\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"area\", \"title\": \"Top Hosts Receiving Traffic [Packetbeat Flows] ECS\", \"params\": {\"type\": \"area\", \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"data\": {\"label\": \"Destination Bytes\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"mode\": \"stacked\"}], \"interpolate\": \"linear\", \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": true, \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Top-hosts-receiving-traffic-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Flows-Search-ecs", - "title": "Network Traffic Between Hosts [Packetbeat Flows] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"source.bytes\", \"customLabel\": \"Source Bytes\"}, \"enabled\": true}, {\"type\": \"sum\", \"schema\": \"metric\", \"id\": \"2\", \"params\": {\"field\": \"destination.bytes\", \"customLabel\": \"Destination Bytes\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"field\": \"source.ip\", \"customLabel\": \"Source IP\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"field\": \"destination.ip\", \"customLabel\": \"Destination IP\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"Network Traffic Between Hosts [Packetbeat Flows] ECS\", \"params\": {\"totalFunc\": \"sum\", \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10, \"showMetricsAtAllLevels\": false}}" - }, - "id": "Network-traffic-between-your-hosts-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "type", - "event.start", - "event.end", - "source.ip", - "source.port", - "destination.ip", - "destination.port", - "source.bytes", - "destination.bytes" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"type: flow\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Flows Search [Packetbeat] ECS", - "version": 1 - }, - "id": "Packetbeat-Flows-Search-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelIndex\": \"1\", \"type\": \"visualization\", \"id\": \"Top-hosts-creating-traffic-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 35, \"y\": 25, \"i\": \"1\"}}, {\"panelIndex\": \"2\", \"type\": \"visualization\", \"id\": \"Navigation-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 20, \"y\": 0, \"i\": \"2\"}}, {\"panelIndex\": \"3\", \"type\": \"visualization\", \"id\": \"Connections-over-time-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 36, \"x\": 12, \"h\": 25, \"y\": 0, \"i\": \"3\"}}, {\"panelIndex\": \"4\", \"type\": \"visualization\", \"id\": \"Top-hosts-receiving-traffic-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 35, \"y\": 25, \"i\": \"4\"}}, {\"type\": \"visualization\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 35, \"y\": 60, \"i\": \"5\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"5\", \"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"id\": \"Network-traffic-between-your-hosts-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] Flows ECS", - "version": 1 - }, - "id": "Packetbeat-Flows-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:25.168Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-http.json b/dashboards/dashboards/beats/Packetbeat-http.json deleted file mode 100644 index d72cad1ac..000000000 --- a/dashboards/dashboards/beats/Packetbeat-http.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "title": "HTTP Transactions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"HTTP Transactions [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": false, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Web-transactions-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:21:31.922Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"http\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"http\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"http\"}, \"index\": \"packetbeat-*\", \"key\": \"type\", \"disabled\": false}}], \"query\": {\"query\": \"http.response.status_code >= 300\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "HTTP error codes [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"type\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"http.response.status_code\", \"customLabel\": \"HTTP Status Code\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"HTTP error codes [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Unique count of type\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": false, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "HTTP-error-codes-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"http\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"http\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"http\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}, {\"$state\": {\"store\": \"appState\"}, \"range\": {\"http.response.status_code\": {\"gte\": 200, \"lte\": 299}}, \"meta\": {\"type\": \"range\", \"value\": \"200 to 299\", \"alias\": null, \"negate\": true, \"params\": {\"gte\": 200, \"lt\": 299}, \"index\": \"packetbeat-*\", \"key\": \"http.response.status_code\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "HTTP error codes evolution [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"http.response.status_code\", \"customLabel\": \"HTTP Status Code\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"line\", \"title\": \"HTTP error codes evolution [Packetbeat] ECS\", \"params\": {\"type\": \"line\", \"defaultYExtents\": false, \"interpolate\": \"linear\", \"shareYAxis\": true, \"drawLinesBetweenPoints\": true, \"addLegend\": true, \"addTooltip\": true, \"seriesParams\": [{\"type\": \"line\", \"radiusRatio\": 9, \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"interpolate\": \"linear\", \"showCircles\": true, \"mode\": \"normal\"}], \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"radiusRatio\": 9, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": false, \"showCircles\": true, \"addTimeMarker\": false, \"legendPosition\": \"right\"}}" - }, - "id": "HTTP-error-codes-evolution-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Navigation [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"type\": \"markdown\", \"title\": \"Navigation [Packetbeat] ECS\", \"params\": {\"fontSize\": 10, \"openLinksInNewTab\": false, \"markdown\": \"### Packetbeat:\\n\\n[Overview](#/dashboard/Packetbeat-Dashboard-ecs)\\n\\n[Network Flows](#/dashboard/Packetbeat-Flows-ecs)\\n\\n[DNS Overview](#/dashboard/65120940-1454-11e9-9de0-f98d1808db8e-ecs) | [Tunneling](#/dashboard/DNS-Unique-Domains-ecs)\\n\\n[DHCPv4 Transactions](#/dashboard/a7b35890-8baa-11e8-9676-ef67484126fb-ecs)\\n\\n[TLS Overview](#/dashboard/tls-sessions-ecs)\\n\\n[HTTP transactions](#/dashboard/Packetbeat-HTTP-ecs)\\n\\nDatabases: [MySQL](#/dashboard/Packetbeat-MySQL-performance-ecs) | [PostgreSQL](#/dashboard/Packetbeat-PgSQL-performance-ecs) | [MongoDB](#/dashboard/Packetbeat-MongoDB-performance-ecs) | [Cassandra](#/dashboard/Packetbeat-Cassandra-ecs)\\n\\nRPC: [Thrift](#/dashboard/Packetbeat-Thrift-performance-ecs)\\n\\nStorage: [NFS](#/dashboard/Packetbeat-NFS-ecs)\"}}" - }, - "id": "Navigation-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:18:59.372Z", - "version": 11 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "title": "Total number of HTTP transactions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"Total number of HTTP transactions [Packetbeat] ECS\", \"params\": {\"type\": \"metric\", \"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 60}}, \"handleNoResults\": true, \"fontSize\": \"37\", \"addLegend\": false, \"addTooltip\": true}}" - }, - "id": "Total-number-of-HTTP-transactions-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "title": "HTTP status codes for the top queries [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"split\", \"id\": \"2\", \"params\": {\"field\": \"query\", \"customLabel\": \"HTTP Query\", \"order\": \"desc\", \"row\": false, \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"field\": \"http.response.status_code\", \"customLabel\": \"HTTP Status Code\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"orderBy\": \"1\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 10}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"HTTP status codes for the top queries [Packetbeat] ECS\", \"params\": {\"labels\": {\"truncate\": 100, \"last_level\": true, \"show\": false, \"values\": true}, \"type\": \"pie\", \"shareYAxis\": true, \"legendPosition\": \"right\", \"isDonut\": false, \"addLegend\": true, \"addTooltip\": true}}" - }, - "id": "HTTP-codes-for-the-top-queries-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "title": "Top 10 HTTP requests [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"field\": \"url.full\", \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"Top 10 HTTP requests [Packetbeat] ECS\", \"params\": {\"totalFunc\": \"sum\", \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10, \"showMetricsAtAllLevels\": false}}" - }, - "id": "Top-10-HTTP-requests-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"http\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"http\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"http\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "HTTP Transactions Search [Packetbeat] ECS", - "version": 1 - }, - "id": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "type": "search", - "updated_at": "2019-01-19T00:21:43.886Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelIndex\": \"1\", \"type\": \"visualization\", \"id\": \"Web-transactions-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 36, \"x\": 12, \"h\": 20, \"y\": 0, \"i\": \"1\"}}, {\"panelIndex\": \"2\", \"type\": \"visualization\", \"id\": \"HTTP-error-codes-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 15, \"y\": 35, \"i\": \"2\"}}, {\"panelIndex\": \"3\", \"type\": \"visualization\", \"id\": \"HTTP-error-codes-evolution-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 35, \"i\": \"3\"}}, {\"panelIndex\": \"4\", \"type\": \"visualization\", \"id\": \"Navigation-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 20, \"y\": 0, \"i\": \"4\"}}, {\"type\": \"visualization\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 15, \"y\": 20, \"i\": \"5\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"5\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"id\": \"Total-number-of-HTTP-transactions-ecs\"}, {\"panelIndex\": \"6\", \"type\": \"visualization\", \"id\": \"HTTP-codes-for-the-top-queries-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 36, \"x\": 12, \"h\": 15, \"y\": 20, \"i\": \"6\"}}, {\"type\": \"visualization\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 25, \"y\": 50, \"i\": \"7\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"7\", \"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"id\": \"Top-10-HTTP-requests-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] HTTP ECS", - "version": 1 - }, - "id": "Packetbeat-HTTP-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:26.207Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-overview.json b/dashboards/dashboards/beats/Packetbeat-overview.json deleted file mode 100644 index 09bc6ffd6..000000000 --- a/dashboards/dashboards/beats/Packetbeat-overview.json +++ /dev/null @@ -1,336 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "title": "HTTP Transactions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"HTTP Transactions [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": false, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Web-transactions-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:21:31.922Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.type\": {\"type\": \"phrase\", \"query\": \"flow\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"flow\", \"alias\": null, \"negate\": true, \"params\": {\"type\": \"phrase\", \"query\": \"flow\"}, \"index\": \"packetbeat-*\", \"key\": \"event.type\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "Transaction Types [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"event.dataset\", \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"Transaction Types [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "DB-transactions-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:20:54.634Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Search-ecs", - "title": "Response times percentiles [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"percentiles\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"event.duration\", \"percents\": [75, 95, 99]}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}], \"type\": \"line\", \"title\": \"Response times percentiles [Packetbeat] ECS\", \"params\": {\"type\": \"line\", \"defaultYExtents\": false, \"interpolate\": \"linear\", \"shareYAxis\": true, \"drawLinesBetweenPoints\": true, \"addLegend\": true, \"addTooltip\": true, \"seriesParams\": [{\"type\": \"line\", \"radiusRatio\": 9, \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Percentiles of event.duration\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"interpolate\": \"cardinal\", \"showCircles\": true, \"mode\": \"normal\"}], \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"radiusRatio\": 9, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Percentiles of event.duration\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": true, \"showCircles\": true, \"addTimeMarker\": false, \"legendPosition\": \"right\"}}" - }, - "id": "Response-times-percentiles-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:01:49.340Z", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": []}" - }, - "savedSearchId": "Transactions-errors-ecs", - "title": "Errors count over time ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"params\": {}, \"id\": \"1\"}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"30s\", \"min_doc_count\": 1, \"interval\": \"custom\", \"extended_bounds\": {}}, \"id\": \"2\"}, {\"type\": \"terms\", \"schema\": \"group\", \"params\": {\"field\": \"type\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"id\": \"3\"}], \"type\": \"histogram\", \"title\": \"New Visualization ECS\", \"listeners\": {}, \"params\": {\"shareYAxis\": true, \"times\": [], \"setYExtents\": false, \"defaultYExtents\": false, \"addLegend\": true, \"scale\": \"linear\", \"addTooltip\": true, \"addTimeMarker\": false, \"mode\": \"stacked\", \"yAxis\": {}}}" - }, - "id": "Errors-count-over-time-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:30.350Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Search-ecs", - "title": "Errors vs successful transactions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"status\", \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"size\": 5}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"Errors vs successful transactions [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"percentage\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"percentage\", \"legendPosition\": \"right\"}}" - }, - "id": "Errors-vs-successful-transactions-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:02:24.071Z", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Search-ecs", - "title": "Latency Histogram [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"event.duration\", \"extended_bounds\": {}, \"interval\": 10000000}, \"enabled\": true}], \"type\": \"area\", \"title\": \"Latency Histogram [Packetbeat] ECS\", \"params\": {\"type\": \"area\", \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"mode\": \"stacked\"}], \"interpolate\": \"linear\", \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"smoothLines\": true, \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Latency-histogram-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:03:54.084Z", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "Client IP Locations (requires GeoIP enrichment) [Packetbeat] ECS", - "uiStateJSON": "{\"mapCenter\": [0, -0.17578125]}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"geohash_grid\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"useGeocentroid\": true, \"field\": \"client.geo.location\", \"mapCenter\": {\"lat\": -0.17578097424708533, \"lon\": 0}, \"autoPrecision\": true, \"mapZoom\": 2, \"mapBounds\": {\"bottom_right\": {\"lat\": -84.0160220686566, \"lon\": 259.80468750000006}, \"top_left\": {\"lat\": 83.97925949886205, \"lon\": -259.80468750000006}}, \"isFilteredByCollar\": true, \"precision\": 2}, \"enabled\": true}], \"type\": \"tile_map\", \"title\": \"Client IP Locations (requires GeoIP enrichment) [Packetbeat] ECS\", \"params\": {\"heatClusterSize\": 1.5, \"addTooltip\": true, \"heatMaxZoom\": 16, \"heatRadius\": 25, \"heatMinOpacity\": 0.1, \"mapZoom\": 2, \"mapCenter\": [15, 5], \"wms\": {\"selectedTmsLayer\": {\"maxZoom\": 18, \"attribution\": \"

© OpenStreetMap contributors | Elastic Maps Service

\", \"minZoom\": 0, \"origin\": \"elastic_maps_service\", \"id\": \"road_map\"}, \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\", \"options\": {\"attribution\": \"Maps provided by USGS\", \"styles\": \"\", \"transparent\": true, \"format\": \"image/png\", \"layers\": \"0\", \"version\": \"1.3.0\"}, \"enabled\": false}, \"heatNormalizeData\": true, \"colorSchema\": \"Yellow to Red\", \"isDesaturated\": true, \"mapType\": \"Scaled Circle Markers\", \"heatBlur\": 15, \"legendPosition\": \"bottomright\"}}" - }, - "id": "Client-locations-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:52:42.404Z", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "Packetbeat-Search-ecs", - "title": "Response times repartition [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"histogram\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"event.duration\", \"extended_bounds\": {}, \"interval\": 10000000}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"Response times repartition [Packetbeat] ECS\", \"params\": {\"type\": \"histogram\", \"seriesParams\": [{\"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\", \"show\": \"true\", \"mode\": \"stacked\", \"data\": {\"label\": \"Count\", \"id\": \"1\"}}], \"shareYAxis\": true, \"addLegend\": true, \"addTooltip\": true, \"defaultYExtents\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}], \"yAxis\": {}, \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"setYExtents\": false, \"scale\": \"linear\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"setYExtents\": false, \"mode\": \"normal\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\"}], \"times\": [], \"addTimeMarker\": false, \"mode\": \"stacked\", \"legendPosition\": \"right\"}}" - }, - "id": "Response-times-repartition-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:00:32.530Z", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Navigation [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"type\": \"markdown\", \"title\": \"Navigation [Packetbeat] ECS\", \"params\": {\"fontSize\": 10, \"openLinksInNewTab\": false, \"markdown\": \"### Packetbeat:\\n\\n[Overview](#/dashboard/Packetbeat-Dashboard-ecs)\\n\\n[Network Flows](#/dashboard/Packetbeat-Flows-ecs)\\n\\n[DNS Overview](#/dashboard/65120940-1454-11e9-9de0-f98d1808db8e-ecs) | [Tunneling](#/dashboard/DNS-Unique-Domains-ecs)\\n\\n[DHCPv4 Transactions](#/dashboard/a7b35890-8baa-11e8-9676-ef67484126fb-ecs)\\n\\n[TLS Overview](#/dashboard/tls-sessions-ecs)\\n\\n[HTTP transactions](#/dashboard/Packetbeat-HTTP-ecs)\\n\\nDatabases: [MySQL](#/dashboard/Packetbeat-MySQL-performance-ecs) | [PostgreSQL](#/dashboard/Packetbeat-PgSQL-performance-ecs) | [MongoDB](#/dashboard/Packetbeat-MongoDB-performance-ecs) | [Cassandra](#/dashboard/Packetbeat-Cassandra-ecs)\\n\\nRPC: [Thrift](#/dashboard/Packetbeat-Thrift-performance-ecs)\\n\\nStorage: [NFS](#/dashboard/Packetbeat-NFS-ecs)\"}}" - }, - "id": "Navigation-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:18:59.372Z", - "version": 11 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "title": "DNS Transactions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"avg\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"event.duration\", \"customLabel\": \"Avg Response Time\"}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"min_doc_count\": 1, \"useNormalizedEsInterval\": true, \"drop_partials\": false, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"count\", \"schema\": \"metric\", \"id\": \"3\", \"params\": {}, \"enabled\": true}], \"type\": \"area\", \"title\": \"DNS Transactions [Packetbeat] ECS\", \"params\": {\"type\": \"area\", \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"times\": [], \"legendPosition\": \"right\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Avg Response Time\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-1\"}, {\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"RightAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"right\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-2\"}], \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"cardinal\", \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Avg Response Time\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}, {\"type\": \"line\", \"interpolate\": \"cardinal\", \"show\": true, \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Count\", \"id\": \"3\"}, \"valueAxis\": \"ValueAxis-2\", \"showCircles\": true, \"lineWidth\": 3.5, \"mode\": \"stacked\"}], \"addLegend\": true, \"addTooltip\": true, \"addTimeMarker\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}]}}" - }, - "id": "e3f09730-1b80-11e9-83df-75eebb35951e-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:29:49.161Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Sessions [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"legendOpen\": false, \"colors\": {\"true\": \"#7EB26D\", \"false\": \"#E24D42\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"customLabel\": \"Sessions per minute\", \"min_doc_count\": 1, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"tls.established\", \"customLabel\": \"Handshake completed\", \"order\": \"desc\", \"orderBy\": \"1\", \"size\": 5, \"json\": \"\"}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"TLS Sessions ECS\", \"params\": {\"type\": \"histogram\", \"grid\": {\"style\": {\"color\": \"#eee\"}, \"valueAxis\": \"ValueAxis-1\", \"categoryLines\": false}, \"times\": [], \"legendPosition\": \"right\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-1\"}], \"seriesParams\": [{\"type\": \"histogram\", \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}], \"addLegend\": true, \"addTooltip\": true, \"addTimeMarker\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}]}}" - }, - "id": "059fe5e0-d2dd-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"http\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"http\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"http\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "HTTP Transactions Search [Packetbeat] ECS", - "version": 1 - }, - "id": "71908f00-88ca-11e7-ad9c-db80de0bf8d3-ecs", - "type": "search", - "updated_at": "2019-01-19T00:21:43.886Z", - "version": 3 - }, - { - "attributes": { - "columns": [ - "client.ip", - "client.port", - "server.ip", - "server.port", - "event.dataset", - "query", - "method", - "event.duration", - "status" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.dataset\": {\"type\": \"phrase\", \"query\": \"flow\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"flow\", \"alias\": null, \"negate\": true, \"params\": {\"type\": \"phrase\", \"query\": \"flow\"}, \"index\": \"packetbeat-*\", \"key\": \"event.dataset\", \"disabled\": false}}], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Packetbeat Search ECS", - "version": 1 - }, - "id": "Packetbeat-Search-ecs", - "type": "search", - "updated_at": "2019-01-19T00:01:10.720Z", - "version": 2 - }, - { - "attributes": { - "columns": [ - "client.ip", - "client.port", - "server.ip", - "server.port", - "event.dataset", - "query", - "method", - "event.duration", - "status" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.dataset\": {\"type\": \"phrase\", \"query\": \"flow\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"flow\", \"alias\": null, \"negate\": true, \"params\": {\"type\": \"phrase\", \"query\": \"flow\"}, \"index\": \"packetbeat-*\", \"key\": \"event.dataset\", \"disabled\": false}}, {\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"status\": {\"type\": \"phrase\", \"query\": \"OK\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"OK\", \"alias\": null, \"negate\": true, \"params\": {\"type\": \"phrase\", \"query\": \"OK\"}, \"index\": \"packetbeat-*\", \"key\": \"status\", \"disabled\": false}}], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Transactions Errors Search [Packetbeat] ECS", - "version": 1 - }, - "id": "Transactions-errors-ecs", - "type": "search", - "updated_at": "2019-01-19T00:05:18.965Z", - "version": 3 - }, - { - "attributes": { - "columns": [ - "server.ip", - "destination.ip", - "dns.question.name", - "status" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"highlight\": {\"post_tags\": [\"@/kibana-highlighted-field@\"], \"require_field_match\": false, \"fragment_size\": 2147483647, \"pre_tags\": [\"@kibana-highlighted-field@\"], \"fields\": {\"*\": {}}}, \"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"network.protocol\": {\"type\": \"phrase\", \"query\": \"dns\"}}}, \"meta\": {\"type\": \"phrase\", \"value\": \"dns\", \"alias\": null, \"negate\": false, \"params\": {\"type\": \"phrase\", \"query\": \"dns\"}, \"index\": \"packetbeat-*\", \"key\": \"network.protocol\", \"disabled\": false}}], \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "DNS Protocol [Packetbeat] ECS", - "version": 1 - }, - "id": "d19e8485-7df5-47ce-8009-9dc3c42bcf17-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:24.089Z", - "version": 2 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.established\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": \"TLS sessions\", \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.established\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Sessions [Packetbeat] ECS", - "version": 1 - }, - "id": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "Packetbeat overview dashboard.", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelIndex\": \"1\", \"type\": \"visualization\", \"id\": \"Web-transactions-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 12, \"x\": 12, \"h\": 10, \"y\": 20, \"i\": \"1\"}}, {\"panelIndex\": \"2\", \"type\": \"visualization\", \"id\": \"DB-transactions-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 12, \"x\": 36, \"h\": 10, \"y\": 20, \"i\": \"2\"}}, {\"panelIndex\": \"5\", \"type\": \"visualization\", \"id\": \"Response-times-percentiles-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 15, \"y\": 45, \"i\": \"5\"}}, {\"panelIndex\": \"6\", \"type\": \"visualization\", \"id\": \"Errors-count-over-time-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 0, \"h\": 15, \"y\": 60, \"i\": \"6\"}}, {\"panelIndex\": \"7\", \"type\": \"visualization\", \"id\": \"Errors-vs-successful-transactions-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 45, \"i\": \"7\"}}, {\"panelIndex\": \"8\", \"type\": \"visualization\", \"id\": \"Latency-histogram-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 24, \"x\": 24, \"h\": 15, \"y\": 60, \"i\": \"8\"}}, {\"type\": \"visualization\", \"gridData\": {\"w\": 36, \"x\": 12, \"h\": 20, \"y\": 0, \"i\": \"9\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"9\", \"embeddableConfig\": {\"mapCollar\": {\"bottom_right\": {\"lat\": -90, \"lon\": 180}, \"zoom\": 2, \"top_left\": {\"lat\": 90, \"lon\": -180}}, \"mapZoom\": 2, \"mapBounds\": {\"bottom_right\": {\"lat\": -54.97761367069625, \"lon\": 153.984375}, \"top_left\": {\"lat\": 54.97761367069628, \"lon\": -153.984375}}}, \"id\": \"Client-locations-ecs\"}, {\"panelIndex\": \"10\", \"type\": \"visualization\", \"id\": \"Response-times-repartition-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 48, \"x\": 0, \"h\": 15, \"y\": 30, \"i\": \"10\"}}, {\"panelIndex\": \"11\", \"type\": \"visualization\", \"id\": \"Navigation-ecs\", \"version\": \"7.0.0-SNAPSHOT\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 20, \"y\": 0, \"i\": \"11\"}}, {\"type\": \"visualization\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 10, \"y\": 20, \"i\": \"12\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"12\", \"embeddableConfig\": {}, \"id\": \"e3f09730-1b80-11e9-83df-75eebb35951e-ecs\"}, {\"type\": \"visualization\", \"gridData\": {\"w\": 12, \"x\": 24, \"h\": 10, \"y\": 20, \"i\": \"13\"}, \"version\": \"7.0.0-SNAPSHOT\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"id\": \"059fe5e0-d2dd-11e7-9914-4982455b3063-ecs\"}]", - "timeRestore": false, - "title": "[Packetbeat] Overview ECS", - "version": 1 - }, - "id": "Packetbeat-Dashboard-ecs", - "type": "dashboard", - "updated_at": "2019-01-19T00:31:53.357Z", - "version": 5 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Packetbeat-tls.json b/dashboards/dashboards/beats/Packetbeat-tls.json deleted file mode 100644 index 437bf58d5..000000000 --- a/dashboards/dashboards/beats/Packetbeat-tls.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Navigation [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"type\": \"markdown\", \"title\": \"Navigation [Packetbeat] ECS\", \"params\": {\"fontSize\": 10, \"openLinksInNewTab\": false, \"markdown\": \"### Packetbeat:\\n\\n[Overview](#/dashboard/Packetbeat-Dashboard-ecs)\\n\\n[Network Flows](#/dashboard/Packetbeat-Flows-ecs)\\n\\n[DNS Overview](#/dashboard/65120940-1454-11e9-9de0-f98d1808db8e-ecs) | [Tunneling](#/dashboard/DNS-Unique-Domains-ecs)\\n\\n[DHCPv4 Transactions](#/dashboard/a7b35890-8baa-11e8-9676-ef67484126fb-ecs)\\n\\n[TLS Overview](#/dashboard/tls-sessions-ecs)\\n\\n[HTTP transactions](#/dashboard/Packetbeat-HTTP-ecs)\\n\\nDatabases: [MySQL](#/dashboard/Packetbeat-MySQL-performance-ecs) | [PostgreSQL](#/dashboard/Packetbeat-PgSQL-performance-ecs) | [MongoDB](#/dashboard/Packetbeat-MongoDB-performance-ecs) | [Cassandra](#/dashboard/Packetbeat-Cassandra-ecs)\\n\\nRPC: [Thrift](#/dashboard/Packetbeat-Thrift-performance-ecs)\\n\\nStorage: [NFS](#/dashboard/Packetbeat-NFS-ecs)\"}}" - }, - "id": "Navigation-ecs", - "type": "visualization", - "updated_at": "2019-01-19T00:18:59.372Z", - "version": 11 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Sessions [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"legendOpen\": false, \"colors\": {\"true\": \"#7EB26D\", \"false\": \"#E24D42\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"@timestamp\", \"customInterval\": \"2h\", \"customLabel\": \"Sessions per minute\", \"min_doc_count\": 1, \"interval\": \"auto\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"field\": \"tls.established\", \"customLabel\": \"Handshake completed\", \"order\": \"desc\", \"orderBy\": \"1\", \"size\": 5, \"json\": \"\"}, \"enabled\": true}], \"type\": \"histogram\", \"title\": \"TLS Sessions ECS\", \"params\": {\"type\": \"histogram\", \"grid\": {\"style\": {\"color\": \"#eee\"}, \"valueAxis\": \"ValueAxis-1\", \"categoryLines\": false}, \"times\": [], \"legendPosition\": \"right\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-1\"}], \"seriesParams\": [{\"type\": \"histogram\", \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}], \"addLegend\": true, \"addTooltip\": true, \"addTimeMarker\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}]}}" - }, - "id": "059fe5e0-d2dd-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"query\": {\"exists\": {\"field\": \"tls\"}}, \"meta\": {\"type\": \"custom\", \"value\": \"{\\\"exists\\\":{\\\"field\\\":\\\"tls\\\"}}\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"query\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "TLS Alerts [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"colors\": {\"None\": \"#7EB26D\", \"handshake_failure\": \"#E24D42\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"tls.detailed.alert_types\", \"orderBy\": \"1\", \"order\": \"desc\", \"json\": \"{\\\"missing\\\": \\\"None\\\"}\", \"size\": 5, \"include\": \".*\"}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"TLS Alerts ECS\", \"params\": {\"type\": \"pie\", \"addLegend\": true, \"addTooltip\": true, \"legendPosition\": \"right\", \"isDonut\": true}}" - }, - "id": "c14377a0-d353-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.established\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.established\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"index\": \"packetbeat-*\"}" - }, - "title": "Total Number of TLS Sessions [Packetbeat] ECS", - "uiStateJSON": "{\"P-7\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-5\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}], \"type\": \"metric\", \"title\": \"Total Number of TLS Sessions ECS\", \"params\": {\"metric\": {\"labels\": {\"show\": true}, \"colorSchema\": \"Green to Red\", \"useRanges\": false, \"invertColors\": false, \"percentageMode\": false, \"metricColorMode\": \"None\", \"colorsRange\": [{\"from\": 0, \"to\": 10000}], \"style\": {\"bgColor\": false, \"bgFill\": \"#000\", \"labelColor\": false, \"subText\": \"\", \"fontSize\": 60}}, \"addLegend\": false, \"addTooltip\": true, \"type\": \"metric\"}}" - }, - "id": "061de380-d361-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "94908e80-d2d8-11e7-9914-4982455b3063-ecs", - "title": "TLS Server Name Indication [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"tls.client.server_name\", \"customLabel\": \"Server Name Indication\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"tagcloud\", \"title\": \"TLS Server Name Indication ECS\", \"params\": {\"maxFontSize\": 64, \"hideLabel\": false, \"scale\": \"linear\", \"orientation\": \"single\", \"minFontSize\": 14}}" - }, - "id": "a28d09d0-d361-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "bf3d23b0-d37c-11e7-9914-4982455b3063-ecs", - "title": "TLS Versions [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"tls.detailed.version\", \"customLabel\": \"TLS version\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"TLS Versions ECS\", \"params\": {\"type\": \"pie\", \"addLegend\": true, \"addTooltip\": true, \"legendPosition\": \"right\", \"isDonut\": true}}" - }, - "id": "0af0b790-d37d-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "8f0ff590-d37d-11e7-9914-4982455b3063-ecs", - "title": "TLS Server Public Key Size [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"tls.detailed.server_certificate.public_key_size\", \"customLabel\": \"Public Key Size\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"Server Public Key Size ECS\", \"params\": {\"type\": \"pie\", \"addLegend\": true, \"addTooltip\": true, \"legendPosition\": \"right\", \"isDonut\": true}}" - }, - "id": "ae6e33c0-d37d-11e7-9914-4982455b3063-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Session Resume [Packetbeat] ECS", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"tls.detailed.resumption_method\", \"size\": 5, \"orderBy\": \"1\", \"order\": \"desc\", \"missingBucketLabel\": \"Missing\", \"exclude\": \"\", \"otherBucketLabel\": \"Other\", \"missingBucket\": false, \"otherBucket\": false, \"json\": \"{\\n\\\"missing\\\": \\\"none\\\"\\n}\"}, \"enabled\": true}], \"type\": \"pie\", \"title\": \"TLS Session Resume [Packetbeat] ECS\", \"params\": {\"labels\": {\"truncate\": 100, \"last_level\": true, \"show\": false, \"values\": true}, \"type\": \"pie\", \"legendPosition\": \"right\", \"isDonut\": true, \"addLegend\": true, \"addTooltip\": true}}" - }, - "id": "2c467370-d392-11e7-8fa0-232aa9259081-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Server Certificates [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"field\": \"tls.detailed.server_certificate.subject.common_name\", \"customLabel\": \"Subject Common Name\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 10}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"field\": \"tls.detailed.server_certificate.subject.organization\", \"customLabel\": \"Organization\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"TLS Server Certificates ECS\", \"params\": {\"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10}}" - }, - "id": "0958a910-d396-11e7-8fa0-232aa9259081-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Client Certificates [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"tls.detailed.client_certificate.subject.common_name\", \"customLabel\": \"Subject Common Name\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"field\": \"tls.detailed.client_certificate.signature_algorithm\", \"customLabel\": \"Signature Algorithm\", \"order\": \"desc\", \"orderBy\": \"1\", \"size\": 5, \"json\": \"{ \\\"missing\\\": \\\"N/A\\\" }\"}, \"enabled\": true}], \"type\": \"table\", \"title\": \"TLS Client Certificates ECS\", \"params\": {\"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10}}" - }, - "id": "86743f90-d396-11e7-8fa0-232aa9259081-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "title": "TLS Cipher [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"tls.cipher\", \"customLabel\": \"Cipher\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"TLS Cipher ECS\", \"params\": {\"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10}}" - }, - "id": "463d2bf0-d3a8-11e7-9081-ab2af08e9961-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "6b1b1360-d49d-11e7-996f-bd7c1ca4591b-ecs", - "title": "TLS Fingerprint [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"field\": \"tls.client.ja3\", \"customLabel\": \"JA3 Fingerprint\", \"orderBy\": \"1\", \"order\": \"desc\", \"size\": 5}, \"enabled\": true}], \"type\": \"table\", \"title\": \"TLS Fingerprint ECS\", \"params\": {\"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showTotal\": false, \"showPartialRows\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"perPage\": 10}}" - }, - "id": "ad2a8b50-d49d-11e7-996f-bd7c1ca4591b-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"range\": {\"event.duration\": {\"gte\": 0, \"lt\": 1000000000}}, \"meta\": {\"type\": \"range\", \"value\": \"0 to 1,000,000,000\", \"alias\": null, \"negate\": false, \"params\": {\"gte\": 0, \"lt\": 1000000000}, \"index\": \"packetbeat-*\", \"key\": \"event.duration\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "savedSearchId": "8e2af860-d520-11e7-9fff-7b1ebf397ba9-ecs", - "title": "TLS Handshake Latency [Packetbeat] ECS", - "uiStateJSON": "{\"vis\": {\"legendOpen\": false}}", - "version": 1, - "visState": "{\"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"field\": \"event.duration\", \"extended_bounds\": {}, \"customLabel\": \"Handshake Latency (ns)\", \"interval\": 2000000}, \"enabled\": true}], \"type\": \"area\", \"title\": \"TLS Handshake Latency ECS\", \"params\": {\"type\": \"area\", \"grid\": {\"style\": {\"color\": \"#eee\"}, \"categoryLines\": false}, \"times\": [], \"legendPosition\": \"right\", \"valueAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": false, \"show\": true, \"rotate\": 0}, \"type\": \"value\", \"name\": \"LeftAxis-1\", \"title\": {\"text\": \"Count\"}, \"position\": \"left\", \"show\": true, \"style\": {}, \"scale\": {\"type\": \"linear\", \"mode\": \"normal\"}, \"id\": \"ValueAxis-1\"}], \"seriesParams\": [{\"type\": \"area\", \"interpolate\": \"linear\", \"show\": \"true\", \"drawLinesBetweenPoints\": true, \"data\": {\"label\": \"Count\", \"id\": \"1\"}, \"valueAxis\": \"ValueAxis-1\", \"showCircles\": true, \"mode\": \"stacked\"}], \"addLegend\": true, \"addTooltip\": true, \"addTimeMarker\": false, \"categoryAxes\": [{\"labels\": {\"truncate\": 100, \"filter\": true, \"show\": true}, \"type\": \"category\", \"title\": {}, \"show\": true, \"style\": {}, \"id\": \"CategoryAxis-1\", \"scale\": {\"type\": \"linear\"}, \"position\": \"bottom\"}]}}" - }, - "id": "d2e15950-d560-11e7-9fff-7b1ebf397ba9-ecs", - "type": "visualization", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.established\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": \"TLS sessions\", \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.established\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Sessions [Packetbeat] ECS", - "version": 1 - }, - "id": "ffc3c0b0-d2d7-11e7-9914-4982455b3063-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.client.server_name\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.client.server_name\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Server Name Indication [Packetbeat] ECS", - "version": 1 - }, - "id": "94908e80-d2d8-11e7-9914-4982455b3063-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.detailed.version\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.detailed.version\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Version [Packetbeat] ECS", - "version": 1 - }, - "id": "bf3d23b0-d37c-11e7-9914-4982455b3063-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.detailed.server_certificate.public_key_size\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.detailed.server_certificate.public_key_size\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Server Public Key Size ECS", - "version": 1 - }, - "id": "8f0ff590-d37d-11e7-9914-4982455b3063-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.client.ja3\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.client.ja3\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Fingerprint [Packetbeat] ECS", - "version": 1 - }, - "id": "6b1b1360-d49d-11e7-996f-bd7c1ca4591b-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "_source" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\": \"packetbeat-*\", \"filter\": [{\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"tls.established\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"tls.established\", \"disabled\": false}}, {\"$state\": {\"store\": \"appState\"}, \"exists\": {\"field\": \"event.duration\"}, \"meta\": {\"type\": \"exists\", \"value\": \"exists\", \"alias\": null, \"negate\": false, \"index\": \"packetbeat-*\", \"key\": \"event.duration\", \"disabled\": false}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "TLS Handshake Latency [Packetbeat] ECS", - "version": 1 - }, - "id": "8e2af860-d520-11e7-9fff-7b1ebf397ba9-ecs", - "type": "search", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - }, - { - "attributes": { - "description": "TLS Sessions ECS", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"highlightAll\": true, \"version\": true}" - }, - "optionsJSON": "{\"useMargins\": false, \"darkTheme\": false}", - "panelsJSON": "[{\"panelIndex\": \"4\", \"type\": \"visualization\", \"id\": \"Navigation-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 0, \"h\": 4, \"y\": 0, \"i\": \"4\"}}, {\"panelIndex\": \"8\", \"type\": \"visualization\", \"id\": \"059fe5e0-d2dd-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 9, \"x\": 3, \"h\": 4, \"y\": 0, \"i\": \"8\"}}, {\"panelIndex\": \"9\", \"type\": \"visualization\", \"id\": \"c14377a0-d353-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 3, \"h\": 3, \"y\": 7, \"i\": \"9\"}}, {\"panelIndex\": \"10\", \"type\": \"visualization\", \"id\": \"061de380-d361-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 0, \"h\": 3, \"y\": 4, \"i\": \"10\"}}, {\"panelIndex\": \"11\", \"type\": \"visualization\", \"id\": \"a28d09d0-d361-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 12, \"x\": 0, \"h\": 3, \"y\": 10, \"i\": \"11\"}}, {\"panelIndex\": \"12\", \"type\": \"visualization\", \"id\": \"0af0b790-d37d-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 6, \"h\": 3, \"y\": 7, \"i\": \"12\"}}, {\"panelIndex\": \"13\", \"type\": \"visualization\", \"id\": \"ae6e33c0-d37d-11e7-9914-4982455b3063-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 9, \"h\": 3, \"y\": 7, \"i\": \"13\"}}, {\"panelIndex\": \"14\", \"type\": \"visualization\", \"id\": \"2c467370-d392-11e7-8fa0-232aa9259081-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 3, \"x\": 0, \"h\": 3, \"y\": 7, \"i\": \"14\"}}, {\"panelIndex\": \"15\", \"type\": \"visualization\", \"id\": \"0958a910-d396-11e7-8fa0-232aa9259081-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"x\": 0, \"h\": 3, \"y\": 13, \"i\": \"15\"}}, {\"panelIndex\": \"16\", \"type\": \"visualization\", \"id\": \"86743f90-d396-11e7-8fa0-232aa9259081-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"x\": 0, \"h\": 3, \"y\": 16, \"i\": \"16\"}}, {\"panelIndex\": \"17\", \"type\": \"visualization\", \"id\": \"463d2bf0-d3a8-11e7-9081-ab2af08e9961-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"x\": 6, \"h\": 3, \"y\": 13, \"i\": \"17\"}}, {\"panelIndex\": \"18\", \"type\": \"visualization\", \"id\": \"ad2a8b50-d49d-11e7-996f-bd7c1ca4591b-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"x\": 6, \"h\": 3, \"y\": 16, \"i\": \"18\"}}, {\"panelIndex\": \"19\", \"type\": \"visualization\", \"id\": \"d2e15950-d560-11e7-9fff-7b1ebf397ba9-ecs\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 9, \"x\": 3, \"h\": 3, \"y\": 4, \"i\": \"19\"}}]", - "timeRestore": false, - "title": "[Packetbeat] TLS Sessions ECS", - "uiStateJSON": "{\"P-16\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-7\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-5\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"P-15\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-18\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-17\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}}", - "version": 1 - }, - "id": "tls-sessions-ecs", - "type": "dashboard", - "updated_at": "2019-01-18T23:49:33.441Z", - "version": 1 - } - ], - "version": "7.0.0-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json index f43928943..1c61559a4 100644 --- a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json +++ b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json @@ -4,7 +4,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"protologbeat-*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" }, "title": "Temperature Timeline", "uiStateJSON": "{}", @@ -25,7 +25,7 @@ "title": "Host Chooser", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\":\"Host Chooser\",\"type\":\"input_control_vis\",\"params\":{\"controls\":[{\"id\":\"1545248066352\",\"indexPattern\":\"protologbeat-*\",\"fieldName\":\"host.name\",\"parent\":\"\",\"label\":\"Host\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"}}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false},\"aggs\":[]}" + "visState": "{\"title\":\"Host Chooser\",\"type\":\"input_control_vis\",\"params\":{\"controls\":[{\"id\":\"1545248066352\",\"indexPattern\":\"malcolm_beats_*\",\"fieldName\":\"host.name\",\"parent\":\"\",\"label\":\"Host\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"}}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false},\"aggs\":[]}" }, "id": "293d13a0-03c5-11e9-b42b-a7822d24ca20", "type": "visualization", @@ -43,7 +43,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"protologbeat-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" }, "sort": [ "@timestamp", @@ -61,7 +61,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"protologbeat-*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" }, "title": "CPU and Storage Temperature Gauge", "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 60\":\"rgb(0,104,55)\",\"60 - 70\":\"rgb(255,255,190)\",\"70 - 90\":\"rgb(165,0,38)\"}}}", @@ -77,7 +77,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"protologbeat-*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" }, "title": "Maximum Sensor CPU and Storage Temperatures", "uiStateJSON": "{}", diff --git a/dashboards/dashboards/beats/auditbeat-file-integrity.json b/dashboards/dashboards/beats/auditbeat-file-integrity.json index c335bfc4c..e8be72807 100644 --- a/dashboards/dashboards/beats/auditbeat-file-integrity.json +++ b/dashboards/dashboards/beats/auditbeat-file-integrity.json @@ -4,7 +4,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Actions [Auditbeat File Integrity] ECS", @@ -21,7 +21,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Events Over Time [Auditbeat File Integrity] ECS", @@ -38,7 +38,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Top owners [Auditbeat File Integrity] ECS", @@ -55,7 +55,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Top groups [Auditbeat File Integrity] ECS", @@ -72,7 +72,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:updated OR event.action:attributes_modified\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:updated OR event.action:attributes_modified\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Top updated [Auditbeat File Integrity] ECS", @@ -89,7 +89,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"lucene\", \"query\": \"file.mode:/0..[2367]/ NOT file.type:symlink\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"lucene\", \"query\": \"file.mode:/0..[2367]/ NOT file.type:symlink\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "World Writable File Count [Auditbeat File Integrity] ECS", @@ -106,7 +106,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"meta\": {\"value\": \"file\", \"params\": {\"type\": \"phrase\", \"query\": \"file\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"file.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"file.type\": {\"type\": \"phrase\", \"query\": \"file\"}}}}], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [{\"meta\": {\"value\": \"file\", \"params\": {\"type\": \"phrase\", \"query\": \"file\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"file.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"file.type\": {\"type\": \"phrase\", \"query\": \"file\"}}}}], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Most changed file by count [Auditbeat File Integrity] ECS", @@ -123,7 +123,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Most common mode by count [Auditbeat File Integrity] ECS", @@ -140,7 +140,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "File Event Summary By Host [Auditbeat File Integrity] ECS", @@ -157,7 +157,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:deleted\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:deleted\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Top deleted [Auditbeat File Integrity] ECS", @@ -174,7 +174,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:created\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:created\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", "title": "Top created [Auditbeat File Integrity] ECS", @@ -196,7 +196,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"file_integrity\", \"params\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}}}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"file_integrity\", \"params\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-executions.json b/dashboards/dashboards/beats/auditbeat-kernel-executions.json index fc807e2aa..9984ef914 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-executions.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-executions.json @@ -21,7 +21,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "title": "Primary Username Tag Cloud [Auditbeat Auditd] ECS", "uiStateJSON": "{}", @@ -62,7 +62,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"executed\", \"params\": {\"type\": \"phrase\", \"query\": \"executed\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"executed\"}}}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"executed\", \"params\": {\"type\": \"phrase\", \"query\": \"executed\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"executed\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-overview.json b/dashboards/dashboards/beats/auditbeat-kernel-overview.json index 7b737621b..02245fe30 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-overview.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-overview.json @@ -9,7 +9,7 @@ "title": "Event Actions [Auditbeat Auditd] ECS", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Event Actions [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}], \"gauge_width\": 10, \"index_pattern\": \"auditbeat-*\", \"filter\": \"event.module:auditd\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"event.action\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"Actions\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" + "visState": "{\"title\": \"Event Actions [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"event.module:auditd\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"event.action\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"Actions\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" }, "id": "97680df0-c1c0-11e7-8995-936807a28b16-ecs", "type": "visualization", @@ -20,7 +20,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "0f10c430-c1c3-11e7-8995-936807a28b16-ecs", "title": "Event Categories [Auditbeat Auditd] ECS", @@ -49,7 +49,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json b/dashboards/dashboards/beats/auditbeat-kernel-sockets.json index a1586ca3a..7419b3d01 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-sockets.json @@ -4,7 +4,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"meta\": {\"apply\": true, \"params\": {\"type\": \"phrase\", \"query\": \"0\"}, \"value\": \"0\", \"alias\": null, \"disabled\": false, \"index\": \"auditbeat-*\", \"type\": \"phrase\", \"negate\": true, \"key\": \"auditd.summary.object.secondary\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.secondary\": {\"type\": \"phrase\", \"query\": \"0\"}}}}], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [{\"meta\": {\"apply\": true, \"params\": {\"type\": \"phrase\", \"query\": \"0\"}, \"value\": \"0\", \"alias\": null, \"disabled\": false, \"index\": \"malcolm_beats_*\", \"type\": \"phrase\", \"negate\": true, \"key\": \"auditd.summary.object.secondary\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.secondary\": {\"type\": \"phrase\", \"query\": \"0\"}}}}], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "b4c93470-c240-11e7-8692-232bd1143e8a-ecs", "title": "Bind (non-ephemeral) [Auditbeat Auditd] ECS", @@ -60,7 +60,7 @@ "title": "Socket Syscalls Time Series [Auditbeat Auditd] ECS", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Socket Syscalls Time Series [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"6c891740-c252-11e7-8a68-93ffe9ec5950\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"95b603d0-c252-11e7-8a68-93ffe9ec5950\"}], \"gauge_width\": 10, \"index_pattern\": \"auditbeat-*\", \"filter\": \"auditd.summary.object.type:socket\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"auditd.data.syscall\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"syscall\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"2cebb0c0-c252-11e7-8a68-93ffe9ec5950\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" + "visState": "{\"title\": \"Socket Syscalls Time Series [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"6c891740-c252-11e7-8a68-93ffe9ec5950\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"95b603d0-c252-11e7-8a68-93ffe9ec5950\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"auditd.summary.object.type:socket\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"auditd.data.syscall\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"syscall\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"2cebb0c0-c252-11e7-8a68-93ffe9ec5950\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" }, "id": "b21e0c70-c252-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -71,7 +71,7 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "title": "Socket Families [Auditbeat Auditd] ECS", "uiStateJSON": "{}", @@ -96,7 +96,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"bind\", \"params\": {\"type\": \"phrase\", \"query\": \"bind\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"auditd.data.syscall\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.syscall\": {\"type\": \"phrase\", \"query\": \"bind\"}}}}, {\"meta\": {\"value\": \"netlink\", \"params\": {\"type\": \"phrase\", \"query\": \"netlink\"}, \"negate\": true, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"auditd.data.socket.family\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.socket.family\": {\"type\": \"phrase\", \"query\": \"netlink\"}}}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"bind\", \"params\": {\"type\": \"phrase\", \"query\": \"bind\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.data.syscall\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.syscall\": {\"type\": \"phrase\", \"query\": \"bind\"}}}}, {\"meta\": {\"value\": \"netlink\", \"params\": {\"type\": \"phrase\", \"query\": \"netlink\"}, \"negate\": true, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.data.socket.family\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.socket.family\": {\"type\": \"phrase\", \"query\": \"netlink\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", @@ -124,7 +124,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"connected-to\", \"params\": {\"type\": \"phrase\", \"query\": \"connected-to\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"connected-to\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"auditbeat-*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"connected-to\", \"params\": {\"type\": \"phrase\", \"query\": \"connected-to\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"connected-to\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", @@ -151,7 +151,7 @@ "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"socket\", \"params\": {\"type\": \"phrase\", \"query\": \"socket\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"auditbeat-*\", \"key\": \"auditd.summary.object.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.type\": {\"type\": \"phrase\", \"query\": \"socket\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"auditbeat-*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}, {\"meta\": {\"value\": \"{\\\"terms\\\":{\\\"auditd.data.syscall\\\":[\\\"accept\\\",\\\"accept4\\\",\\\"recvfrom\\\",\\\"recvmsg\\\"]}}\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"custom\", \"index\": \"auditbeat-*\", \"key\": \"query\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"terms\": {\"auditd.data.syscall\": [\"accept\", \"accept4\", \"recvfrom\", \"recvmsg\"]}}}], \"version\": true, \"index\": \"auditbeat-*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" + "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"socket\", \"params\": {\"type\": \"phrase\", \"query\": \"socket\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.type\": {\"type\": \"phrase\", \"query\": \"socket\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}, {\"meta\": {\"value\": \"{\\\"terms\\\":{\\\"auditd.data.syscall\\\":[\\\"accept\\\",\\\"accept4\\\",\\\"recvfrom\\\",\\\"recvmsg\\\"]}}\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"custom\", \"index\": \"malcolm_beats_*\", \"key\": \"query\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"terms\": {\"auditd.data.syscall\": [\"accept\", \"accept4\", \"recvfrom\", \"recvmsg\"]}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "sort": [ "@timestamp", diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index ff5e0116d..83f496657 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -8,6 +8,7 @@ "ecs_client", "ecs_destination", "ecs_error", + "ecs_file", "ecs_host", "ecs_http", "ecs_log", diff --git a/dashboards/templates/malcolm_template.json b/dashboards/templates/malcolm_template.json index 6cd13a4a6..b4fa8275d 100644 --- a/dashboards/templates/malcolm_template.json +++ b/dashboards/templates/malcolm_template.json @@ -8,6 +8,7 @@ "ecs_client", "ecs_destination", "ecs_error", + "ecs_file", "ecs_host", "ecs_http", "ecs_log", diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index a150c6e1c..96c9befe0 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -191,8 +191,8 @@ freshclam --stdout --quiet --no-warnings ### -# tweak some dashboards for, then install filebeat/metricbeat/auditbeat/packetbeat -for BEAT in filebeat metricbeat auditbeat packetbeat; do +# tweak some dashboards for, then install filebeat/metricbeat/auditbeat +for BEAT in filebeat metricbeat auditbeat; do BEATS_URL="$(echo "$BEATS_DEB_URL_TEMPLATE" | sed "s/$BEATS_DEB_URL_TEMPLATE_REPLACER/$BEAT/g")" BEATS_DEB="$BEAT-$BEATS_VER-amd64.deb" BEATS_NEW_DEB="$BEAT-tweaked-$BEATS_VER-amd64.deb" @@ -211,24 +211,6 @@ for BEAT in filebeat metricbeat auditbeat packetbeat; do popd done -# add symlinks to our custom dashboards -FILES=$(shopt -s nullglob dotglob; echo /usr/share/filebeat/kibana/7/dashboard-custom/*) -if (( ${#FILES} )) ; then - ln -s -r -f /usr/share/filebeat/kibana/7/dashboard-custom/* /usr/share/filebeat/kibana/7/dashboard/ -fi -FILES=$(shopt -s nullglob dotglob; echo /usr/share/metricbeat/kibana/7/dashboard-custom/*) -if (( ${#FILES} )) ; then - ln -s -r -f /usr/share/metricbeat/kibana/7/dashboard-custom/* /usr/share/metricbeat/kibana/7/dashboard/ -fi -FILES=$(shopt -s nullglob dotglob; echo /usr/share/auditbeat/kibana/7/dashboard-custom/*) -if (( ${#FILES} )) ; then - ln -s -r -f /usr/share/auditbeat/kibana/7/dashboard-custom/* /usr/share/auditbeat/kibana/7/dashboard/ -fi -FILES=$(shopt -s nullglob dotglob; echo /usr/share/packetbeat/kibana/7/dashboard-custom/*) -if (( ${#FILES} )) ; then - ln -s -r -f /usr/share/packetbeat/kibana/7/dashboard-custom/* /usr/share/packetbeat/kibana/7/dashboard/ -fi - ### # set up capabilities for network-related tools @@ -246,8 +228,6 @@ chown root:netdev /usr/bin/suricata && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /usr/bin/suricata chown root:netdev /usr/share/auditbeat/bin/auditbeat && \ setcap 'CAP_AUDIT_READ+eip' /usr/share/auditbeat/bin/auditbeat -chown root:netdev /usr/share/packetbeat/bin/packetbeat && \ - setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/share/packetbeat/bin/packetbeat chown root:netdev /opt/arkime/bin/capture && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /opt/arkime/bin/capture From 7fc7f9d3bae19e76a9b7050f20f53d985d1e23f0 Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 7 Jun 2022 13:29:03 -0600 Subject: [PATCH 038/122] updates for hedgehog dashboards for opensearch v2.0 --- .../dashboards/beats/Filebeat-auditd.json | 36 ++++++------- .../dashboards/beats/Filebeat-nginx-logs.json | 3 +- .../beats/Filebeat-nginx-overview.json | 3 +- .../dashboards/beats/Filebeat-syslog.json | 12 ++--- .../beats/Metricbeat-host-overview.json | 14 +++--- .../beats/Metricbeat-system-overview.json | 6 +-- .../Protologbeat-temperatures-dashboard.json | 4 +- .../beats/auditbeat-file-integrity.json | 50 +++++++++---------- .../beats/auditbeat-kernel-executions.json | 22 ++++---- .../beats/auditbeat-kernel-overview.json | 18 +++---- .../beats/auditbeat-kernel-sockets.json | 36 ++++++------- .../composable/component/syslog.json | 8 +++ logstash/pipelines/beats/11_beats_logs.conf | 1 + logstash/pipelines/beats/98_finalize.conf | 1 + 14 files changed, 114 insertions(+), 100 deletions(-) diff --git a/dashboards/dashboards/beats/Filebeat-auditd.json b/dashboards/dashboards/beats/Filebeat-auditd.json index db9024a2c..4960f7d12 100644 --- a/dashboards/dashboards/beats/Filebeat-auditd.json +++ b/dashboards/dashboards/beats/Filebeat-auditd.json @@ -6,10 +6,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, - "title": "Event types breakdown [Filebeat Auditd] ECS", + "title": "auditd - Event Types Breakdown", "uiStateJSON": "{}", "version": 1, - "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"right\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 50, \"order\": \"desc\", \"field\": \"event.action\"}}], \"title\": \"Audit Event Types ECS\"}" + "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"right\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 50, \"order\": \"desc\", \"field\": \"event.action\"}}], \"title\": \"Audit Event Types\"}" }, "id": "6295bdd0-0a0e-11e7-825f-6748cda7d858-ecs", "type": "visualization", @@ -19,12 +19,12 @@ "attributes": { "description": "", "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"event.action:EXECVE\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" + "searchSourceJSON": "{\"query\": {\"query\": \"service.type:auditd AND ((event.action:executed) OR (auditd.data.syscall:exec*))\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, - "title": "Top Exec Commands [Filebeat Auditd] ECS", + "title": "auditd - Top Exec Commands", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", "version": 1, - "visState": "{\"type\": \"table\", \"listeners\": {}, \"params\": {\"perPage\": 10, \"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showPartialRows\": false}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"bucket\", \"params\": {\"orderBy\": \"1\", \"size\": 30, \"customLabel\": \"Command (arg 0)\", \"order\": \"desc\", \"field\": \"auditd.log.a0\"}}], \"title\": \"Audit Top Exec Commands ECS\"}" + "visState": "{\"type\": \"table\", \"listeners\": {}, \"params\": {\"perPage\": 10, \"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showPartialRows\": false}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"bucket\", \"params\": {\"orderBy\": \"1\", \"size\": 100, \"customLabel\": \"Trigger\", \"order\": \"desc\", \"field\": \"auditd.summary.how\"}}], \"title\": \"Audit Top Exec Commands\"}" }, "id": "5ebdbe50-0a0f-11e7-825f-6748cda7d858-ecs", "type": "visualization", @@ -36,10 +36,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{}" }, - "title": "Event Results [Filebeat Auditd] ECS", + "title": "auditd - Event Results", "uiStateJSON": "{}", "version": 1, - "visState": "{\"type\": \"timelion\", \"params\": {\"expression\": \".es(q=\\\"event.dataset:auditd.log NOT event.outcome:failure\\\").label(\\\"Success\\\"), .es(q=\\\"event.outcome:failed\\\").label(\\\"Failure\\\").title(\\\"Audit Event Results\\\")\", \"interval\": \"auto\"}, \"aggs\": [], \"title\": \"Event Results [Filebeat Auditd] ECS\"}" + "visState": "{\"type\": \"timelion\", \"params\": {\"expression\": \".es(q=\\\"service.type:auditd NOT event.outcome:failure\\\").label(\\\"Success\\\"), .es(q=\\\"event.outcome:failure\\\").label(\\\"Failure\\\").title(\\\"Audit Event Results\\\")\", \"interval\": \"auto\"}, \"aggs\": [], \"title\": \"auditd - Event Results\"}" }, "id": "2bb0fa70-0a11-11e7-9e84-43da493ad0c7-ecs", "type": "visualization", @@ -51,10 +51,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, - "title": "Event Address Geo Location [Filebeat Auditd] ECS", + "title": "auditd - Event Address Geo Location", "uiStateJSON": "{}", "version": 1, - "visState": "{\"type\": \"tile_map\", \"listeners\": {}, \"params\": {\"heatNormalizeData\": true, \"mapType\": \"Scaled Circle Markers\", \"heatRadius\": 25, \"mapZoom\": 2, \"heatMinOpacity\": 0.1, \"addTooltip\": true, \"heatBlur\": 15, \"wms\": {\"options\": {\"layers\": \"0\", \"styles\": \"\", \"transparent\": true, \"format\": \"image/png\", \"version\": \"1.3.0\", \"attribution\": \"Maps provided by USGS\"}, \"enabled\": false, \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"}, \"heatMaxZoom\": 16, \"legendPosition\": \"bottomright\", \"mapCenter\": [15, 5], \"isDesaturated\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"geohash_grid\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"autoPrecision\": true, \"precision\": 2, \"field\": \"source.geo.location\"}}], \"title\": \"Audit Event Address Geo Location ECS\"}" + "visState": "{\"type\": \"tile_map\", \"listeners\": {}, \"params\": {\"heatNormalizeData\": true, \"mapType\": \"Scaled Circle Markers\", \"heatRadius\": 25, \"mapZoom\": 2, \"heatMinOpacity\": 0.1, \"addTooltip\": true, \"heatBlur\": 15, \"wms\": {\"options\": {\"layers\": \"0\", \"styles\": \"\", \"transparent\": true, \"format\": \"image/png\", \"version\": \"1.3.0\", \"attribution\": \"Maps provided by USGS\"}, \"enabled\": false, \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"}, \"heatMaxZoom\": 16, \"legendPosition\": \"bottomright\", \"mapCenter\": [15, 5], \"isDesaturated\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"geohash_grid\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"autoPrecision\": true, \"precision\": 2, \"field\": \"source.geo.location\"}}], \"title\": \"Audit Event Address Geo Location\"}" }, "id": "d1726930-0a7f-11e7-8b04-eb22a5669f27-ecs", "type": "visualization", @@ -66,10 +66,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" }, - "title": "Event Account Tag Cloud [Filebeat Auditd] ECS", + "title": "auditd - Event Account Tag Cloud", "uiStateJSON": "{}", "version": 1, - "visState": "{\"type\": \"tagcloud\", \"listeners\": {}, \"params\": {\"maxFontSize\": 42, \"hideLabel\": false, \"orientation\": \"single\", \"minFontSize\": 15, \"scale\": \"linear\"}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 15, \"order\": \"desc\", \"field\": \"user.name\"}}], \"title\": \"Audit Event Account Tag Cloud ECS\"}" + "visState": "{\"type\": \"tagcloud\", \"listeners\": {}, \"params\": {\"maxFontSize\": 42, \"hideLabel\": false, \"orientation\": \"single\", \"minFontSize\": 15, \"scale\": \"linear\"}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 15, \"order\": \"desc\", \"field\": \"user.name\"}}], \"title\": \"Audit Event Account Tag Cloud\"}" }, "id": "c5411910-0a87-11e7-8b04-eb22a5669f27-ecs", "type": "visualization", @@ -79,19 +79,21 @@ "attributes": { "columns": [ "event.action", - "auditd.log.sequence", + "auditd.summary.how", + "event.outcome", + "auditd.sequence", "user.name" ], "description": "", "hits": 0, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"event.dataset:auditd.log\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"index\": \"malcolm_beats_*\", \"highlightAll\": true}" + "searchSourceJSON": "{\"query\": {\"query\": \"service.type:auditd\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"index\": \"malcolm_beats_*\", \"highlightAll\": true}" }, "sort": [ "@timestamp", "desc" ], - "title": "Audit Events [Filebeat Auditd] ECS", + "title": "auditd - Audit Events", "version": 1 }, "id": "4ac0a370-0a11-11e7-8b04-eb22a5669f27-ecs", @@ -100,15 +102,15 @@ }, { "attributes": { - "description": "Dashboard for the Auditd Filebeat module", + "description": "auditd events from Malcolm sensors", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"highlightAll\": true}" }, "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 1, \"id\": \"6295bdd0-0a0e-11e7-825f-6748cda7d858-ecs\", \"col\": 1, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 2, \"id\": \"5ebdbe50-0a0f-11e7-825f-6748cda7d858-ecs\", \"col\": 9, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 3, \"id\": \"2bb0fa70-0a11-11e7-9e84-43da493ad0c7-ecs\", \"col\": 1, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 5, \"id\": \"d1726930-0a7f-11e7-8b04-eb22a5669f27-ecs\", \"col\": 7, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 6, \"id\": \"c5411910-0a87-11e7-8b04-eb22a5669f27-ecs\", \"col\": 5, \"row\": 1}, {\"type\": \"search\", \"columns\": [\"event.action\", \"auditd.log.sequence\", \"user.name\"], \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 7, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"4ac0a370-0a11-11e7-8b04-eb22a5669f27-ecs\", \"col\": 1, \"row\": 8}]", + "panelsJSON": "[{\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 1, \"id\": \"6295bdd0-0a0e-11e7-825f-6748cda7d858-ecs\", \"col\": 1, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 2, \"id\": \"5ebdbe50-0a0f-11e7-825f-6748cda7d858-ecs\", \"col\": 9, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 3, \"id\": \"2bb0fa70-0a11-11e7-9e84-43da493ad0c7-ecs\", \"col\": 1, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 5, \"id\": \"d1726930-0a7f-11e7-8b04-eb22a5669f27-ecs\", \"col\": 7, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 6, \"id\": \"c5411910-0a87-11e7-8b04-eb22a5669f27-ecs\", \"col\": 5, \"row\": 1}, {\"type\": \"search\", \"columns\": [\"event.action\", \"auditd.summary.how\", \"event.outcome\", \"auditd.sequence\", \"user.name\"], \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 7, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"4ac0a370-0a11-11e7-8b04-eb22a5669f27-ecs\", \"col\": 1, \"row\": 8}]", "timeRestore": false, - "title": "[Filebeat Auditd] Audit Events ECS", + "title": "Malcolm Sensor auditd Events", "uiStateJSON": "{\"P-2\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-5\": {\"mapZoom\": 2, \"mapBounds\": {\"bottom_right\": {\"lat\": -43.580390855607845, \"lon\": 102.65625}, \"top_left\": {\"lat\": 43.58039085560784, \"lon\": -102.3046875}}, \"mapCollar\": {\"bottom_right\": {\"lat\": -87.16078, \"lon\": 180}, \"zoom\": 2, \"top_left\": {\"lat\": 87.16078, \"lon\": -180}}}}", "version": 1 }, diff --git a/dashboards/dashboards/beats/Filebeat-nginx-logs.json b/dashboards/dashboards/beats/Filebeat-nginx-logs.json index a0c81a2ef..859ee6d8b 100644 --- a/dashboards/dashboards/beats/Filebeat-nginx-logs.json +++ b/dashboards/dashboards/beats/Filebeat-nginx-logs.json @@ -10,7 +10,8 @@ "updated_at": "2022-06-01T19:53:27.884Z", "version": "WzEwMTgsMV0=", "attributes": { - "title": "nginx Access and Error Logs", + "title": "Malcolm nginx Access and Error Logs", + "description": "Logs from Malcolm's own nginx instance", "hits": 0, "description": "", "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":16,\"w\":48,\"h\":15,\"i\":\"11\"},\"panelIndex\":\"11\",\"embeddableConfig\":{\"columns\":[\"log.level\",\"error.message\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":31,\"w\":48,\"h\":23,\"i\":\"16\"},\"panelIndex\":\"16\",\"embeddableConfig\":{\"columns\":[\"url.original\",\"http.request.method\",\"http.response.status_code\",\"http.response.body.bytes\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":4,\"w\":48,\"h\":12,\"i\":\"18\"},\"panelIndex\":\"18\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":4,\"i\":\"19\"},\"panelIndex\":\"19\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"}]", diff --git a/dashboards/dashboards/beats/Filebeat-nginx-overview.json b/dashboards/dashboards/beats/Filebeat-nginx-overview.json index bba2d5857..6d90abe6b 100644 --- a/dashboards/dashboards/beats/Filebeat-nginx-overview.json +++ b/dashboards/dashboards/beats/Filebeat-nginx-overview.json @@ -18,7 +18,8 @@ "optionsJSON": "{\"darkTheme\": false}", "panelsJSON": "[{\"panelIndex\":\"3\",\"panelRefName\":\"panel_0\",\"version\":\"7.3.0\",\"gridData\":{\"x\":36,\"y\":44,\"w\":12,\"h\":12,\"i\":\"3\"},\"embeddableConfig\":{}},{\"panelIndex\":\"4\",\"panelRefName\":\"panel_1\",\"version\":\"7.3.0\",\"gridData\":{\"x\":24,\"y\":44,\"w\":12,\"h\":12,\"i\":\"4\"},\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}}},{\"panelIndex\":\"8\",\"panelRefName\":\"panel_2\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":4,\"w\":48,\"h\":16,\"i\":\"8\"},\"embeddableConfig\":{\"mapZoom\":2,\"mapBounds\":{\"bottom_right\":{\"lat\":-7.362466865535738,\"lon\":245.39062500000003},\"top_left\":{\"lat\":77.07878389624943,\"lon\":-245.74218750000003}},\"mapCenter\":[50.51342652633956,-0.17578125],\"mapCollar\":{\"bottom_right\":{\"lat\":-49.583095,\"lon\":180},\"zoom\":2,\"top_left\":{\"lat\":90,\"lon\":-180}}}},{\"panelIndex\":\"13\",\"panelRefName\":\"panel_3\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":20,\"w\":48,\"h\":12,\"i\":\"13\"},\"embeddableConfig\":{}},{\"panelIndex\":\"14\",\"panelRefName\":\"panel_4\",\"version\":\"7.3.0\",\"gridData\":{\"x\":24,\"y\":32,\"w\":24,\"h\":12,\"i\":\"14\"},\"embeddableConfig\":{}},{\"panelIndex\":\"15\",\"panelRefName\":\"panel_5\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":32,\"w\":24,\"h\":12,\"i\":\"15\"},\"embeddableConfig\":{}},{\"panelIndex\":\"16\",\"panelRefName\":\"panel_6\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":44,\"w\":24,\"h\":12,\"i\":\"16\"},\"embeddableConfig\":{}},{\"panelIndex\":\"17\",\"panelRefName\":\"panel_7\",\"version\":\"7.3.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":4,\"i\":\"17\"},\"embeddableConfig\":{}}]", "timeRestore": false, - "title": "nginx Overview", + "title": "Malcolm nginx Overview", + "description": "Overview of Malcolm's own nginx instance", "version": 1 }, "references": [ diff --git a/dashboards/dashboards/beats/Filebeat-syslog.json b/dashboards/dashboards/beats/Filebeat-syslog.json index b161e97a1..871f6938b 100644 --- a/dashboards/dashboards/beats/Filebeat-syslog.json +++ b/dashboards/dashboards/beats/Filebeat-syslog.json @@ -10,9 +10,9 @@ "updated_at": "2022-06-06T22:19:27.173Z", "version": "WzkyMywxXQ==", "attributes": { - "title": "[Filebeat System] Syslog dashboard ECS", + "title": "Malcolm Sensor Syslog", "hits": 0, - "description": "Syslog dashboard from the Filebeat System module", + "description": "Syslog logs from Malcolm sensors", "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":36,\"h\":22,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":22,\"w\":48,\"h\":28,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"columns\":[\"host.name\",\"process.program\",\"event.original\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":36,\"y\":0,\"w\":12,\"h\":22,\"i\":\"29d428e5-2e38-4055-990a-127002b9239e\"},\"panelIndex\":\"29d428e5-2e38-4055-990a-127002b9239e\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"}]", "optionsJSON": "{\"darkTheme\":false}", "version": 1, @@ -51,8 +51,8 @@ "updated_at": "2022-06-06T22:16:35.490Z", "version": "WzkyMSwxXQ==", "attributes": { - "title": "Syslog events by hostname [Filebeat System] ECS", - "visState": "{\"title\":\"Syslog events by hostname [Filebeat System] ECS\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"group\"}],\"params\":{\"times\":[],\"addTimeMarker\":false,\"setYExtents\":false,\"shareYAxis\":true,\"legendPosition\":\"bottom\",\"scale\":\"linear\",\"yAxis\":{},\"addTooltip\":true,\"addLegend\":true,\"mode\":\"stacked\",\"defaultYExtents\":false,\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}", + "title": "syslog - Events by Hostname", + "visState": "{\"title\":\"syslog - Events by Hostname\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"group\"}],\"params\":{\"times\":[],\"addTimeMarker\":false,\"setYExtents\":false,\"shareYAxis\":true,\"legendPosition\":\"bottom\",\"scale\":\"linear\",\"yAxis\":{},\"addTooltip\":true,\"addLegend\":true,\"mode\":\"stacked\",\"defaultYExtents\":false,\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -97,7 +97,7 @@ "desc" ] ], - "title": "Syslog logs [Filebeat System] ECS", + "title": "syslog - Logs", "version": 1 }, "references": [ @@ -121,7 +121,7 @@ "version": "WzkyMiwxXQ==", "attributes": { "title": "Syslog Program Name", - "visState": "{\"title\":\"Syslog Program Name\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"process.program.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Program Name\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "visState": "{\"title\":\"Syslog Program Name\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"process.program\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Program Name\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", "description": "", "version": 1, diff --git a/dashboards/dashboards/beats/Metricbeat-host-overview.json b/dashboards/dashboards/beats/Metricbeat-host-overview.json index be0550140..78ed8aff1 100644 --- a/dashboards/dashboards/beats/Metricbeat-host-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-host-overview.json @@ -2,7 +2,7 @@ "objects": [ { "attributes": { - "description": "Overview of host metrics", + "description": "Malcolm sensor hosts' resources overview", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"host.name:\\\"CHANGEME_HOSTNAME\\\"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" @@ -10,7 +10,7 @@ "optionsJSON": "{\"darkTheme\": false}", "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"1\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"1\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"2\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"2\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"3\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"3\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"4\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"4\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"5\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"5\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"6\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"6\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"7\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"7\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"8\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"8\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"9\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"10\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"10\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_10\", \"panelIndex\": \"11\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"11\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_11\", \"panelIndex\": \"12\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_12\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"13\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_13\", \"panelIndex\": \"14\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"14\", \"w\": 16, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_14\", \"panelIndex\": \"16\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"16\", \"w\": 24, \"y\": 0, \"h\": 5}}, {\"panelRefName\": \"panel_15\", \"panelIndex\": \"21\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"21\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_16\", \"panelIndex\": \"22\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"22\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_17\", \"panelIndex\": \"23\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"23\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_18\", \"panelIndex\": \"25\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"25\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_19\", \"panelIndex\": \"27\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"27\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_20\", \"panelIndex\": \"28\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"28\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_21\", \"panelIndex\": \"29\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"29\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_22\", \"panelIndex\": \"30\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"30\", \"w\": 24, \"y\": 0, \"h\": 5}}]", "timeRestore": false, - "title": "Metricbeat Hosts Overview", + "title": "Malcolm Sensor Resources - Hosts Overview", "version": 1 }, "id": "79ffd6e0-faa0-11e6-947f-177f697178b8-ecs", @@ -147,7 +147,7 @@ "title": "Network Traffic (Packets)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"c0da3d80-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"ecaad010-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound\", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"fe5fbdc0-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Packets) ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"c0da3d80-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"ecaad010-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound\", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"fe5fbdc0-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Packets)\", \"type\": \"metrics\"}" }, "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs", "migrationVersion": { @@ -187,7 +187,7 @@ "title": "Network Traffic (Bytes)", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"a87398e0-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"2d533df0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound \", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"533da9b0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound \", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Bytes) ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"a87398e0-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"2d533df0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound \", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"533da9b0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound \", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Bytes)\", \"type\": \"metrics\"}" }, "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs", "migrationVersion": { @@ -427,7 +427,7 @@ "title": "System Navigation", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" + "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" }, "id": "System-Navigation-ecs", "migrationVersion": { @@ -467,7 +467,7 @@ "title": "Memory usage vs total", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"6bc65720-4d5c-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6bc65721-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6bc65722-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory usage\", \"stacked\": \"none\"}, {\"id\": \"b8fe6820-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"b8fe6821-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.total\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Memory\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_legend\": 1}, \"title\": \"Memory usage vs total ECS\", \"type\": \"metrics\"}" + "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"6bc65720-4d5c-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6bc65721-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6bc65722-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory usage\", \"stacked\": \"none\"}, {\"id\": \"b8fe6820-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"b8fe6821-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.total\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Memory\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_legend\": 1}, \"title\": \"Memory usage vs total\", \"type\": \"metrics\"}" }, "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs", "migrationVersion": { @@ -567,7 +567,7 @@ "title": "Number of processes", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"process.pid\", \"customLabel\": \"Processes\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"listeners\": {}, \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": 60}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": true, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"title\": \"Number of processes ECS\", \"type\": \"metric\"}" + "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"process.pid\", \"customLabel\": \"Processes\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"listeners\": {}, \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": 60}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": true, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"title\": \"Number of processes\", \"type\": \"metric\"}" }, "id": "590a60f0-5d87-11e7-8884-1bb4c3b890e4-ecs", "migrationVersion": { diff --git a/dashboards/dashboards/beats/Metricbeat-system-overview.json b/dashboards/dashboards/beats/Metricbeat-system-overview.json index 5b0fa5cb8..d43f4cd14 100644 --- a/dashboards/dashboards/beats/Metricbeat-system-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-system-overview.json @@ -2,7 +2,7 @@ "objects": [ { "attributes": { - "description": "Overview of system metrics", + "description": "Malcolm sensor system resources overview", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" @@ -10,7 +10,7 @@ "optionsJSON": "{\"darkTheme\": false}", "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"9\", \"w\": 48, \"y\": 0, \"h\": 4}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"11\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"11\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"12\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"13\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"14\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"45% - 60%\": \"rgb(35,139,69)\", \"0% - 15%\": \"rgb(247,252,245)\", \"15% - 30%\": \"rgb(199,233,192)\", \"30% - 45%\": \"rgb(116,196,118)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"14\", \"w\": 48, \"y\": 32, \"h\": 24}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"16\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"16\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"17\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"17\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"18\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"18\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"19\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"19\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"20\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"20\", \"w\": 8, \"y\": 4, \"h\": 8}}]", "timeRestore": false, - "title": "Metricbeat System Overview", + "title": "Malcolm Sensor Resources - System Overview", "version": 1 }, "id": "Metricbeat-system-overview-ecs", @@ -82,7 +82,7 @@ "title": "System Navigation", "uiStateJSON": "{}", "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) |\\n[Containers overview](#/dashboard/CPU-slash-Memory-per-container-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" + "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" }, "id": "System-Navigation-ecs", "migrationVersion": { diff --git a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json index 1c61559a4..caaa174b4 100644 --- a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json +++ b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json @@ -91,7 +91,7 @@ }, { "attributes": { - "description": "", + "description": "Malcolm sensor hardware component temperature summary", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" @@ -99,7 +99,7 @@ "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":false}", "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":31,\"w\":48,\"h\":35,\"i\":\"1\"},\"id\":\"752a7e30-03af-11e9-bf7f-6138c205dfb3\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":20,\"h\":11,\"i\":\"2\"},\"id\":\"293d13a0-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"2\",\"title\":\"Sensor Filter\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":66,\"w\":48,\"h\":29,\"i\":\"3\"},\"id\":\"65345580-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"3\",\"title\":\"Sensor Metrics\",\"type\":\"search\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":11,\"w\":20,\"h\":20,\"i\":\"4\"},\"id\":\"db628ba0-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":20,\"y\":0,\"w\":28,\"h\":31,\"i\":\"5\"},\"id\":\"923c3ce0-03c6-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.5.3\"}]", "timeRestore": false, - "title": "Sensor Temperature dashboard", + "title": "Malcolm Sensor Temperature Summary", "version": 1 }, "id": "3c519150-03c5-11e9-b42b-a7822d24ca20", diff --git a/dashboards/dashboards/beats/auditbeat-file-integrity.json b/dashboards/dashboards/beats/auditbeat-file-integrity.json index e8be72807..eca3453b3 100644 --- a/dashboards/dashboards/beats/auditbeat-file-integrity.json +++ b/dashboards/dashboards/beats/auditbeat-file-integrity.json @@ -7,10 +7,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Actions [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Actions", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"title\": \"Actions [Auditbeat File Integrity] ECS\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 5, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"extendRange\": false, \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": true, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": true, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"24\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Actions\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 5, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"extendRange\": false, \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": true, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": true, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"24\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" }, "id": "AV0tVcg6g1PYniApZa-v-ecs", "type": "visualization", @@ -24,10 +24,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Events Over Time [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Events Over Time", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Events Over Time [Auditbeat File Integrity] ECS\", \"type\": \"histogram\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"min_doc_count\": 1, \"customInterval\": \"2h\", \"interval\": \"auto\", \"field\": \"@timestamp\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 10, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"categoryAxes\": [{\"position\": \"bottom\", \"title\": {\"text\": \"@timestamp per 5 minutes\"}, \"style\": {}, \"scale\": {\"type\": \"linear\"}, \"type\": \"category\", \"id\": \"CategoryAxis-1\", \"show\": true, \"labels\": {\"truncate\": 100, \"show\": true}}], \"seriesParams\": [{\"drawLinesBetweenPoints\": true, \"data\": {\"id\": \"1\", \"label\": \"Count\"}, \"show\": \"true\", \"mode\": \"stacked\", \"showCircles\": true, \"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\"}], \"addLegend\": true, \"times\": [], \"addTimeMarker\": false, \"type\": \"histogram\", \"legendPosition\": \"left\", \"grid\": {\"categoryLines\": false, \"style\": {\"color\": \"#eee\"}}, \"addTooltip\": true, \"valueAxes\": [{\"position\": \"left\", \"title\": {\"text\": \"Count\"}, \"style\": {}, \"name\": \"LeftAxis-1\", \"show\": true, \"type\": \"value\", \"id\": \"ValueAxis-1\", \"scale\": {\"defaultYExtents\": true, \"mode\": \"normal\", \"type\": \"linear\"}, \"labels\": {\"rotate\": 0, \"filter\": false, \"truncate\": 100, \"show\": true}}]}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Events Over Time\", \"type\": \"histogram\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"min_doc_count\": 1, \"customInterval\": \"2h\", \"interval\": \"auto\", \"field\": \"@timestamp\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 10, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"categoryAxes\": [{\"position\": \"bottom\", \"title\": {\"text\": \"@timestamp per 5 minutes\"}, \"style\": {}, \"scale\": {\"type\": \"linear\"}, \"type\": \"category\", \"id\": \"CategoryAxis-1\", \"show\": true, \"labels\": {\"truncate\": 100, \"show\": true}}], \"seriesParams\": [{\"drawLinesBetweenPoints\": true, \"data\": {\"id\": \"1\", \"label\": \"Count\"}, \"show\": \"true\", \"mode\": \"stacked\", \"showCircles\": true, \"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\"}], \"addLegend\": true, \"times\": [], \"addTimeMarker\": false, \"type\": \"histogram\", \"legendPosition\": \"bottom\", \"grid\": {\"categoryLines\": false, \"style\": {\"color\": \"#eee\"}}, \"addTooltip\": true, \"valueAxes\": [{\"position\": \"left\", \"title\": {\"text\": \"Count\"}, \"style\": {}, \"name\": \"LeftAxis-1\", \"show\": true, \"type\": \"value\", \"id\": \"ValueAxis-1\", \"scale\": {\"defaultYExtents\": true, \"mode\": \"normal\", \"type\": \"linear\"}, \"labels\": {\"rotate\": 0, \"filter\": false, \"truncate\": 100, \"show\": true}}]}}" }, "id": "AV0tV05vg1PYniApZbA2-ecs", "type": "visualization", @@ -41,10 +41,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Top owners [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Top Owners", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Top owners [Auditbeat File Integrity] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.owner\", \"size\": 5, \"customLabel\": \"Owner\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Top Owners\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.owner\", \"size\": 5, \"customLabel\": \"Owner\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "AV0tWL-Yg1PYniApZbCs-ecs", "type": "visualization", @@ -58,10 +58,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Top groups [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Top Groups", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Top groups [Auditbeat File Integrity] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.group\", \"size\": 5, \"customLabel\": \"Group\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Top Groups\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.group\", \"size\": 5, \"customLabel\": \"Group\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "AV0tWSdXg1PYniApZbDU-ecs", "type": "visualization", @@ -75,10 +75,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:updated OR event.action:attributes_modified\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Top updated [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Top Updated", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Top updated [Auditbeat File Integrity] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Top Updated\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "AV0tW0djg1PYniApZbGL-ecs", "type": "visualization", @@ -92,10 +92,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"lucene\", \"query\": \"file.mode:/0..[2367]/ NOT file.type:symlink\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "World Writable File Count [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - World Writable File Count", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"title\": \"World Writable File Count [Auditbeat File Integrity] ECS\", \"type\": \"metric\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"file.inode\", \"customLabel\": \"World Writable Files\"}, \"enabled\": true}], \"params\": {\"type\": \"metric\", \"addTooltip\": true, \"addLegend\": false, \"metric\": {\"metricColorMode\": \"None\", \"colorSchema\": \"Green to Red\", \"invertColors\": false, \"useRange\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"23\", \"bgColor\": false, \"subText\": \"\"}, \"percentageMode\": false, \"labels\": {\"color\": \"black\", \"show\": false}}}}" + "visState": "{\"title\": \"Auditbeat File Integrity - World Writable File Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"file.inode\", \"customLabel\": \"World Writable Files\"}, \"enabled\": true}], \"params\": {\"type\": \"metric\", \"addTooltip\": true, \"addLegend\": false, \"metric\": {\"metricColorMode\": \"None\", \"colorSchema\": \"Green to Red\", \"invertColors\": false, \"useRange\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"23\", \"bgColor\": false, \"subText\": \"\"}, \"percentageMode\": false, \"labels\": {\"color\": \"black\", \"show\": false}}}}" }, "id": "AV0tY6jwg1PYniApZbRY-ecs", "type": "visualization", @@ -109,10 +109,10 @@ "searchSourceJSON": "{\"filter\": [{\"meta\": {\"value\": \"file\", \"params\": {\"type\": \"phrase\", \"query\": \"file\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"file.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"file.type\": {\"type\": \"phrase\", \"query\": \"file\"}}}}], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Most changed file by count [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Most Changed File by Count", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"title\": \"Most changed file by count [Auditbeat File Integrity] ECS\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most changed file by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 1, \"customLabel\": \"File\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Most Changed File by Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most changed file by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 1, \"customLabel\": \"File\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" }, "id": "AV0tav8Ag1PYniApZbbK-ecs", "type": "visualization", @@ -126,10 +126,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Most common mode by count [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Most Common Mode by Count", "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", "version": 1, - "visState": "{\"title\": \"Most common mode by count [Auditbeat File Integrity] ECS\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most common mode by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.mode\", \"size\": 1, \"customLabel\": \"Mode\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Most Common Mode by Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most common mode by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.mode\", \"size\": 1, \"customLabel\": \"Mode\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" }, "id": "AV0tbcUdg1PYniApZbe1-ecs", "type": "visualization", @@ -143,10 +143,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "File Event Summary By Host [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - File Event Summary by Host", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", "version": 1, - "visState": "{\"title\": \"File Event Summary By Host [Auditbeat File Integrity] ECS\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Total Events\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"host.name\", \"size\": 50, \"customLabel\": \"Host\"}, \"enabled\": true}, {\"type\": \"top_hits\", \"schema\": \"metric\", \"id\": \"5\", \"params\": {\"sortOrder\": \"desc\", \"aggregate\": \"concat\", \"sortField\": \"@timestamp\", \"size\": 1, \"field\": \"@timestamp\", \"customLabel\": \"Last Report\"}, \"enabled\": true}], \"params\": {\"showTotal\": true, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" + "visState": "{\"title\": \"Auditbeat File Integrity - File Event Summary by Host\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Total Events\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"host.name\", \"size\": 50, \"customLabel\": \"Host\"}, \"enabled\": true}, {\"type\": \"top_hits\", \"schema\": \"metric\", \"id\": \"5\", \"params\": {\"sortOrder\": \"desc\", \"aggregate\": \"concat\", \"sortField\": \"@timestamp\", \"size\": 1, \"field\": \"@timestamp\", \"customLabel\": \"Last Report\"}, \"enabled\": true}], \"params\": {\"showTotal\": true, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" }, "id": "AV0tc_xZg1PYniApZbnL-ecs", "type": "visualization", @@ -160,10 +160,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:deleted\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Top deleted [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Top Deleted", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Top deleted [Auditbeat File Integrity] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Top Deleted\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "AV0tes4Eg1PYniApZbwV-ecs", "type": "visualization", @@ -177,10 +177,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:created\"}}" }, "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Top created [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - Top Created", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Top created [Auditbeat File Integrity] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"Auditbeat File Integrity - Top Created\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "AV0te0TCg1PYniApZbw9-ecs", "type": "visualization", @@ -202,7 +202,7 @@ "@timestamp", "desc" ], - "title": "File Integrity Events [Auditbeat File Integrity] ECS", + "title": "Auditbeat File Integrity - File Integrity Events", "version": 1 }, "id": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", @@ -212,7 +212,7 @@ }, { "attributes": { - "description": "Monitor file integrity events.", + "description": "Monitor file integrity events for Malcolm sensors", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" @@ -220,7 +220,7 @@ "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"AV0tVcg6g1PYniApZa-v-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 2, \"i\": \"1\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tV05vg1PYniApZbA2-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"2\", \"gridData\": {\"w\": 7, \"i\": \"2\", \"h\": 6, \"x\": 2, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tWL-Yg1PYniApZbCs-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"3\", \"gridData\": {\"w\": 3, \"i\": \"3\", \"h\": 3, \"x\": 9, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tWSdXg1PYniApZbDU-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 3, \"i\": \"4\", \"h\": 3, \"x\": 9, \"y\": 3}}, {\"type\": \"visualization\", \"id\": \"AV0tW0djg1PYniApZbGL-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 4, \"i\": \"5\", \"h\": 3, \"x\": 4, \"y\": 8}}, {\"type\": \"visualization\", \"id\": \"AV0tY6jwg1PYniApZbRY-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"6\", \"gridData\": {\"w\": 4, \"i\": \"6\", \"h\": 2, \"x\": 0, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tav8Ag1PYniApZbbK-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"7\", \"gridData\": {\"w\": 4, \"i\": \"7\", \"h\": 2, \"x\": 4, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tbcUdg1PYniApZbe1-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"8\", \"gridData\": {\"w\": 4, \"i\": \"8\", \"h\": 2, \"x\": 8, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tc_xZg1PYniApZbnL-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"9\", \"gridData\": {\"w\": 6, \"i\": \"9\", \"h\": 5, \"x\": 0, \"y\": 11}}, {\"type\": \"visualization\", \"id\": \"AV0tes4Eg1PYniApZbwV-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"10\", \"gridData\": {\"w\": 4, \"i\": \"10\", \"h\": 3, \"x\": 8, \"y\": 8}}, {\"type\": \"visualization\", \"id\": \"AV0te0TCg1PYniApZbw9-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"11\", \"gridData\": {\"w\": 4, \"i\": \"11\", \"h\": 3, \"x\": 0, \"y\": 8}}, {\"panelIndex\": \"12\", \"version\": \"6.2.4\", \"sort\": [\"@timestamp\", \"desc\"], \"gridData\": {\"w\": 6, \"i\": \"12\", \"h\": 5, \"x\": 6, \"y\": 11}, \"type\": \"search\", \"id\": \"a380a060-cb44-11e7-9835-2f31fe08873b-ecs\", \"columns\": [\"file.path\", \"event.action\"]}]", "timeRestore": false, - "title": "[Auditbeat File Integrity] Overview ECS", + "title": "Malcolm Sensor Auditbeat File Integrity - Overview", "version": 1 }, "id": "AV0tXkjYg1PYniApZbKP-ecs", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-executions.json b/dashboards/dashboards/beats/auditbeat-kernel-executions.json index 9984ef914..ed124a82c 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-executions.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-executions.json @@ -7,10 +7,10 @@ "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", - "title": "Error Codes [Auditbeat Auditd] ECS", + "title": "auditd Executions - Error Codes", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Error Codes [Auditbeat Auditd] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"exclude\": \"0\", \"size\": 10, \"field\": \"auditd.data.exit\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"auditd Executions - Error Codes\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"exclude\": \"0\", \"size\": 10, \"field\": \"auditd.data.exit\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "20a8e8d0-c1c8-11e7-8995-936807a28b16-ecs", "type": "visualization", @@ -23,10 +23,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, - "title": "Primary Username Tag Cloud [Auditbeat Auditd] ECS", + "title": "auditd Executions - Primary Username Tag Cloud", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Primary Username Tag Cloud [Auditbeat Auditd] ECS\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"auditd.summary.actor.primary\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 18, \"orientation\": \"single\", \"scale\": \"linear\"}}" + "visState": "{\"title\": \"auditd Executions - Primary Username Tag Cloud\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"auditd.summary.actor.primary\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 18, \"orientation\": \"single\", \"scale\": \"linear\"}}" }, "id": "f81a6de0-c1c1-11e7-8995-936807a28b16-ecs", "type": "visualization", @@ -40,10 +40,10 @@ "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", - "title": "Exe Name Tag Cloud [Auditbeat Auditd] ECS", + "title": "auditd Executions - Exe Name Tag Cloud", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Exe Name Tag Cloud [Auditbeat Auditd] ECS\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"process.executable\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 14, \"orientation\": \"single\", \"scale\": \"linear\"}}" + "visState": "{\"title\": \"auditd Executions - Exe Name Tag Cloud\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"process.executable\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 14, \"orientation\": \"single\", \"scale\": \"linear\"}}" }, "id": "2efac370-c1ca-11e7-8995-936807a28b16-ecs", "type": "visualization", @@ -53,7 +53,7 @@ { "attributes": { "columns": [ - "agent.hostname", + "host.name", "process.args", "auditd.summary.actor.primary", "auditd.summary.actor.secondary", @@ -68,7 +68,7 @@ "@timestamp", "desc" ], - "title": "Process Executions [Auditbeat Auditd] ECS", + "title": "auditd Executions - Process Executions", "version": 1 }, "id": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", @@ -78,15 +78,15 @@ }, { "attributes": { - "description": "Overview of kernel executions", + "description": "auditd Overview of kernel executions on Malcolm sensors", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"20a8e8d0-c1c8-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 4, \"i\": \"1\", \"h\": 3, \"x\": 4, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"f81a6de0-c1c1-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"3\", \"gridData\": {\"w\": 4, \"i\": \"3\", \"h\": 3, \"x\": 8, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"2efac370-c1ca-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 4, \"i\": \"5\", \"h\": 3, \"x\": 0, \"y\": 0}}, {\"type\": \"search\", \"id\": \"d382f5b0-c1c6-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"6\", \"gridData\": {\"w\": 12, \"i\": \"6\", \"h\": 5, \"x\": 0, \"y\": 3}}]", + "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"20a8e8d0-c1c8-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 4, \"i\": \"1\", \"h\": 6, \"x\": 4, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"f81a6de0-c1c1-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"3\", \"gridData\": {\"w\": 4, \"i\": \"3\", \"h\": 6, \"x\": 8, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"2efac370-c1ca-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 4, \"i\": \"5\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"search\", \"id\": \"d382f5b0-c1c6-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"6\", \"gridData\": {\"w\": 12, \"i\": \"6\", \"h\": 6, \"x\": 0, \"y\": 3}}]", "timeRestore": false, - "title": "[Auditbeat Auditd] Executions ECS", + "title": "Malcolm Sensor auditd Executions Overview", "version": 1 }, "id": "7de391b0-c1ca-11e7-8995-936807a28b16-ecs", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-overview.json b/dashboards/dashboards/beats/auditbeat-kernel-overview.json index 02245fe30..9888fd3a9 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-overview.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-overview.json @@ -6,10 +6,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{}" }, - "title": "Event Actions [Auditbeat Auditd] ECS", + "title": "auditd Kernel - Event Actions", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Event Actions [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"event.module:auditd\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"event.action\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"Actions\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" + "visState": "{\"title\": \"auditd Kernel - Event Actions\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"event.module:auditd\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"event.action\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"Actions\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" }, "id": "97680df0-c1c0-11e7-8995-936807a28b16-ecs", "type": "visualization", @@ -23,10 +23,10 @@ "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "0f10c430-c1c3-11e7-8995-936807a28b16-ecs", - "title": "Event Categories [Auditbeat Auditd] ECS", + "title": "auditd Kernel - Event Categories", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Event Categories [Auditbeat Auditd] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.category\", \"size\": 5, \"customLabel\": \"Category\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 20, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"auditd Kernel - Event Categories\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.category\", \"size\": 5, \"customLabel\": \"Category\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 20, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "08679220-c25a-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -36,7 +36,7 @@ { "attributes": { "columns": [ - "agent.hostname", + "host.name", "auditd.summary.actor.primary", "auditd.summary.actor.secondary", "event.action", @@ -55,7 +55,7 @@ "@timestamp", "desc" ], - "title": "Audit Event Table [Auditbeat Auditd] ECS", + "title": "auditd Kernel - Audit Event Table", "version": 1 }, "id": "0f10c430-c1c3-11e7-8995-936807a28b16-ecs", @@ -65,15 +65,15 @@ }, { "attributes": { - "description": "Summary of Linux kernel audit events.", + "description": "Summary of Linux kernel audit events from Malcolm sensors", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"97680df0-c1c0-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 7, \"i\": \"1\", \"h\": 3, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"08679220-c25a-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 5, \"i\": \"4\", \"h\": 3, \"x\": 7, \"y\": 0}}, {\"type\": \"search\", \"id\": \"0f10c430-c1c3-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 12, \"i\": \"5\", \"h\": 5, \"x\": 0, \"y\": 3}}]", + "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"97680df0-c1c0-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 7, \"i\": \"1\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"08679220-c25a-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 5, \"i\": \"4\", \"h\": 6, \"x\": 7, \"y\": 0}}, {\"type\": \"search\", \"id\": \"0f10c430-c1c3-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 12, \"i\": \"5\", \"h\": 6, \"x\": 0, \"y\": 3}}]", "timeRestore": false, - "title": "[Auditbeat Auditd] Overview ECS", + "title": "Malcolm Sensor auditd Kernel Overview", "version": 1 }, "id": "c0ac2c00-c1c0-11e7-8995-936807a28b16-ecs", diff --git a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json b/dashboards/dashboards/beats/auditbeat-kernel-sockets.json index 7419b3d01..8ab37ca3c 100644 --- a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json +++ b/dashboards/dashboards/beats/auditbeat-kernel-sockets.json @@ -7,10 +7,10 @@ "searchSourceJSON": "{\"filter\": [{\"meta\": {\"apply\": true, \"params\": {\"type\": \"phrase\", \"query\": \"0\"}, \"value\": \"0\", \"alias\": null, \"disabled\": false, \"index\": \"malcolm_beats_*\", \"type\": \"phrase\", \"negate\": true, \"key\": \"auditd.summary.object.secondary\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.secondary\": {\"type\": \"phrase\", \"query\": \"0\"}}}}], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "b4c93470-c240-11e7-8692-232bd1143e8a-ecs", - "title": "Bind (non-ephemeral) [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Bind (non-ephemeral)", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", "version": 1, - "visState": "{\"title\": \"Bind (non-ephemeral) [Auditbeat Auditd] ECS\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.how\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 10, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" + "visState": "{\"title\": \"auditd Sockets - Bind (non-ephemeral)\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.how\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 10, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" }, "id": "faf882f0-c242-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -24,10 +24,10 @@ "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "5438b030-c246-11e7-8692-232bd1143e8a-ecs", - "title": "Connect [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Connect", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", "version": 1, - "visState": "{\"title\": \"Connect [Auditbeat Auditd] ECS\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 5, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" + "visState": "{\"title\": \"auditd Sockets - Connect\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 5, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" }, "id": "ea483730-c246-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -41,10 +41,10 @@ "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, "savedSearchId": "e8734160-c24c-11e7-8692-232bd1143e8a-ecs", - "title": "Accept / Recvfrom Unique Address Table [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Accept / Recvfrom Unique Address Table", "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}, \"spy\": {\"mode\": {\"fill\": false, \"name\": null}}}", "version": 1, - "visState": "{\"title\": \"Accept / Recvfrom Unique Address Table [Auditbeat Auditd] ECS\", \"type\": \"table\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"auditd.summary.object.primary\", \"customLabel\": \"Unique Addresses\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 5, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" + "visState": "{\"title\": \"auditd Sockets - Accept / Recvfrom Unique Address Table\", \"type\": \"table\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"auditd.summary.object.primary\", \"customLabel\": \"Unique Addresses\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 5, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" }, "id": "ceb91de0-c250-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -57,10 +57,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{}" }, - "title": "Socket Syscalls Time Series [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Syscalls Time Series", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Socket Syscalls Time Series [Auditbeat Auditd] ECS\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"6c891740-c252-11e7-8a68-93ffe9ec5950\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"95b603d0-c252-11e7-8a68-93ffe9ec5950\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"auditd.summary.object.type:socket\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"auditd.data.syscall\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"syscall\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"2cebb0c0-c252-11e7-8a68-93ffe9ec5950\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" + "visState": "{\"title\": \"auditd Sockets - Syscalls Time Series\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"6c891740-c252-11e7-8a68-93ffe9ec5950\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"95b603d0-c252-11e7-8a68-93ffe9ec5950\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"auditd.summary.object.type:socket\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"auditd.data.syscall\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"syscall\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"2cebb0c0-c252-11e7-8a68-93ffe9ec5950\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" }, "id": "b21e0c70-c252-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -73,10 +73,10 @@ "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" }, - "title": "Socket Families [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Families", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\": \"Socket Families [Auditbeat Auditd] ECS\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.socket.family\", \"size\": 10, \"customLabel\": \"Socket Family\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 10, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"left\", \"addTooltip\": true, \"addLegend\": true}}" + "visState": "{\"title\": \"auditd Sockets - Families\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.socket.family\", \"size\": 10, \"customLabel\": \"Socket Family\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 10, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"left\", \"addTooltip\": true, \"addLegend\": true}}" }, "id": "a8e20450-c256-11e7-8692-232bd1143e8a-ecs", "type": "visualization", @@ -86,7 +86,7 @@ { "attributes": { "columns": [ - "agent.hostname", + "host.name", "auditd.summary.how", "auditd.summary.object.primary", "auditd.summary.object.secondary", @@ -102,7 +102,7 @@ "@timestamp", "desc" ], - "title": "Socket Binds [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Binds", "version": 1 }, "id": "b4c93470-c240-11e7-8692-232bd1143e8a-ecs", @@ -113,7 +113,7 @@ { "attributes": { "columns": [ - "agent.hostname", + "host.name", "auditd.summary.how", "auditd.summary.object.primary", "auditd.summary.object.secondary", @@ -130,7 +130,7 @@ "@timestamp", "desc" ], - "title": "Socket Connects [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Connects", "version": 1 }, "id": "5438b030-c246-11e7-8692-232bd1143e8a-ecs", @@ -141,7 +141,7 @@ { "attributes": { "columns": [ - "agent.hostname", + "host.name", "auditd.summary.how", "auditd.summary.object.primary", "auditd.summary.object.secondary", @@ -157,7 +157,7 @@ "@timestamp", "desc" ], - "title": "Socket Accept / Recvfrom [Auditbeat Auditd] ECS", + "title": "auditd Sockets - Accept / Recvfrom", "version": 1 }, "id": "e8734160-c24c-11e7-8692-232bd1143e8a-ecs", @@ -167,7 +167,7 @@ }, { "attributes": { - "description": "Summary of socket related syscall events.", + "description": "Summary of socket related syscall events from Malcolm sensors", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" @@ -175,7 +175,7 @@ "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", "panelsJSON": "[{\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"1\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"1\", \"h\": 4, \"x\": 6, \"y\": 3}, \"type\": \"visualization\", \"id\": \"faf882f0-c242-11e7-8692-232bd1143e8a-ecs\"}, {\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"2\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"2\", \"h\": 5, \"x\": 0, \"y\": 7}, \"type\": \"visualization\", \"id\": \"ea483730-c246-11e7-8692-232bd1143e8a-ecs\"}, {\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"3\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"3\", \"h\": 5, \"x\": 6, \"y\": 7}, \"type\": \"visualization\", \"id\": \"ceb91de0-c250-11e7-8692-232bd1143e8a-ecs\"}, {\"type\": \"visualization\", \"id\": \"b21e0c70-c252-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 12, \"i\": \"4\", \"h\": 3, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"a8e20450-c256-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 6, \"i\": \"5\", \"h\": 4, \"x\": 0, \"y\": 3}}]", "timeRestore": false, - "title": "[Auditbeat Auditd] Sockets ECS", + "title": "Malcolm Sensor auditd Sockets Overview", "version": 1 }, "id": "693a5f40-c243-11e7-8692-232bd1143e8a-ecs", diff --git a/dashboards/templates/composable/component/syslog.json b/dashboards/templates/composable/component/syslog.json index cbcc786c1..18ad2de68 100644 --- a/dashboards/templates/composable/component/syslog.json +++ b/dashboards/templates/composable/component/syslog.json @@ -2,6 +2,14 @@ "template": { "mappings": { "properties": { + "process": { + "properties": { + "program": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, "syslog": { "properties": { "facility": { diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index f849a18d3..3f612bb4f 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -64,6 +64,7 @@ filter { "[event][module]", "[syslog][facility]", "[syslog][priority]", + "[process][program]", "[event][original]", "[process][pid]", "[@timestamp]" ] diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index ac4dc2c87..24f42d003 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -68,6 +68,7 @@ filter { "[agent][id]", "[agent][version]", "[log][offset]", + "[log][source]", "[prospector]" ] } From a03358b9e381dbdedc4fda44507b611ebe84ad53 Mon Sep 17 00:00:00 2001 From: SG Date: Tue, 7 Jun 2022 13:37:41 -0600 Subject: [PATCH 039/122] no need to mess up debs for install --- .../hooks/normal/0910-sensor-build.hook.chroot | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index 96c9befe0..d147ac2d8 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -191,23 +191,15 @@ freshclam --stdout --quiet --no-warnings ### -# tweak some dashboards for, then install filebeat/metricbeat/auditbeat +# install filebeat/metricbeat/auditbeat for BEAT in filebeat metricbeat auditbeat; do BEATS_URL="$(echo "$BEATS_DEB_URL_TEMPLATE" | sed "s/$BEATS_DEB_URL_TEMPLATE_REPLACER/$BEAT/g")" BEATS_DEB="$BEAT-$BEATS_VER-amd64.deb" - BEATS_NEW_DEB="$BEAT-tweaked-$BEATS_VER-amd64.deb" - BEATS_TMP_DIR="$BEAT-deb" pushd /tmp && \ curl -f -L -o "$BEATS_DEB" "$BEATS_URL" && \ - dpkg-deb -x "$BEATS_DEB" "$BEATS_TMP_DIR" && \ - dpkg-deb -e "$BEATS_DEB" "$BEATS_TMP_DIR/DEBIAN" && \ - ( [[ "$BEAT" == "metricbeat" ]] && sed -i -e "s@ |\\\\\\\n\[Containers overview\](#/dashboard/CPU-slash-Memory-per-container)@@g" "$BEATS_TMP_DIR"/usr/share/$BEAT/kibana/?/dashboard/* || true ) && \ - pushd "$BEATS_TMP_DIR" && ( rm -f DEBIAN/md5sums && find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -print0 | xargs -l -0 md5sum >> DEBIAN/md5sums ) && popd && \ - dpkg-deb -b "$BEATS_TMP_DIR" "$BEATS_NEW_DEB" && \ - rm -rf "$BEATS_TMP_DIR" && \ - dpkg -i "$BEATS_NEW_DEB" && \ - cp "$BEATS_NEW_DEB" /opt/hedgehog_install_artifacts/ && \ - rm -rf "$BEATS_TMP_DIR" "$BEATS_DEB" "$BEATS_NEW_DEB" && \ + dpkg -i "$BEATS_DEB" && \ + cp "$BEATS_DEB" /opt/hedgehog_install_artifacts/ && \ + rm -rf "$BEATS_DEB" && \ popd done From 0b5c308d928bb24be0cbc620f4ac8f0f39732e73 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 08:07:58 -0600 Subject: [PATCH 040/122] more breaking down templates into components --- .../composable/component/arkime.json | 31 + .../composable/component/suricata.json | 546 ++++++ .../templates/composable/component/zeek.json | 652 +++++++ .../composable/component/zeek_ot.json | 358 ++++ dashboards/templates/malcolm_template.json | 1563 +---------------- docs/contributing/README.md | 2 +- 6 files changed, 1594 insertions(+), 1558 deletions(-) create mode 100644 dashboards/templates/composable/component/arkime.json create mode 100644 dashboards/templates/composable/component/suricata.json create mode 100644 dashboards/templates/composable/component/zeek.json create mode 100644 dashboards/templates/composable/component/zeek_ot.json diff --git a/dashboards/templates/composable/component/arkime.json b/dashboards/templates/composable/component/arkime.json new file mode 100644 index 000000000..9dd04874b --- /dev/null +++ b/dashboards/templates/composable/component/arkime.json @@ -0,0 +1,31 @@ +{ + "template": { + "mappings": { + "properties": { + "destination.geo.country_code2": { "type": "keyword" }, + "destination.geo.country_code3": { "type": "keyword" }, + "destination.geo.dma_code": { "type": "short" }, + "destination.geo.ip": { "type": "ip" }, + "destination.geo.latitude": { "type": "float" }, + "destination.geo.location": { "type": "geo_point" }, + "destination.geo.longitude": { "type": "float" }, + "dns.host": { "type": "keyword" }, + "firstPacket": { "type": "date" }, + "lastPacket": { "type": "date" }, + "node": { "type": "keyword" }, + "protocol": { "type": "keyword" }, + "quic.host": { "type": "keyword" }, + "quic.version": { "type": "keyword" }, + "source.geo.country_code2": { "type": "keyword" }, + "source.geo.country_code3": { "type": "keyword" }, + "source.geo.dma_code": { "type": "short" }, + "source.geo.ip": { "type": "ip" }, + "source.geo.latitude": { "type": "float" }, + "source.geo.location": { "type": "geo_point" }, + "source.geo.longitude": { "type": "float" }, + "timestamp": { "type": "date" }, + "user": { "type": "keyword" } + } + } + } +} diff --git a/dashboards/templates/composable/component/suricata.json b/dashboards/templates/composable/component/suricata.json new file mode 100644 index 000000000..769713391 --- /dev/null +++ b/dashboards/templates/composable/component/suricata.json @@ -0,0 +1,546 @@ +{ + "template": { + "mappings": { + "properties": { + "suricata.alert.action": { "type": "keyword" }, + "suricata.alert.metadata.created_at": { "type": "keyword" }, + "suricata.alert.metadata.malware_family": { "type": "keyword" }, + "suricata.alert.metadata.performance_impact": { "type": "keyword" }, + "suricata.alert.metadata.signature_severity": { "type": "keyword" }, + "suricata.alert.metadata.updated_at": { "type": "keyword" }, + "suricata.alert.rev": { "type": "integer" }, + "suricata.alert.severity": { "type": "integer" }, + "suricata.anomaly.app_proto": { "type": "keyword" }, + "suricata.anomaly.code": { "type": "integer" }, + "suricata.anomaly.event": { "type": "keyword" }, + "suricata.anomaly.event_no": { "type": "keyword" }, + "suricata.anomaly.layer": { "type": "keyword" }, + "suricata.anomaly.type": { "type": "keyword" }, + "suricata.app_proto_expected": { "type": "keyword" }, + "suricata.app_proto_orig": { "type": "keyword" }, + "suricata.app_proto_tc": { "type": "keyword" }, + "suricata.app_proto_ts": { "type": "keyword" }, + "suricata.dhcp.assigned_ip": { "type": "ip" }, + "suricata.dhcp.client_id": { "type": "keyword" }, + "suricata.dhcp.client_ip": { "type": "ip" }, + "suricata.dhcp.client_mac": { "type": "keyword" }, + "suricata.dhcp.dhcp_type": { "type": "keyword" }, + "suricata.dhcp.dns_servers": { "type": "keyword" }, + "suricata.dhcp.hostname": { "type": "keyword" }, + "suricata.dhcp.id": { "type": "keyword" }, + "suricata.dhcp.lease_time": { "type": "integer" }, + "suricata.dhcp.next_server_ip": { "type": "ip" }, + "suricata.dhcp.params": { "type": "keyword" }, + "suricata.dhcp.rebinding_time": { "type": "integer" }, + "suricata.dhcp.relay_ip": { "type": "ip" }, + "suricata.dhcp.renewal_time": { "type": "integer" }, + "suricata.dhcp.requested_ip": { "type": "ip" }, + "suricata.dhcp.routers": { "type": "keyword" }, + "suricata.dhcp.subnet_mask": { "type": "keyword" }, + "suricata.dhcp.type": { "type": "keyword" }, + "suricata.dnp3.application.complete": { "type": "keyword" }, + "suricata.dnp3.application.control.con": { "type": "keyword" }, + "suricata.dnp3.application.control.fin": { "type": "keyword" }, + "suricata.dnp3.application.control.fir": { "type": "keyword" }, + "suricata.dnp3.application.control.sequence": { "type": "integer" }, + "suricata.dnp3.application.control.uns": { "type": "keyword" }, + "suricata.dnp3.application.function_code": { "type": "integer" }, + "suricata.dnp3.application.objects": { + "type": "nested", + "properties": { + "count": { "type": "integer" }, + "group": { "type": "integer" }, + "prefix_code": { "type": "integer" }, + "qualifier": { "type": "integer" }, + "range_code": { "type": "integer" }, + "start": { "type": "integer" }, + "stop": { "type": "integer" }, + "variation": { "type": "integer" }, + "points": { + "type": "nested", + "properties": { + "authentication_key": { "type": "integer" }, + "block_number": { "type": "integer" }, + "challenge_data_len": { "type": "integer" }, + "chatter_filter": { "type": "integer" }, + "comm_lost": { "type": "integer" }, + "count": { "type": "integer" }, + "cr": { "type": "integer" }, + "created": { "type": "integer" }, + "data.mac_value": { "type": "keyword" }, + "data.wrapped_key_data": { "type": "keyword" }, + "delay_ms": { "type": "integer" }, + "file_data": { "type": "keyword" }, + "file_handle": { "type": "integer" }, + "file_size": { "type": "long" }, + "filename": { "type": "keyword" }, + "filename_offset": { "type": "integer" }, + "filename_size": { "type": "integer" }, + "index": { "type": "integer" }, + "key_status": { "type": "integer" }, + "key_wrap_alg": { "type": "integer" }, + "ksq": { "type": "integer" }, + "local_forced": { "type": "integer" }, + "mal": { "type": "integer" }, + "maximum_block_size": { "type": "integer" }, + "offtime": { "type": "integer" }, + "online": { "type": "integer" }, + "ontime": { "type": "integer" }, + "op_type": { "type": "integer" }, + "operational_mode": { "type": "integer" }, + "optional_text": { "type": "keyword" }, + "over_range": { "type": "integer" }, + "permissions": { "type": "integer" }, + "prefix": { "type": "integer" }, + "qu": { "type": "integer" }, + "reference_err": { "type": "integer" }, + "remote_forced": { "type": "integer" }, + "request_id": { "type": "keyword" }, + "reserved": { "type": "integer" }, + "reserved0": { "type": "integer" }, + "reserved1": { "type": "integer" }, + "restart": { "type": "integer" }, + "size": { "type": "integer" }, + "state": { "type": "integer" }, + "status_code": { "type": "integer" }, + "tcc": { "type": "integer" }, + "timestamp": { "type": "date" }, + "user_number": { "type": "integer" }, + "usr": { "type": "integer" }, + "value": { "type": "keyword" } + } + } + } + }, + "suricata.dnp3.control.dir": { "type": "keyword" }, + "suricata.dnp3.control.fcb": { "type": "keyword" }, + "suricata.dnp3.control.fcv": { "type": "keyword" }, + "suricata.dnp3.control.function_code": { "type": "integer" }, + "suricata.dnp3.control.pri": { "type": "keyword" }, + "suricata.dnp3.dst": { "type": "integer" }, + "suricata.dnp3.iin.indicators": { "type": "keyword" }, + "suricata.dnp3.request.application.complete": { "type": "keyword" }, + "suricata.dnp3.request.application.control.con": { "type": "keyword" }, + "suricata.dnp3.request.application.control.fin": { "type": "keyword" }, + "suricata.dnp3.request.application.control.fir": { "type": "keyword" }, + "suricata.dnp3.request.application.control.sequence": { "type": "integer" }, + "suricata.dnp3.request.application.control.uns": { "type": "keyword" }, + "suricata.dnp3.request.application.function_code": { "type": "integer" }, + "suricata.dnp3.request.application.objects": { + "type": "nested", + "properties": { + "count": { "type": "integer" }, + "group": { "type": "integer" }, + "prefix_code": { "type": "integer" }, + "qualifier": { "type": "integer" }, + "range_code": { "type": "integer" }, + "start": { "type": "integer" }, + "stop": { "type": "integer" }, + "variation": { "type": "integer" }, + "points": { + "type": "nested", + "properties": { + "authentication_key": { "type": "integer" }, + "count": { "type": "integer" }, + "cr": { "type": "integer" }, + "created": { "type": "integer" }, + "file_size": { "type": "long" }, + "filename": { "type": "keyword" }, + "filename_offset": { "type": "integer" }, + "filename_size": { "type": "integer" }, + "index": { "type": "integer" }, + "maximum_block_size": { "type": "integer" }, + "offtime": { "type": "integer" }, + "ontime": { "type": "integer" }, + "op_type": { "type": "integer" }, + "operational_mode": { "type": "integer" }, + "permissions": { "type": "integer" }, + "prefix": { "type": "integer" }, + "qu": { "type": "integer" }, + "request_id": { "type": "keyword" }, + "reserved": { "type": "integer" }, + "size": { "type": "integer" }, + "status_code": { "type": "integer" }, + "tcc": { "type": "integer" }, + "timestamp": { "type": "date" }, + "user_number": { "type": "integer" } + } + } + } + }, + "suricata.dnp3.request.control.dir": { "type": "keyword" }, + "suricata.dnp3.request.control.fcb": { "type": "keyword" }, + "suricata.dnp3.request.control.fcv": { "type": "keyword" }, + "suricata.dnp3.request.control.function_code": { "type": "integer" }, + "suricata.dnp3.request.control.pri": { "type": "keyword" }, + "suricata.dnp3.request.dst": { "type": "integer" }, + "suricata.dnp3.request.src": { "type": "integer" }, + "suricata.dnp3.request.type": { "type": "keyword" }, + "suricata.dnp3.response.application.complete": { "type": "keyword" }, + "suricata.dnp3.response.application.control.con": { "type": "keyword" }, + "suricata.dnp3.response.application.control.fin": { "type": "keyword" }, + "suricata.dnp3.response.application.control.fir": { "type": "keyword" }, + "suricata.dnp3.response.application.control.sequence": { "type": "integer" }, + "suricata.dnp3.response.application.control.uns": { "type": "keyword" }, + "suricata.dnp3.response.application.function_code": { "type": "integer" }, + "suricata.dnp3.response.application.objects": { + "type": "nested", + "properties": { + "count": { "type": "integer" }, + "group": { "type": "integer" }, + "prefix_code": { "type": "integer" }, + "qualifier": { "type": "integer" }, + "range_code": { "type": "integer" }, + "start": { "type": "integer" }, + "stop": { "type": "integer" }, + "variation": { "type": "integer" }, + "points": { + "type": "nested", + "properties": { + "challenge_data_len": { "type": "integer" }, + "chatter_filter": { "type": "integer" }, + "comm_lost": { "type": "integer" }, + "count": { "type": "integer" }, + "cr": { "type": "integer" }, + "data.challenge_data": { "type": "keyword" }, + "data.mac_value": { "type": "keyword" }, + "delay_ms": { "type": "integer" }, + "file_handle": { "type": "integer" }, + "file_size": { "type": "long" }, + "index": { "type": "integer" }, + "key_status": { "type": "integer" }, + "key_wrap_alg": { "type": "integer" }, + "ksq": { "type": "integer" }, + "local_forced": { "type": "integer" }, + "mal": { "type": "integer" }, + "maximum_block_size": { "type": "integer" }, + "offtime": { "type": "integer" }, + "online": { "type": "integer" }, + "ontime": { "type": "integer" }, + "op_type": { "type": "integer" }, + "optional_text": { "type": "keyword" }, + "over_range": { "type": "integer" }, + "prefix": { "type": "integer" }, + "qu": { "type": "integer" }, + "reference_err": { "type": "integer" }, + "remote_forced": { "type": "integer" }, + "request_id": { "type": "keyword" }, + "reserved": { "type": "integer" }, + "reserved0": { "type": "integer" }, + "reserved1": { "type": "integer" }, + "restart": { "type": "integer" }, + "size": { "type": "integer" }, + "state": { "type": "integer" }, + "status_code": { "type": "integer" }, + "tcc": { "type": "integer" }, + "user_number": { "type": "integer" }, + "value": { "type": "keyword" } + } + } + } + }, + "suricata.dnp3.response.control.dir": { "type": "keyword" }, + "suricata.dnp3.response.control.fcb": { "type": "keyword" }, + "suricata.dnp3.response.control.fcv": { "type": "keyword" }, + "suricata.dnp3.response.control.function_code": { "type": "integer" }, + "suricata.dnp3.response.control.pri": { "type": "keyword" }, + "suricata.dnp3.response.dst": { "type": "integer" }, + "suricata.dnp3.response.iin.indicators": { "type": "keyword" }, + "suricata.dnp3.response.src": { "type": "integer" }, + "suricata.dnp3.response.type": { "type": "keyword" }, + "suricata.dnp3.src": { "type": "integer" }, + "suricata.dnp3.type": { "type": "keyword" }, + "suricata.dns.aa": { "type": "keyword" }, + "suricata.dns.answer.aa": { "type": "keyword" }, + "suricata.dns.answer.authorities.rrname": { "type": "keyword" }, + "suricata.dns.answer.authorities.rrtype": { "type": "keyword" }, + "suricata.dns.answer.authorities.ttl": { "type": "integer" }, + "suricata.dns.answer.flags": { "type": "keyword" }, + "suricata.dns.answer.id": { "type": "integer" }, + "suricata.dns.answer.qr": { "type": "keyword" }, + "suricata.dns.answer.ra": { "type": "keyword" }, + "suricata.dns.answer.rcode": { "type": "keyword" }, + "suricata.dns.answer.rrname": { "type": "keyword" }, + "suricata.dns.answer.rrtype": { "type": "keyword" }, + "suricata.dns.answer.type": { "type": "keyword" }, + "suricata.dns.answer.version": { "type": "integer" }, + "suricata.dns.answers.rdata": { "type": "keyword" }, + "suricata.dns.answers.rrname": { "type": "keyword" }, + "suricata.dns.answers.rrtype": { "type": "keyword" }, + "suricata.dns.answers.ttl": { "type": "long" }, + "suricata.dns.authorities.rdata": { "type": "keyword" }, + "suricata.dns.authorities.rrname": { "type": "keyword" }, + "suricata.dns.authorities.rrtype": { "type": "keyword" }, + "suricata.dns.authorities.ttl": { "type": "integer" }, + "suricata.dns.flags": { "type": "keyword" }, + "suricata.dns.qr": { "type": "keyword" }, + "suricata.dns.query.id": { "type": "integer" }, + "suricata.dns.query.rrname": { "type": "keyword" }, + "suricata.dns.query.rrtype": { "type": "keyword" }, + "suricata.dns.query.tx_id": { "type": "keyword" }, + "suricata.dns.query.type": { "type": "keyword" }, + "suricata.dns.ra": { "type": "keyword" }, + "suricata.dns.rd": { "type": "keyword" }, + "suricata.dns.rrname": { "type": "keyword" }, + "suricata.dns.rrtype": { "type": "keyword" }, + "suricata.dns.tc": { "type": "keyword" }, + "suricata.dns.tx_id": { "type": "keyword" }, + "suricata.dns.version": { "type": "integer" }, + "suricata.email.attachment": { "type": "keyword" }, + "suricata.email.body_md5": { "type": "keyword" }, + "suricata.email.cc": { "type": "keyword" }, + "suricata.email.from": { "type": "keyword" }, + "suricata.email.status": { "type": "keyword" }, + "suricata.email.subject_md5": { "type": "keyword" }, + "suricata.email.to": { "type": "keyword" }, + "suricata.fileinfo.end": { "type": "integer" }, + "suricata.fileinfo.file_id": { "type": "keyword" }, + "suricata.fileinfo.filename": { "type": "keyword" }, + "suricata.fileinfo.gaps": { "type": "keyword" }, + "suricata.fileinfo.magic": { "type": "keyword" }, + "suricata.fileinfo.md5": { "type": "keyword" }, + "suricata.fileinfo.sha1": { "type": "keyword" }, + "suricata.fileinfo.sha256": { "type": "keyword" }, + "suricata.fileinfo.sid": { "type": "integer" }, + "suricata.fileinfo.size": { "type": "long" }, + "suricata.fileinfo.start": { "type": "integer" }, + "suricata.fileinfo.state": { "type": "keyword" }, + "suricata.fileinfo.tx_id": { "type": "keyword" }, + "suricata.files": { + "type": "nested", + "properties": { + "end": { "type": "keyword" }, + "filename": { "type": "keyword" }, + "gaps": { "type": "keyword" }, + "size": { "type": "long" }, + "start": { "type": "keyword" }, + "state": { "type": "keyword" }, + "tx_id": { "type": "keyword" } + } + }, + "suricata.flow.age": { "type": "integer" }, + "suricata.flow.alerted": { "type": "keyword" }, + "suricata.flow.bytes_toclient": { "type": "integer" }, + "suricata.flow.bytes_toserver": { "type": "integer" }, + "suricata.flow.emergency": { "type": "keyword" }, + "suricata.flow.end": { "type": "date" }, + "suricata.flow.pkts_toclient": { "type": "integer" }, + "suricata.flow.pkts_toserver": { "type": "integer" }, + "suricata.flow.reason": { "type": "keyword" }, + "suricata.flow.start": { "type": "date" }, + "suricata.flow.state": { "type": "keyword" }, + "suricata.flow_id": { "type": "keyword" }, + "suricata.ftp.command ": { "type": "keyword" }, + "suricata.ftp.command": { "type": "keyword" }, + "suricata.ftp.command_data": { "type": "keyword" }, + "suricata.ftp.completion_code": { "type": "keyword" }, + "suricata.ftp.dynamic_port": { "type": "integer" }, + "suricata.ftp.reply": { "type": "keyword" }, + "suricata.ftp.reply_received": { "type": "keyword" }, + "suricata.http.content_range.end": { "type": "integer" }, + "suricata.http.content_range.raw": { "type": "keyword" }, + "suricata.http.content_range.size": { "type": "integer" }, + "suricata.http.content_range.start": { "type": "integer" }, + "suricata.http.hostname": { "type": "keyword" }, + "suricata.http.http_content_type": { "type": "keyword" }, + "suricata.http.http_method": { "type": "keyword" }, + "suricata.http.http_port": { "type": "integer" }, + "suricata.http.http_refer": { "type": "keyword" }, + "suricata.http.http_request_body": { "type": "keyword" }, + "suricata.http.http_request_body_printable": { "type": "keyword" }, + "suricata.http.http_response_body": { "type": "keyword" }, + "suricata.http.http_response_body_printable": { "type": "keyword" }, + "suricata.http.http_user_agent": { "type": "keyword" }, + "suricata.http.length": { "type": "integer" }, + "suricata.http.redirect": { "type": "keyword" }, + "suricata.http.request_headers.name": { "type": "keyword" }, + "suricata.http.request_headers.value": { "type": "keyword" }, + "suricata.http.response_headers.name": { "type": "keyword" }, + "suricata.http.response_headers.value": { "type": "keyword" }, + "suricata.http.url": { "type": "keyword" }, + "suricata.icmp_code": { "type": "integer" }, + "suricata.icmp_type": { "type": "integer" }, + "suricata.ikev2.alg_auth": { "type": "keyword" }, + "suricata.ikev2.alg_dh": { "type": "keyword" }, + "suricata.ikev2.alg_enc": { "type": "keyword" }, + "suricata.ikev2.alg_esn": { "type": "keyword" }, + "suricata.ikev2.alg_prf": { "type": "keyword" }, + "suricata.ikev2.errors": { "type": "integer" }, + "suricata.ikev2.exchange_type": { "type": "integer" }, + "suricata.ikev2.init_spi": { "type": "keyword" }, + "suricata.ikev2.message_id": { "type": "keyword" }, + "suricata.ikev2.notify": { "type": "keyword" }, + "suricata.ikev2.payload": { "type": "keyword" }, + "suricata.ikev2.resp_spi": { "type": "keyword" }, + "suricata.ikev2.role": { "type": "keyword" }, + "suricata.ikev2.version_major": { "type": "integer" }, + "suricata.ikev2.version_minor": { "type": "integer" }, + "suricata.in_iface": { "type": "keyword" }, + "suricata.krb5.cname": { "type": "keyword" }, + "suricata.krb5.encryption": { "type": "keyword" }, + "suricata.krb5.error_code": { "type": "keyword" }, + "suricata.krb5.failed_request": { "type": "keyword" }, + "suricata.krb5.msg_type": { "type": "keyword" }, + "suricata.krb5.realm": { "type": "keyword" }, + "suricata.krb5.sname": { "type": "keyword" }, + "suricata.krb5.weak_encryption": { "type": "keyword" }, + "suricata.netflow.age": { "type": "integer" }, + "suricata.netflow.bytes": { "type": "integer" }, + "suricata.netflow.end": { "type": "keyword" }, + "suricata.netflow.max_ttl": { "type": "integer" }, + "suricata.netflow.min_ttl": { "type": "integer" }, + "suricata.netflow.pkts": { "type": "integer" }, + "suricata.netflow.start": { "type": "keyword" }, + "suricata.nfs.file_tx": { "type": "keyword" }, + "suricata.nfs.filename": { "type": "keyword" }, + "suricata.nfs.hhash": { "type": "keyword" }, + "suricata.nfs.id": { "type": "integer" }, + "suricata.nfs.procedure": { "type": "keyword" }, + "suricata.nfs.rename.from": { "type": "keyword" }, + "suricata.nfs.rename.to": { "type": "keyword" }, + "suricata.nfs.status": { "type": "keyword" }, + "suricata.nfs.type": { "type": "keyword" }, + "suricata.nfs.version": { "type": "integer" }, + "suricata.pcap_cnt": { "type": "integer" }, + "suricata.pcap_filename": { "type": "keyword" }, + "suricata.rdp.channels": { "type": "keyword" }, + "suricata.rdp.client.build": { "type": "keyword" }, + "suricata.rdp.client.capabilities": { "type": "keyword" }, + "suricata.rdp.client.client_name": { "type": "keyword" }, + "suricata.rdp.client.color_depth": { "type": "integer" }, + "suricata.rdp.client.connection_hint": { "type": "keyword" }, + "suricata.rdp.client.desktop_height": { "type": "integer" }, + "suricata.rdp.client.desktop_width": { "type": "integer" }, + "suricata.rdp.client.function_keys": { "type": "integer" }, + "suricata.rdp.client.id": { "type": "keyword" }, + "suricata.rdp.client.keyboard_layout": { "type": "keyword" }, + "suricata.rdp.client.keyboard_type": { "type": "keyword" }, + "suricata.rdp.client.product_id": { "type": "keyword" }, + "suricata.rdp.client.version": { "type": "keyword" }, + "suricata.rdp.cookie": { "type": "keyword" }, + "suricata.rdp.error_code": { "type": "integer" }, + "suricata.rdp.event_type": { "type": "keyword" }, + "suricata.rdp.protocol": { "type": "keyword" }, + "suricata.rdp.reason": { "type": "keyword" }, + "suricata.rdp.server_supports": { "type": "keyword" }, + "suricata.rdp.tx_id": { "type": "keyword" }, + "suricata.rdp.x509_serials": { "type": "keyword" }, + "suricata.response_icmp_code": { "type": "integer" }, + "suricata.response_icmp_type": { "type": "integer" }, + "suricata.rpc.auth_type": { "type": "keyword" }, + "suricata.rpc.creds.gid": { "type": "integer" }, + "suricata.rpc.creds.machine_name": { "type": "keyword" }, + "suricata.rpc.creds.uid": { "type": "integer" }, + "suricata.rpc.status": { "type": "keyword" }, + "suricata.rpc.xid": { "type": "integer" }, + "suricata.sip.code": { "type": "keyword" }, + "suricata.sip.method": { "type": "keyword" }, + "suricata.sip.reason": { "type": "keyword" }, + "suricata.sip.request_line": { "type": "keyword" }, + "suricata.sip.response_line": { "type": "keyword" }, + "suricata.sip.uri": { "type": "keyword" }, + "suricata.sip.version": { "type": "keyword" }, + "suricata.smb.access": { "type": "keyword" }, + "suricata.smb.accessed": { "type": "integer" }, + "suricata.smb.changed": { "type": "integer" }, + "suricata.smb.client_dialects": { "type": "keyword" }, + "suricata.smb.client_dialects[]": { "type": "keyword" }, + "suricata.smb.client_guid": { "type": "keyword" }, + "suricata.smb.command": { "type": "keyword" }, + "suricata.smb.created": { "type": "integer" }, + "suricata.smb.dcerpc.call_id": { "type": "keyword" }, + "suricata.smb.dcerpc.interfaces.ack_reason": { "type": "integer" }, + "suricata.smb.dcerpc.interfaces.ack_result": { "type": "integer" }, + "suricata.smb.dcerpc.interfaces.uuid": { "type": "keyword" }, + "suricata.smb.dcerpc.interfaces.version": { "type": "keyword" }, + "suricata.smb.dcerpc.opnum": { "type": "integer" }, + "suricata.smb.dcerpc.req.frag_cnt": { "type": "integer" }, + "suricata.smb.dcerpc.req.stub_data_size": { "type": "integer" }, + "suricata.smb.dcerpc.request": { "type": "keyword" }, + "suricata.smb.dcerpc.res.frag_cnt": { "type": "integer" }, + "suricata.smb.dcerpc.res.stub_data_size": { "type": "integer" }, + "suricata.smb.dcerpc.response": { "type": "keyword" }, + "suricata.smb.dialect": { "type": "keyword" }, + "suricata.smb.directory": { "type": "keyword" }, + "suricata.smb.disposition": { "type": "keyword" }, + "suricata.smb.filename": { "type": "keyword" }, + "suricata.smb.fuid": { "type": "keyword" }, + "suricata.smb.function": { "type": "keyword" }, + "suricata.smb.id": { "type": "integer" }, + "suricata.smb.kerberos.realm": { "type": "keyword" }, + "suricata.smb.kerberos.snames": { "type": "keyword" }, + "suricata.smb.modified": { "type": "integer" }, + "suricata.smb.named_pipe": { "type": "keyword" }, + "suricata.smb.ntlmssp.domain": { "type": "keyword" }, + "suricata.smb.ntlmssp.host": { "type": "keyword" }, + "suricata.smb.ntlmssp.user": { "type": "keyword" }, + "suricata.smb.rename.from": { "type": "keyword" }, + "suricata.smb.rename.to": { "type": "keyword" }, + "suricata.smb.request.native_lm": { "type": "keyword" }, + "suricata.smb.request.native_os": { "type": "keyword" }, + "suricata.smb.response.native_lm": { "type": "keyword" }, + "suricata.smb.response.native_os": { "type": "keyword" }, + "suricata.smb.server_guid": { "type": "keyword" }, + "suricata.smb.service.request": { "type": "keyword" }, + "suricata.smb.service.response": { "type": "keyword" }, + "suricata.smb.session_id": { "type": "keyword" }, + "suricata.smb.set_info.class": { "type": "keyword" }, + "suricata.smb.set_info.info_level": { "type": "keyword" }, + "suricata.smb.share": { "type": "keyword" }, + "suricata.smb.share_type": { "type": "keyword" }, + "suricata.smb.size": { "type": "integer" }, + "suricata.smb.status": { "type": "keyword" }, + "suricata.smb.status_code": { "type": "keyword" }, + "suricata.smb.tree_id": { "type": "keyword" }, + "suricata.smtp.helo": { "type": "keyword" }, + "suricata.snmp.community": { "type": "keyword" }, + "suricata.snmp.error": { "type": "keyword" }, + "suricata.snmp.pdu_type": { "type": "keyword" }, + "suricata.snmp.trap_address": { "type": "ip" }, + "suricata.snmp.trap_oid": { "type": "keyword" }, + "suricata.snmp.trap_type": { "type": "keyword" }, + "suricata.snmp.usm": { "type": "keyword" }, + "suricata.snmp.vars": { "type": "keyword" }, + "suricata.snmp.version": { "type": "integer" }, + "suricata.ssh.client.proto_version": { "type": "keyword" }, + "suricata.ssh.client.software_version": { "type": "keyword" }, + "suricata.ssh.server.proto_version": { "type": "keyword" }, + "suricata.ssh.server.software_version": { "type": "keyword" }, + "suricata.stream": { "type": "integer" }, + "suricata.tcp.ack": { "type": "keyword" }, + "suricata.tcp.cwr": { "type": "keyword" }, + "suricata.tcp.ecn": { "type": "keyword" }, + "suricata.tcp.fin": { "type": "keyword" }, + "suricata.tcp.psh": { "type": "keyword" }, + "suricata.tcp.rst": { "type": "keyword" }, + "suricata.tcp.state": { "type": "keyword" }, + "suricata.tcp.syn": { "type": "keyword" }, + "suricata.tcp.tcp_flags": { "type": "keyword" }, + "suricata.tcp.tcp_flags_tc": { "type": "keyword" }, + "suricata.tcp.tcp_flags_ts": { "type": "keyword" }, + "suricata.tcp.urg": { "type": "keyword" }, + "suricata.tftp.file": { "type": "keyword" }, + "suricata.tftp.mode": { "type": "keyword" }, + "suricata.tftp.packet": { "type": "keyword" }, + "suricata.timestamp": { "type": "date" }, + "suricata.tls.fingerprint": { "type": "keyword" }, + "suricata.tls.from_proto": { "type": "keyword" }, + "suricata.tls.issuerdn": { "type": "keyword" }, + "suricata.tls.notafter": { "type": "date" }, + "suricata.tls.notbefore": { "type": "date" }, + "suricata.tls.serial": { "type": "keyword" }, + "suricata.tls.session_resumed": { "type": "keyword" }, + "suricata.tls.sni": { "type": "keyword" }, + "suricata.tls.subject": { "type": "keyword" }, + "suricata.tls.version": { "type": "keyword" }, + "suricata.tunnel.depth": { "type": "integer" }, + "suricata.tunnel.dest_ip": { "type": "ip" }, + "suricata.tunnel.dest_port": { "type": "integer" }, + "suricata.tunnel.proto": { "type": "keyword" }, + "suricata.tunnel.src_ip": { "type": "ip" }, + "suricata.tunnel.src_port": { "type": "integer" }, + "suricata.tx_id": { "type": "keyword" } + } + } + } +} diff --git a/dashboards/templates/composable/component/zeek.json b/dashboards/templates/composable/component/zeek.json new file mode 100644 index 000000000..7e7e57d85 --- /dev/null +++ b/dashboards/templates/composable/component/zeek.json @@ -0,0 +1,652 @@ +{ + "template": { + "mappings": { + "properties": { + "zeek.conn.conn_state": { "type": "keyword" }, + "zeek.conn.conn_state_description": { "type": "keyword" }, + "zeek.conn.duration": { "type": "float" }, + "zeek.conn.history": { "type": "keyword" }, + "zeek.conn.inner_vlan": { "type": "integer" }, + "zeek.conn.local_orig": { "type": "keyword" }, + "zeek.conn.local_resp": { "type": "keyword" }, + "zeek.conn.missed_bytes": { "type": "long" }, + "zeek.conn.orig_bytes": { "type": "long" }, + "zeek.conn.orig_ip_bytes": { "type": "long" }, + "zeek.conn.orig_pkts": { "type": "integer" }, + "zeek.conn.resp_bytes": { "type": "long" }, + "zeek.conn.resp_ip_bytes": { "type": "long" }, + "zeek.conn.resp_pkts": { "type": "integer" }, + "zeek.conn.tunnel_parents": { "type": "keyword" }, + "zeek.conn.vlan": { "type": "integer" }, + "zeek.dce_rpc.endpoint": { "type": "keyword" }, + "zeek.dce_rpc.named_pipe": { "type": "keyword" }, + "zeek.dce_rpc.operation": { "type": "keyword" }, + "zeek.dce_rpc.rtt": { "type": "float" }, + "zeek.dhcp.assigned_ip": { "type": "ip" }, + "zeek.dhcp.client_fqdn": { "type": "keyword" }, + "zeek.dhcp.client_message": { "type": "keyword" }, + "zeek.dhcp.client_software": { "type": "keyword" }, + "zeek.dhcp.domain": { "type": "keyword" }, + "zeek.dhcp.duration": { "type": "float" }, + "zeek.dhcp.host_name": { "type": "keyword" }, + "zeek.dhcp.lease_time": { "type": "float" }, + "zeek.dhcp.mac": { "type": "keyword" }, + "zeek.dhcp.msg_types": { "type": "keyword" }, + "zeek.dhcp.requested_ip": { "type": "ip" }, + "zeek.dhcp.server_message": { "type": "keyword" }, + "zeek.dhcp.server_software": { "type": "keyword" }, + "zeek.dhcp.trans_id": { "type": "keyword" }, + "zeek.dns.AA": { "type": "keyword" }, + "zeek.dns.answers": { "type": "keyword" }, + "zeek.dns.qclass": { "type": "keyword" }, + "zeek.dns.qclass_name": { "type": "keyword" }, + "zeek.dns.qtype": { "type": "keyword" }, + "zeek.dns.qtype_name": { "type": "keyword" }, + "zeek.dns.query": { "type": "keyword" }, + "zeek.dns.RA": { "type": "keyword" }, + "zeek.dns.rcode": { "type": "short" }, + "zeek.dns.rcode_name": { "type": "keyword" }, + "zeek.dns.RD": { "type": "keyword" }, + "zeek.dns.rejected": { "type": "keyword" }, + "zeek.dns.rtt": { "type": "float" }, + "zeek.dns.TC": { "type": "keyword" }, + "zeek.dns.trans_id": { "type": "keyword" }, + "zeek.dns.TTLs": { "type": "float" }, + "zeek.dns.Z": { "type": "keyword" }, + "zeek.dpd.failure_reason": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.dpd.service": { "type": "keyword" }, + "zeek.files.analyzers": { "type": "keyword" }, + "zeek.files.conn_uids": { "type": "keyword" }, + "zeek.files.depth": { "type": "integer" }, + "zeek.files.duration": { "type": "float" }, + "zeek.files.extracted": { "type": "keyword" }, + "zeek.files.extracted_cutoff": { "type": "keyword" }, + "zeek.files.extracted_size": { "type": "long" }, + "zeek.files.filename": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.files.ftime": { "type": "date" }, + "zeek.files.is_orig": { "type": "keyword" }, + "zeek.files.local_orig": { "type": "keyword" }, + "zeek.files.md5": { "type": "keyword" }, + "zeek.files.mime_type": { "type": "keyword" }, + "zeek.files.missing_bytes": { "type": "long" }, + "zeek.files.overflow_bytes": { "type": "long" }, + "zeek.files.parent_fuid": { "type": "keyword" }, + "zeek.files.rx_hosts": { "type": "ip" }, + "zeek.files.seen_bytes": { "type": "long" }, + "zeek.files.sha1": { "type": "keyword" }, + "zeek.files.sha256": { "type": "keyword" }, + "zeek.files.timedout": { "type": "keyword" }, + "zeek.files.total_bytes": { "type": "long" }, + "zeek.files.tx_hosts": { "type": "ip" }, + "zeek.ftp.arg": { "type": "keyword" }, + "zeek.ftp.command": { "type": "keyword" }, + "zeek.ftp.data_channel_orig_h": { "type": "ip" }, + "zeek.ftp.data_channel_passive": { "type": "keyword" }, + "zeek.ftp.data_channel_resp_h": { "type": "ip" }, + "zeek.ftp.data_channel_resp_p": { "type": "integer" }, + "zeek.ftp.file_size": { "type": "long" }, + "zeek.ftp.mime_type": { "type": "keyword" }, + "zeek.ftp.reply_code": { "type": "short" }, + "zeek.ftp.reply_msg": { "type": "keyword" }, + "zeek.fuid": { "type": "keyword" }, + "zeek.gquic.cyu": { "type": "keyword" }, + "zeek.gquic.cyutags": { "type": "keyword" }, + "zeek.gquic.server_name": { "type": "keyword" }, + "zeek.gquic.tag_count": { "type": "integer" }, + "zeek.gquic.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.gquic.version": { "type": "keyword" }, + "zeek.http.host": { "type": "keyword" }, + "zeek.http.info_code": { "type": "short" }, + "zeek.http.info_msg": { "type": "keyword" }, + "zeek.http.method": { "type": "keyword" }, + "zeek.http.orig_filenames": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.http.orig_fuids": { "type": "keyword" }, + "zeek.http.orig_mime_types": { "type": "keyword" }, + "zeek.http.origin": { "type": "keyword" }, + "zeek.http.post_password_plain": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.http.post_username": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.http.proxied": { "type": "keyword" }, + "zeek.http.referrer": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.http.request_body_len": { "type": "long" }, + "zeek.http.resp_filenames": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.http.resp_fuids": { "type": "keyword" }, + "zeek.http.resp_mime_types": { "type": "keyword" }, + "zeek.http.response_body_len": { "type": "long" }, + "zeek.http.status_code": { "type": "short" }, + "zeek.http.status_msg": { "type": "keyword", "ignore_above": 1024 }, + "zeek.http.tags": { "type": "keyword" }, + "zeek.http.trans_depth": { "type": "integer" }, + "zeek.http.uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.http.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.http.version": { "type": "keyword" }, + "zeek.intel.cif_confidence": { "type": "float" }, + "zeek.intel.cif_description": { "type": "keyword" }, + "zeek.intel.cif_firstseen": { "type": "keyword" }, + "zeek.intel.cif_lastseen": { "type": "keyword" }, + "zeek.intel.cif_source": { "type": "keyword" }, + "zeek.intel.cif_tags": { "type": "keyword" }, + "zeek.intel.file_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.intel.file_mime_type": { "type": "keyword" }, + "zeek.intel.matched": { "type": "keyword" }, + "zeek.intel.seen_indicator": { "type": "keyword" }, + "zeek.intel.seen_indicator_type": { "type": "keyword" }, + "zeek.intel.seen_node": { "type": "keyword" }, + "zeek.intel.seen_where": { "type": "keyword" }, + "zeek.intel.sources": { "type": "keyword" }, + "zeek.ipsec.certificates": { "type": "keyword" }, + "zeek.ipsec.exchange_type": { "type": "integer" }, + "zeek.ipsec.flag_a": { "type": "keyword" }, + "zeek.ipsec.flag_c": { "type": "keyword" }, + "zeek.ipsec.flag_e": { "type": "keyword" }, + "zeek.ipsec.flag_i": { "type": "keyword" }, + "zeek.ipsec.flag_r": { "type": "keyword" }, + "zeek.ipsec.flag_v": { "type": "keyword" }, + "zeek.ipsec.flags": { "type": "keyword" }, + "zeek.ipsec.hash": { "type": "keyword" }, + "zeek.ipsec.initiator_spi": { "type": "keyword" }, + "zeek.ipsec.is_orig": { "type": "keyword" }, + "zeek.ipsec.ke_dh_groups": { "type": "integer" }, + "zeek.ipsec.length": { "type": "integer" }, + "zeek.ipsec.maj_ver": { "type": "integer" }, + "zeek.ipsec.message_id": { "type": "keyword" }, + "zeek.ipsec.min_ver": { "type": "integer" }, + "zeek.ipsec.notify_messages": { "type": "keyword" }, + "zeek.ipsec.proposals": { "type": "integer" }, + "zeek.ipsec.responder_spi": { "type": "keyword" }, + "zeek.ipsec.transform_attributes": { "type": "keyword" }, + "zeek.ipsec.transforms": { "type": "keyword" }, + "zeek.ipsec.vendor_ids": { "type": "keyword" }, + "zeek.irc.addl": { "type": "keyword" }, + "zeek.irc.command": { "type": "keyword" }, + "zeek.irc.dcc_file_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.irc.dcc_file_size": { "type": "long" }, + "zeek.irc.dcc_mime_type": { "type": "keyword" }, + "zeek.irc.nick": { "type": "keyword" }, + "zeek.irc.value": { "type": "keyword" }, + "zeek.iso_cotp.pdu_type": { "type": "keyword" }, + "zeek.kerberos.cipher": { "type": "keyword" }, + "zeek.kerberos.client_cert_fuid": { "type": "keyword" }, + "zeek.kerberos.client_cert_subject": { "type": "keyword" }, + "zeek.kerberos.cname": { "type": "keyword" }, + "zeek.kerberos.error_msg": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.kerberos.forwardable": { "type": "keyword" }, + "zeek.kerberos.from": { "type": "date" }, + "zeek.kerberos.renewable": { "type": "keyword" }, + "zeek.kerberos.request_type": { "type": "keyword" }, + "zeek.kerberos.server_cert_fuid": { "type": "keyword" }, + "zeek.kerberos.server_cert_subject": { "type": "keyword" }, + "zeek.kerberos.sname": { "type": "keyword" }, + "zeek.kerberos.success": { "type": "keyword" }, + "zeek.kerberos.till": { "type": "date" }, + "zeek.known_certs.issuer_subject": { "type": "keyword" }, + "zeek.known_certs.serial": { "type": "keyword" }, + "zeek.known_certs.subject": { "type": "keyword" }, + "zeek.ldap.argument": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ldap.message_id": { "type": "keyword" }, + "zeek.ldap.object": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ldap.operation": { "type": "keyword" }, + "zeek.ldap.result_code": { "type": "keyword" }, + "zeek.ldap.result_message": { "type": "keyword" }, + "zeek.ldap.version": { "type": "integer" }, + "zeek.ldap_search.attributes": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ldap_search.base_object": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ldap_search.deref": { "type": "keyword" }, + "zeek.ldap_search.filter": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ldap_search.message_id": { "type": "keyword" }, + "zeek.ldap_search.result_code": { "type": "keyword" }, + "zeek.ldap_search.result_count": { "type": "integer" }, + "zeek.ldap_search.result_message": { "type": "keyword" }, + "zeek.ldap_search.scope": { "type": "keyword" }, + "zeek.login.client_user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.login.confused": { "type": "keyword" }, + "zeek.login.success": { "type": "keyword" }, + "zeek.mqtt_connect.client_id": { "type": "keyword" }, + "zeek.mqtt_connect.connect_status": { "type": "keyword" }, + "zeek.mqtt_connect.proto_name": { "type": "keyword" }, + "zeek.mqtt_connect.proto_version": { "type": "keyword" }, + "zeek.mqtt_connect.will_payload": { "type": "keyword" }, + "zeek.mqtt_connect.will_topic": { "type": "keyword" }, + "zeek.mqtt_publish.from_client": { "type": "keyword" }, + "zeek.mqtt_publish.payload": { "type": "keyword" }, + "zeek.mqtt_publish.payload_dict.messageType": { "type": "keyword" }, + "zeek.mqtt_publish.payload_len": { "type": "integer" }, + "zeek.mqtt_publish.qos": { "type": "keyword" }, + "zeek.mqtt_publish.retain": { "type": "keyword" }, + "zeek.mqtt_publish.status": { "type": "keyword" }, + "zeek.mqtt_publish.topic": { "type": "keyword" }, + "zeek.mqtt_subscribe.ack": { "type": "keyword" }, + "zeek.mqtt_subscribe.action": { "type": "keyword" }, + "zeek.mqtt_subscribe.granted_qos_level": { "type": "integer" }, + "zeek.mqtt_subscribe.qos_levels": { "type": "integer" }, + "zeek.mqtt_subscribe.topics": { "type": "keyword" }, + "zeek.mysql.arg": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.mysql.cmd": { "type": "keyword" }, + "zeek.mysql.response": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.mysql.rows": { "type": "integer" }, + "zeek.mysql.success": { "type": "keyword" }, + "zeek.notice.actions": { "type": "keyword" }, + "zeek.notice.dropped": { "type": "keyword" }, + "zeek.notice.dst": { "type": "ip" }, + "zeek.notice.file_desc": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.notice.file_mime_type": { "type": "keyword" }, + "zeek.notice.msg": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.notice.n": { "type": "integer" }, + "zeek.notice.note": { "type": "keyword" }, + "zeek.notice.p": { "type": "integer" }, + "zeek.notice.peer_descr": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.notice.remote_location_city": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.notice.remote_location_country_code": { "type": "keyword" }, + "zeek.notice.remote_location_latitude": { "type": "float" }, + "zeek.notice.remote_location_longitude": { "type": "float" }, + "zeek.notice.remote_location_region": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.notice.src": { "type": "ip" }, + "zeek.notice.sub": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.notice.suppress_for": { "type": "float" }, + "zeek.ntlm.domain": { "type": "keyword" }, + "zeek.ntlm.host": { "type": "keyword" }, + "zeek.ntlm.server_dns_computer": { "type": "keyword" }, + "zeek.ntlm.server_nb_computer": { "type": "keyword" }, + "zeek.ntlm.server_tree": { "type": "keyword" }, + "zeek.ntlm.status": { "type": "keyword" }, + "zeek.ntlm.success": { "type": "keyword" }, + "zeek.ntp.mode": { "type": "keyword" }, + "zeek.ntp.mode_str": { "type": "keyword" }, + "zeek.ntp.num_exts": { "type": "integer" }, + "zeek.ntp.org_time": { "type": "date" }, + "zeek.ntp.poll": { "type": "float" }, + "zeek.ntp.precision": { "type": "float" }, + "zeek.ntp.rec_time": { "type": "date" }, + "zeek.ntp.ref_id": { "type": "keyword" }, + "zeek.ntp.ref_time": { "type": "date" }, + "zeek.ntp.root_delay": { "type": "float" }, + "zeek.ntp.root_disp": { "type": "float" }, + "zeek.ntp.stratum": { "type": "keyword" }, + "zeek.ntp.version": { "type": "integer" }, + "zeek.ntp.xmt_time": { "type": "date" }, + "zeek.ocsp.certStatus": { "type": "keyword" }, + "zeek.ocsp.hashAlgorithm": { "type": "keyword" }, + "zeek.ocsp.issuerKeyHash": { "type": "keyword" }, + "zeek.ocsp.issuerNameHash": { "type": "keyword" }, + "zeek.ocsp.nextUpdate": { "type": "date" }, + "zeek.ocsp.revokereason": { "type": "keyword" }, + "zeek.ocsp.revoketime": { "type": "date" }, + "zeek.ocsp.serialNumber": { "type": "keyword" }, + "zeek.ocsp.thisUpdate": { "type": "date" }, + "zeek.ospf.advert_router": { "type": "ip" }, + "zeek.ospf.area_id": { "type": "ip" }, + "zeek.ospf.backup_router": { "type": "ip" }, + "zeek.ospf.desig_router": { "type": "ip" }, + "zeek.ospf.dest_router_id": { "type": "ip" }, + "zeek.ospf.fwd_addrs": { "type": "ip" }, + "zeek.ospf.interface_id": { "type": "integer" }, + "zeek.ospf.intra_prefixes": { "type": "keyword" }, + "zeek.ospf.link_data": { "type": "ip" }, + "zeek.ospf.link_id": { "type": "ip" }, + "zeek.ospf.link_prefixes": { "type": "keyword" }, + "zeek.ospf.link_state_id": { "type": "ip" }, + "zeek.ospf.link_type": { "type": "keyword" }, + "zeek.ospf.lsa_type": { "type": "keyword" }, + "zeek.ospf.metric": { "type": "integer" }, + "zeek.ospf.metrics": { "type": "long" }, + "zeek.ospf.neighbor_interface_id": { "type": "integer" }, + "zeek.ospf.neighbor_router_id": { "type": "ip" }, + "zeek.ospf.neighbors": { "type": "ip" }, + "zeek.ospf.netmask": { "type": "ip" }, + "zeek.ospf.ospf_type": { "type": "keyword" }, + "zeek.ospf.prefix": { "type": "keyword" }, + "zeek.ospf.route_tags": { "type": "integer" }, + "zeek.ospf.router_id": { "type": "ip" }, + "zeek.ospf.routers": { "type": "ip" }, + "zeek.ospf.version": { "type": "integer" }, + "zeek.pe.compile_ts": { "type": "date" }, + "zeek.pe.has_cert_table": { "type": "keyword" }, + "zeek.pe.has_debug_data": { "type": "keyword" }, + "zeek.pe.has_export_table": { "type": "keyword" }, + "zeek.pe.has_import_table": { "type": "keyword" }, + "zeek.pe.is_64bit": { "type": "keyword" }, + "zeek.pe.is_exe": { "type": "keyword" }, + "zeek.pe.machine": { "type": "keyword" }, + "zeek.pe.os": { "type": "keyword" }, + "zeek.pe.section_names": { "type": "keyword" }, + "zeek.pe.subsystem": { "type": "keyword" }, + "zeek.pe.uses_aslr": { "type": "keyword" }, + "zeek.pe.uses_code_integrity": { "type": "keyword" }, + "zeek.pe.uses_dep": { "type": "keyword" }, + "zeek.pe.uses_seh": { "type": "keyword" }, + "zeek.radius.connect_info": { "type": "keyword" }, + "zeek.radius.framed_addr": { "type": "ip" }, + "zeek.radius.mac": { "type": "keyword" }, + "zeek.radius.reply_msg": { "type": "keyword" }, + "zeek.radius.result": { "type": "keyword" }, + "zeek.radius.ttl": { "type": "float" }, + "zeek.radius.tunnel_client": { "type": "keyword" }, + "zeek.rdp.cert_count": { "type": "integer" }, + "zeek.rdp.cert_permanent": { "type": "keyword" }, + "zeek.rdp.cert_type": { "type": "keyword" }, + "zeek.rdp.client_build": { "type": "keyword" }, + "zeek.rdp.client_channels": { "type": "keyword" }, + "zeek.rdp.client_dig_product_id": { "type": "keyword" }, + "zeek.rdp.client_name": { "type": "keyword" }, + "zeek.rdp.cookie": { "type": "keyword" }, + "zeek.rdp.desktop_height": { "type": "integer" }, + "zeek.rdp.desktop_width": { "type": "integer" }, + "zeek.rdp.encryption_level": { "type": "keyword" }, + "zeek.rdp.encryption_method": { "type": "keyword" }, + "zeek.rdp.keyboard_layout": { "type": "keyword" }, + "zeek.rdp.requested_color_depth": { "type": "keyword" }, + "zeek.rdp.result": { "type": "keyword" }, + "zeek.rdp.security_protocol": { "type": "keyword" }, + "zeek.rfb.auth": { "type": "keyword" }, + "zeek.rfb.authentication_method": { "type": "keyword" }, + "zeek.rfb.client_major_version": { "type": "keyword" }, + "zeek.rfb.client_minor_version": { "type": "keyword" }, + "zeek.rfb.desktop_name": { "type": "keyword" }, + "zeek.rfb.height": { "type": "integer" }, + "zeek.rfb.server_major_version": { "type": "keyword" }, + "zeek.rfb.server_minor_version": { "type": "keyword" }, + "zeek.rfb.share_flag": { "type": "keyword" }, + "zeek.rfb.width": { "type": "integer" }, + "zeek.signatures.hits": { + "type": "nested", + "properties": { + "Capa": { "type": "keyword" }, + "ClamAV": { "type": "keyword" }, + "Yara": { "type": "keyword" } + } + }, + "zeek.signatures.host_count": { "type": "integer" }, + "zeek.signatures.signature_count": { "type": "integer" }, + "zeek.signatures.signature_id": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.signatures.sub_message": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.sip.call_id": { "type": "keyword" }, + "zeek.sip.content_type": { "type": "keyword" }, + "zeek.sip.date": { "type": "keyword" }, + "zeek.sip.method": { "type": "keyword" }, + "zeek.sip.reply_to": { "type": "keyword" }, + "zeek.sip.request_body_len": { "type": "integer" }, + "zeek.sip.request_from": { "type": "keyword" }, + "zeek.sip.request_path": { "type": "keyword" }, + "zeek.sip.request_to": { "type": "keyword" }, + "zeek.sip.response_body_len": { "type": "integer" }, + "zeek.sip.response_from": { "type": "keyword" }, + "zeek.sip.response_path": { "type": "keyword" }, + "zeek.sip.response_to": { "type": "keyword" }, + "zeek.sip.seq": { "type": "keyword" }, + "zeek.sip.status_code": { "type": "short" }, + "zeek.sip.status_msg": { "type": "keyword" }, + "zeek.sip.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.sip.trans_depth": { "type": "integer" }, + "zeek.sip.uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.sip.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.sip.version": { "type": "keyword" }, + "zeek.sip.warning": { "type": "keyword" }, + "zeek.smb_cmd.argument": { "type": "keyword" }, + "zeek.smb_cmd.command": { "type": "keyword" }, + "zeek.smb_cmd.rtt": { "type": "float" }, + "zeek.smb_cmd.status": { "type": "keyword" }, + "zeek.smb_cmd.sub_command": { "type": "keyword" }, + "zeek.smb_cmd.tree": { "type": "keyword" }, + "zeek.smb_cmd.tree_service": { "type": "keyword" }, + "zeek.smb_cmd.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.smb_cmd.version": { "type": "keyword" }, + "zeek.smb_files.action": { "type": "keyword" }, + "zeek.smb_files.data_len_req": { "type": "long" }, + "zeek.smb_files.data_len_rsp": { "type": "long" }, + "zeek.smb_files.data_offset_req": { "type": "long" }, + "zeek.smb_files.name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smb_files.path": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smb_files.prev_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smb_files.size": { "type": "long" }, + "zeek.smb_files.times_accessed": { "type": "date" }, + "zeek.smb_files.times_changed": { "type": "date" }, + "zeek.smb_files.times_created": { "type": "date" }, + "zeek.smb_files.times_modified": { "type": "date" }, + "zeek.smb_files.ts": { "type": "date" }, + "zeek.smb_mapping.native_file_system": { "type": "keyword" }, + "zeek.smb_mapping.path": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smb_mapping.resource_type": { "type": "keyword" }, + "zeek.smb_mapping.share_type": { "type": "keyword" }, + "zeek.smtp.cc": { "type": "keyword" }, + "zeek.smtp.date": { "type": "keyword" }, + "zeek.smtp.first_received": { "type": "keyword" }, + "zeek.smtp.from": { "type": "keyword" }, + "zeek.smtp.helo": { "type": "keyword" }, + "zeek.smtp.in_reply_to": { "type": "keyword" }, + "zeek.smtp.is_webmail": { "type": "keyword" }, + "zeek.smtp.last_reply": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smtp.last_reply_code": { "type": "keyword" }, + "zeek.smtp.last_reply_msg": { "type": "keyword" }, + "zeek.smtp.mailfrom": { "type": "keyword" }, + "zeek.smtp.msg_id": { "type": "keyword" }, + "zeek.smtp.path": { "type": "ip" }, + "zeek.smtp.rcptto": { "type": "keyword" }, + "zeek.smtp.reply_to": { "type": "keyword" }, + "zeek.smtp.second_received": { "type": "keyword" }, + "zeek.smtp.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.smtp.tls": { "type": "keyword" }, + "zeek.smtp.to": { "type": "keyword" }, + "zeek.smtp.trans_depth": { "type": "integer" }, + "zeek.smtp.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.smtp.x_originating_ip": { "type": "ip" }, + "zeek.snmp.community": { "type": "keyword" }, + "zeek.snmp.display_string": { "type": "keyword" }, + "zeek.snmp.duration": { "type": "float" }, + "zeek.snmp.get_bulk_requests": { "type": "integer" }, + "zeek.snmp.get_requests": { "type": "integer" }, + "zeek.snmp.get_responses": { "type": "integer" }, + "zeek.snmp.set_requests": { "type": "integer" }, + "zeek.snmp.up_since": { "type": "date" }, + "zeek.snmp.version": { "type": "keyword" }, + "zeek.socks.bound_host": { "type": "ip" }, + "zeek.socks.bound_name": { "type": "keyword" }, + "zeek.socks.bound_port": { "type": "integer" }, + "zeek.socks.request_host": { "type": "ip" }, + "zeek.socks.request_name": { "type": "keyword" }, + "zeek.socks.request_port": { "type": "integer" }, + "zeek.socks.server_status": { "type": "keyword" }, + "zeek.socks.version": { "type": "integer" }, + "zeek.software.name": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, + "zeek.software.software_type": { "type": "keyword" }, + "zeek.software.unparsed_version": { "type": "keyword", "ignore_above": 1024 }, + "zeek.software.version_addl": { "type": "keyword", "ignore_above": 1024 }, + "zeek.software.version_major": { "type": "integer" }, + "zeek.software.version_minor": { "type": "integer" }, + "zeek.software.version_minor2": { "type": "integer" }, + "zeek.software.version_minor3": { "type": "integer" }, + "zeek.ssh.auth_attempts": { "type": "integer" }, + "zeek.ssh.auth_success": { "type": "keyword" }, + "zeek.ssh.cipher_alg": { "type": "keyword" }, + "zeek.ssh.client": { "type": "keyword" }, + "zeek.ssh.compression_alg": { "type": "keyword" }, + "zeek.ssh.cshka": { "type": "keyword" }, + "zeek.ssh.direction": { "type": "keyword" }, + "zeek.ssh.hassh": { "type": "keyword" }, + "zeek.ssh.hasshAlgorithms": { "type": "keyword" }, + "zeek.ssh.hasshServer": { "type": "keyword" }, + "zeek.ssh.hasshServerAlgorithms": { "type": "keyword" }, + "zeek.ssh.hasshVersion": { "type": "keyword" }, + "zeek.ssh.host_key": { "type": "keyword" }, + "zeek.ssh.host_key_alg": { "type": "keyword" }, + "zeek.ssh.kex_alg": { "type": "keyword" }, + "zeek.ssh.mac_alg": { "type": "keyword" }, + "zeek.ssh.remote_location_city": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.ssh.remote_location_country_code": { "type": "keyword" }, + "zeek.ssh.remote_location_latitude": { "type": "float" }, + "zeek.ssh.remote_location_longitude": { "type": "float" }, + "zeek.ssh.remote_location_region": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.ssh.server": { "type": "keyword" }, + "zeek.ssh.sshka": { "type": "keyword" }, + "zeek.ssh.version": { "type": "integer" }, + "zeek.ssl.cert_chain_fps": { "type": "keyword" }, + "zeek.ssl.cert_chain_fuids": { "type": "keyword" }, + "zeek.ssl.cipher": { "type": "keyword" }, + "zeek.ssl.client_cert_chain_fps": { "type": "keyword" }, + "zeek.ssl.client_cert_chain_fuids": { "type": "keyword" }, + "zeek.ssl.client_issuer.C": { "type": "keyword" }, + "zeek.ssl.client_issuer.CN": { "type": "keyword" }, + "zeek.ssl.client_issuer.DC": { "type": "keyword" }, + "zeek.ssl.client_issuer.emailAddress": { "type": "keyword" }, + "zeek.ssl.client_issuer.GN": { "type": "keyword" }, + "zeek.ssl.client_issuer.initials": { "type": "keyword" }, + "zeek.ssl.client_issuer.L": { "type": "keyword" }, + "zeek.ssl.client_issuer.O": { "type": "keyword" }, + "zeek.ssl.client_issuer.OU": { "type": "keyword" }, + "zeek.ssl.client_issuer.pseudonym": { "type": "keyword" }, + "zeek.ssl.client_issuer.serialNumber": { "type": "keyword" }, + "zeek.ssl.client_issuer.SN": { "type": "keyword" }, + "zeek.ssl.client_issuer.ST": { "type": "keyword" }, + "zeek.ssl.client_issuer.title": { "type": "keyword" }, + "zeek.ssl.client_issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ssl.client_subject.C": { "type": "keyword" }, + "zeek.ssl.client_subject.CN": { "type": "keyword" }, + "zeek.ssl.client_subject.emailAddress": { "type": "keyword" }, + "zeek.ssl.client_subject.GN": { "type": "keyword" }, + "zeek.ssl.client_subject.initials": { "type": "keyword" }, + "zeek.ssl.client_subject.L": { "type": "keyword" }, + "zeek.ssl.client_subject.O": { "type": "keyword" }, + "zeek.ssl.client_subject.OU": { "type": "keyword" }, + "zeek.ssl.client_subject.pseudonym": { "type": "keyword" }, + "zeek.ssl.client_subject.serialNumber": { "type": "keyword" }, + "zeek.ssl.client_subject.SN": { "type": "keyword" }, + "zeek.ssl.client_subject.ST": { "type": "keyword" }, + "zeek.ssl.client_subject.title": { "type": "keyword" }, + "zeek.ssl.client_subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ssl.curve": { "type": "keyword" }, + "zeek.ssl.established": { "type": "keyword" }, + "zeek.ssl.issuer.C": { "type": "keyword" }, + "zeek.ssl.issuer.CN": { "type": "keyword" }, + "zeek.ssl.issuer.DC": { "type": "keyword" }, + "zeek.ssl.issuer.emailAddress": { "type": "keyword" }, + "zeek.ssl.issuer.GN": { "type": "keyword" }, + "zeek.ssl.issuer.initials": { "type": "keyword" }, + "zeek.ssl.issuer.L": { "type": "keyword" }, + "zeek.ssl.issuer.O": { "type": "keyword" }, + "zeek.ssl.issuer.OU": { "type": "keyword" }, + "zeek.ssl.issuer.pseudonym": { "type": "keyword" }, + "zeek.ssl.issuer.serialNumber": { "type": "keyword" }, + "zeek.ssl.issuer.SN": { "type": "keyword" }, + "zeek.ssl.issuer.ST": { "type": "keyword" }, + "zeek.ssl.issuer.title": { "type": "keyword" }, + "zeek.ssl.issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ssl.ja3": { "type": "keyword" }, + "zeek.ssl.ja3s": { "type": "keyword" }, + "zeek.ssl.last_alert": { "type": "keyword" }, + "zeek.ssl.next_protocol": { "type": "keyword" }, + "zeek.ssl.resumed": { "type": "keyword" }, + "zeek.ssl.server_name": { "type": "keyword" }, + "zeek.ssl.sni_matches_cert": { "type": "keyword" }, + "zeek.ssl.ssl_history": { "type": "keyword" }, + "zeek.ssl.ssl_version": { "type": "keyword" }, + "zeek.ssl.subject.C": { "type": "keyword" }, + "zeek.ssl.subject.CN": { "type": "keyword" }, + "zeek.ssl.subject.description": { "type": "keyword" }, + "zeek.ssl.subject.emailAddress": { "type": "keyword" }, + "zeek.ssl.subject.GN": { "type": "keyword" }, + "zeek.ssl.subject.initials": { "type": "keyword" }, + "zeek.ssl.subject.L": { "type": "keyword" }, + "zeek.ssl.subject.O": { "type": "keyword" }, + "zeek.ssl.subject.OU": { "type": "keyword" }, + "zeek.ssl.subject.postalCode": { "type": "keyword" }, + "zeek.ssl.subject.pseudonym": { "type": "keyword" }, + "zeek.ssl.subject.serialNumber": { "type": "keyword" }, + "zeek.ssl.subject.SN": { "type": "keyword" }, + "zeek.ssl.subject.ST": { "type": "keyword" }, + "zeek.ssl.subject.street": { "type": "keyword" }, + "zeek.ssl.subject.title": { "type": "keyword" }, + "zeek.ssl.subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.ssl.validation_status": { "type": "keyword" }, + "zeek.stun.attr_type": { "type": "keyword" }, + "zeek.stun.attr_val": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.stun.class": { "type": "keyword" }, + "zeek.stun.is_orig": { "type": "keyword" }, + "zeek.stun.method": { "type": "keyword" }, + "zeek.stun.trans_id": { "type": "keyword" }, + "zeek.stun_nat.is_orig": { "type": "keyword" }, + "zeek.stun_nat.lan_addr": { "type": "keyword" }, + "zeek.stun_nat.wan_addr": { "type": "ip" }, + "zeek.stun_nat.wan_port": { "type": "integer" }, + "zeek.syslog.facility": { "type": "keyword" }, + "zeek.syslog.message": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.syslog.severity": { "type": "keyword" }, + "zeek.tds.command": { "type": "keyword" }, + "zeek.tds_rpc.parameter": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.tds_rpc.parameters": { "type": "nested" }, + "zeek.tds_rpc.procedure_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.tds_sql_batch.header_type": { "type": "keyword" }, + "zeek.tds_sql_batch.query": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, + "zeek.tftp.block_acked": { "type": "integer" }, + "zeek.tftp.block_sent": { "type": "integer" }, + "zeek.tftp.error_code": { "type": "integer" }, + "zeek.tftp.error_msg": { "type": "keyword" }, + "zeek.tftp.fname": { "type": "keyword" }, + "zeek.tftp.mode": { "type": "keyword" }, + "zeek.tftp.size": { "type": "integer" }, + "zeek.tftp.uid_data": { "type": "keyword" }, + "zeek.tftp.wrq": { "type": "keyword" }, + "zeek.ts": { "type": "date" }, + "zeek.tunnel.action": { "type": "keyword" }, + "zeek.tunnel.tunnel_type": { "type": "keyword" }, + "zeek.uid": { "type": "keyword" }, + "zeek.weird.addl": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.weird.notice": { "type": "keyword" }, + "zeek.wireguard.established": { "type": "keyword" }, + "zeek.wireguard.initiations": { "type": "integer" }, + "zeek.wireguard.receiver_index": { "type": "keyword" }, + "zeek.wireguard.responses": { "type": "integer" }, + "zeek.wireguard.sender_index": { "type": "keyword" }, + "zeek.x509.basic_constraints_ca": { "type": "keyword" }, + "zeek.x509.basic_constraints_path_len": { "type": "integer" }, + "zeek.x509.certificate_curve": { "type": "keyword" }, + "zeek.x509.certificate_exponent": { "type": "keyword" }, + "zeek.x509.certificate_issuer.C": { "type": "keyword" }, + "zeek.x509.certificate_issuer.CN": { "type": "keyword" }, + "zeek.x509.certificate_issuer.DC": { "type": "keyword" }, + "zeek.x509.certificate_issuer.emailAddress": { "type": "keyword" }, + "zeek.x509.certificate_issuer.GN": { "type": "keyword" }, + "zeek.x509.certificate_issuer.initials": { "type": "keyword" }, + "zeek.x509.certificate_issuer.L": { "type": "keyword" }, + "zeek.x509.certificate_issuer.O": { "type": "keyword" }, + "zeek.x509.certificate_issuer.OU": { "type": "keyword" }, + "zeek.x509.certificate_issuer.pseudonym": { "type": "keyword" }, + "zeek.x509.certificate_issuer.serialNumber": { "type": "keyword" }, + "zeek.x509.certificate_issuer.SN": { "type": "keyword" }, + "zeek.x509.certificate_issuer.ST": { "type": "keyword" }, + "zeek.x509.certificate_issuer.title": { "type": "keyword" }, + "zeek.x509.certificate_issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.x509.certificate_key_alg": { "type": "keyword" }, + "zeek.x509.certificate_key_length": { "type": "integer" }, + "zeek.x509.certificate_key_type": { "type": "keyword" }, + "zeek.x509.certificate_not_valid_after": { "type": "date" }, + "zeek.x509.certificate_not_valid_before": { "type": "date" }, + "zeek.x509.certificate_serial": { "type": "keyword" }, + "zeek.x509.certificate_sig_alg": { "type": "keyword" }, + "zeek.x509.certificate_subject.C": { "type": "keyword" }, + "zeek.x509.certificate_subject.CN": { "type": "keyword" }, + "zeek.x509.certificate_subject.DC": { "type": "keyword" }, + "zeek.x509.certificate_subject.description": { "type": "keyword" }, + "zeek.x509.certificate_subject.emailAddress": { "type": "keyword" }, + "zeek.x509.certificate_subject.GN": { "type": "keyword" }, + "zeek.x509.certificate_subject.initials": { "type": "keyword" }, + "zeek.x509.certificate_subject.L": { "type": "keyword" }, + "zeek.x509.certificate_subject.O": { "type": "keyword" }, + "zeek.x509.certificate_subject.OU": { "type": "keyword" }, + "zeek.x509.certificate_subject.postalCode": { "type": "keyword" }, + "zeek.x509.certificate_subject.pseudonym": { "type": "keyword" }, + "zeek.x509.certificate_subject.serialNumber": { "type": "keyword" }, + "zeek.x509.certificate_subject.SN": { "type": "keyword" }, + "zeek.x509.certificate_subject.ST": { "type": "keyword" }, + "zeek.x509.certificate_subject.street": { "type": "keyword" }, + "zeek.x509.certificate_subject.title": { "type": "keyword" }, + "zeek.x509.certificate_subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.x509.certificate_version": { "type": "integer" }, + "zeek.x509.client_cert": { "type": "keyword" }, + "zeek.x509.fingerprint": { "type": "keyword" }, + "zeek.x509.host_cert": { "type": "keyword" }, + "zeek.x509.san_dns": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, + "zeek.x509.san_email": { "type": "keyword" }, + "zeek.x509.san_ip": { "type": "ip" }, + "zeek.x509.san_uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } } + } + } + } +} diff --git a/dashboards/templates/composable/component/zeek_ot.json b/dashboards/templates/composable/component/zeek_ot.json new file mode 100644 index 000000000..d333a723c --- /dev/null +++ b/dashboards/templates/composable/component/zeek_ot.json @@ -0,0 +1,358 @@ +{ + "template": { + "mappings": { + "properties": { + "zeek.bacnet.bvlc_function": { "type": "keyword" }, + "zeek.bacnet.invoke_id": { "type": "integer" }, + "zeek.bacnet.pdu_service": { "type": "keyword" }, + "zeek.bacnet.pdu_type": { "type": "keyword" }, + "zeek.bacnet.result_code": { "type": "keyword" }, + "zeek.bacnet_discovery.instance_number": { "type": "integer" }, + "zeek.bacnet_discovery.object_name": { "type": "keyword" }, + "zeek.bacnet_discovery.object_type": { "type": "keyword" }, + "zeek.bacnet_discovery.pdu_service": { "type": "keyword" }, + "zeek.bacnet_discovery.range": { "type": "keyword" }, + "zeek.bacnet_discovery.range_high": { "type": "integer" }, + "zeek.bacnet_discovery.range_low": { "type": "integer" }, + "zeek.bacnet_discovery.vendor": { "type": "keyword" }, + "zeek.bacnet_property.array_index": { "type": "integer" }, + "zeek.bacnet_property.instance_number": { "type": "integer" }, + "zeek.bacnet_property.object_type": { "type": "keyword" }, + "zeek.bacnet_property.pdu_service": { "type": "keyword" }, + "zeek.bacnet_property.property": { "type": "keyword" }, + "zeek.bacnet_property.value": { "type": "keyword" }, + "zeek.bestguess.category": { "type": "keyword" }, + "zeek.bestguess.name": { "type": "keyword" }, + "zeek.bsap_ip_header.num_msg": { "type": "integer" }, + "zeek.bsap_ip_header.type_name": { "type": "keyword" }, + "zeek.bsap_ip_rdb.app_func_code": { "type": "keyword" }, + "zeek.bsap_ip_rdb.func_code": { "type": "keyword" }, + "zeek.bsap_ip_rdb.header_size": { "type": "integer" }, + "zeek.bsap_ip_rdb.mes_seq": { "type": "integer" }, + "zeek.bsap_ip_rdb.node_status": { "type": "integer" }, + "zeek.bsap_ip_rdb.res_seq": { "type": "integer" }, + "zeek.bsap_ip_rdb.sequence": { "type": "integer" }, + "zeek.bsap_ip_rdb.variable_count": { "type": "integer" }, + "zeek.bsap_ip_rdb.variables": { + "type": "nested", + "properties": { + "var": { "type": "keyword" }, + "val": { "type": "keyword" } + } + }, + "zeek.bsap_serial_header.ctl": { "type": "integer" }, + "zeek.bsap_serial_header.dadd": { "type": "integer" }, + "zeek.bsap_serial_header.dfun": { "type": "keyword" }, + "zeek.bsap_serial_header.nsb": { "type": "integer" }, + "zeek.bsap_serial_header.sadd": { "type": "integer" }, + "zeek.bsap_serial_header.seq": { "type": "integer" }, + "zeek.bsap_serial_header.ser": { "type": "keyword" }, + "zeek.bsap_serial_header.sfun": { "type": "keyword" }, + "zeek.bsap_serial_header.type_name": { "type": "keyword" }, + "zeek.bsap_serial_rdb.func_code": { "type": "keyword" }, + "zeek.bsap_serial_rdb.variable_count": { "type": "integer" }, + "zeek.bsap_serial_rdb.variables": { + "type": "nested", + "properties": { + "var": { "type": "keyword" }, + "val": { "type": "keyword" } + } + }, + "zeek.bsap_serial_rdb_ext.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.bsap_serial_rdb_ext.dfun": { "type": "keyword" }, + "zeek.bsap_serial_rdb_ext.extfun": { "type": "keyword" }, + "zeek.bsap_serial_rdb_ext.nsb": { "type": "integer" }, + "zeek.bsap_serial_rdb_ext.seq": { "type": "integer" }, + "zeek.bsap_serial_rdb_ext.sfun": { "type": "keyword" }, + "zeek.cip.attribute_id": { "type": "keyword" }, + "zeek.cip.cip_sequence_count": { "type": "integer" }, + "zeek.cip.cip_service": { "type": "keyword" }, + "zeek.cip.cip_service_code": { "type": "keyword" }, + "zeek.cip.cip_status": { "type": "keyword" }, + "zeek.cip.class_id": { "type": "keyword" }, + "zeek.cip.class_name": { "type": "keyword" }, + "zeek.cip.direction": { "type": "keyword" }, + "zeek.cip.instance_id": { "type": "keyword" }, + "zeek.cip_identity.device_state": { "type": "keyword" }, + "zeek.cip_identity.device_status": { "type": "keyword" }, + "zeek.cip_identity.device_type_id": { "type": "integer" }, + "zeek.cip_identity.device_type_name": { "type": "keyword" }, + "zeek.cip_identity.encapsulation_version": { "type": "integer" }, + "zeek.cip_identity.product_code": { "type": "integer" }, + "zeek.cip_identity.product_name": { "type": "keyword" }, + "zeek.cip_identity.revision": { "type": "keyword" }, + "zeek.cip_identity.serial_number": { "type": "keyword" }, + "zeek.cip_identity.socket_address": { "type": "ip" }, + "zeek.cip_identity.socket_address_asn": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.cip_identity.socket_address_geo.continent_code": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.country_code2": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.country_code3": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, + "zeek.cip_identity.socket_address_geo.dma_code": { "type": "short" }, + "zeek.cip_identity.socket_address_geo.ip": { "type": "ip" }, + "zeek.cip_identity.socket_address_geo.latitude": { "type": "float" }, + "zeek.cip_identity.socket_address_geo.location": { "type": "geo_point" }, + "zeek.cip_identity.socket_address_geo.longitude": { "type": "float" }, + "zeek.cip_identity.socket_address_geo.postal_code": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.region_code": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.region_name": { "type": "keyword" }, + "zeek.cip_identity.socket_address_geo.timezone": { "type": "keyword" }, + "zeek.cip_identity.socket_port": { "type": "integer" }, + "zeek.cip_identity.vendor_id": { "type": "integer" }, + "zeek.cip_identity.vendor_name": { "type": "keyword" }, + "zeek.cip_io.connection_id": { "type": "keyword" }, + "zeek.cip_io.data_length": { "type": "integer" }, + "zeek.cip_io.io_data": { "type": "keyword", "doc_values": false, "ignore_above": 8, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.cip_io.sequence_number": { "type": "integer" }, + "zeek.dnp3.fc_reply": { "type": "keyword" }, + "zeek.dnp3.fc_request": { "type": "keyword" }, + "zeek.dnp3.iin": { "type": "keyword" }, + "zeek.dnp3.iin_flags": { "type": "keyword" }, + "zeek.dnp3_control.block_type": { "type": "keyword" }, + "zeek.dnp3_control.execute_count": { "type": "integer" }, + "zeek.dnp3_control.function_code": { "type": "keyword" }, + "zeek.dnp3_control.index_number": { "type": "integer" }, + "zeek.dnp3_control.off_time": { "type": "integer" }, + "zeek.dnp3_control.on_time": { "type": "integer" }, + "zeek.dnp3_control.operation_type": { "type": "keyword" }, + "zeek.dnp3_control.status_code": { "type": "keyword" }, + "zeek.dnp3_control.trip_control_code": { "type": "keyword" }, + "zeek.dnp3_objects.function_code": { "type": "keyword" }, + "zeek.dnp3_objects.object_count": { "type": "integer" }, + "zeek.dnp3_objects.object_type": { "type": "keyword" }, + "zeek.dnp3_objects.range_high": { "type": "integer" }, + "zeek.dnp3_objects.range_low": { "type": "integer" }, + "zeek.ecat_aoe_info.command": { "type": "keyword" }, + "zeek.ecat_aoe_info.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ecat_aoe_info.orig_port": { "type": "keyword" }, + "zeek.ecat_aoe_info.resp_port": { "type": "keyword" }, + "zeek.ecat_aoe_info.state": { "type": "keyword" }, + "zeek.ecat_arp_info.arp_type": { "type": "keyword" }, + "zeek.ecat_arp_info.orig_hw_addr": { "type": "keyword" }, + "zeek.ecat_arp_info.orig_proto_addr": { "type": "keyword" }, + "zeek.ecat_arp_info.resp_hw_addr": { "type": "keyword" }, + "zeek.ecat_arp_info.resp_proto_addr": { "type": "keyword" }, + "zeek.ecat_coe_info.dataoffset": { "type": "keyword" }, + "zeek.ecat_coe_info.index": { "type": "keyword" }, + "zeek.ecat_coe_info.number": { "type": "keyword" }, + "zeek.ecat_coe_info.req_resp": { "type": "keyword" }, + "zeek.ecat_coe_info.subindex": { "type": "keyword" }, + "zeek.ecat_coe_info.type": { "type": "keyword" }, + "zeek.ecat_dev_info.build": { "type": "keyword" }, + "zeek.ecat_dev_info.dev_type": { "type": "keyword" }, + "zeek.ecat_dev_info.dpram": { "type": "keyword" }, + "zeek.ecat_dev_info.features": { "type": "keyword" }, + "zeek.ecat_dev_info.fmmucnt": { "type": "keyword" }, + "zeek.ecat_dev_info.ports": { "type": "keyword" }, + "zeek.ecat_dev_info.revision": { "type": "keyword" }, + "zeek.ecat_dev_info.server_id": { "type": "keyword" }, + "zeek.ecat_dev_info.smcount": { "type": "keyword" }, + "zeek.ecat_foe_info.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ecat_foe_info.error_code": { "type": "keyword" }, + "zeek.ecat_foe_info.filename": { "type": "keyword" }, + "zeek.ecat_foe_info.opcode": { "type": "keyword" }, + "zeek.ecat_foe_info.packet_num": { "type": "keyword" }, + "zeek.ecat_foe_info.reserved": { "type": "keyword" }, + "zeek.ecat_log_address.command": { "type": "keyword" }, + "zeek.ecat_log_address.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ecat_log_address.length": { "type": "integer" }, + "zeek.ecat_log_address.log_addr": { "type": "keyword" }, + "zeek.ecat_registers.command": { "type": "keyword" }, + "zeek.ecat_registers.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.ecat_registers.register_addr": { "type": "keyword" }, + "zeek.ecat_registers.register_type": { "type": "keyword" }, + "zeek.ecat_registers.server_addr": { "type": "keyword" }, + "zeek.ecat_soe_info.drive_num": { "type": "keyword" }, + "zeek.ecat_soe_info.element": { "type": "keyword" }, + "zeek.ecat_soe_info.error": { "type": "keyword" }, + "zeek.ecat_soe_info.incomplete": { "type": "keyword" }, + "zeek.ecat_soe_info.index": { "type": "keyword" }, + "zeek.ecat_soe_info.opcode": { "type": "keyword" }, + "zeek.enip.enip_command": { "type": "keyword" }, + "zeek.enip.enip_command_code": { "type": "keyword" }, + "zeek.enip.enip_status": { "type": "keyword" }, + "zeek.enip.length": { "type": "integer" }, + "zeek.enip.options": { "type": "keyword" }, + "zeek.enip.sender_context": { "type": "keyword" }, + "zeek.enip.session_handle": { "type": "keyword" }, + "zeek.genisys.header": { "type": "keyword" }, + "zeek.genisys.server": { "type": "integer" }, + "zeek.genisys.direction": { "type": "keyword" }, + "zeek.genisys.crc_transmitted": { "type": "keyword" }, + "zeek.genisys.crc_calculated": { "type": "keyword" }, + "zeek.genisys.payload": { + "type": "nested", + "properties": { + "address": { "type": "integer" }, + "data": { "type": "integer" } + } + }, + "zeek.known_modbus.device_type": { "type": "keyword" }, + "zeek.modbus.exception": { "type": "keyword" }, + "zeek.modbus.func": { "type": "keyword" }, + "zeek.modbus_detailed.address": { "type": "integer" }, + "zeek.modbus_detailed.func": { "type": "keyword" }, + "zeek.modbus_detailed.network_direction": { "type": "keyword" }, + "zeek.modbus_detailed.quantity": { "type": "integer" }, + "zeek.modbus_detailed.unit_id": { "type": "integer" }, + "zeek.modbus_detailed.values": { "type": "keyword" }, + "zeek.modbus_mask_write_register.address": { "type": "integer" }, + "zeek.modbus_mask_write_register.and_mask": { "type": "integer" }, + "zeek.modbus_mask_write_register.func": { "type": "keyword" }, + "zeek.modbus_mask_write_register.network_direction": { "type": "keyword" }, + "zeek.modbus_mask_write_register.or_mask": { "type": "integer" }, + "zeek.modbus_mask_write_register.unit_id": { "type": "integer" }, + "zeek.modbus_read_write_multiple_registers.func": { "type": "keyword" }, + "zeek.modbus_read_write_multiple_registers.network_direction": { "type": "keyword" }, + "zeek.modbus_read_write_multiple_registers.read_quantity": { "type": "integer" }, + "zeek.modbus_read_write_multiple_registers.read_registers": { "type": "keyword" }, + "zeek.modbus_read_write_multiple_registers.read_start_address": { "type": "integer" }, + "zeek.modbus_read_write_multiple_registers.unit_id": { "type": "integer" }, + "zeek.modbus_read_write_multiple_registers.write_registers": { "type": "keyword" }, + "zeek.modbus_read_write_multiple_registers.write_start_address": { "type": "integer" }, + "zeek.opcua_binary.encoding_mask": { "type": "long" }, + "zeek.opcua_binary.endpoint_url": { "type": "keyword" }, + "zeek.opcua_binary.error": { "type": "long" }, + "zeek.opcua_binary.identifier": { "type": "long" }, + "zeek.opcua_binary.identifier_str": { "type": "keyword" }, + "zeek.opcua_binary.is_final": { "type": "keyword" }, + "zeek.opcua_binary.max_chunk_cnt": { "type": "long" }, + "zeek.opcua_binary.max_msg_size": { "type": "long" }, + "zeek.opcua_binary.msg_size": { "type": "long" }, + "zeek.opcua_binary.msg_type": { "type": "keyword" }, + "zeek.opcua_binary.namespace_idx": { "type": "long" }, + "zeek.opcua_binary.opcua_id": { "type": "keyword" }, + "zeek.opcua_binary.rcv_buf_size": { "type": "long" }, + "zeek.opcua_binary.rcv_cert": { "type": "keyword" }, + "zeek.opcua_binary.rcv_cert_len": { "type": "integer" }, + "zeek.opcua_binary.reason": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_add_hdr_enc_mask": { "type": "long" }, + "zeek.opcua_binary.req_hdr_add_hdr_type_id": { "type": "long" }, + "zeek.opcua_binary.req_hdr_audit_entry_id": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_node_id_guid": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_node_id_namespace_idx": { "type": "long" }, + "zeek.opcua_binary.req_hdr_node_id_numeric": { "type": "long" }, + "zeek.opcua_binary.req_hdr_node_id_opaque": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_node_id_string": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_node_id_type": { "type": "keyword" }, + "zeek.opcua_binary.req_hdr_request_handle": { "type": "long" }, + "zeek.opcua_binary.req_hdr_return_diag": { "type": "long" }, + "zeek.opcua_binary.req_hdr_timeout_hint": { "type": "date" }, + "zeek.opcua_binary.req_hdr_timestamp": { "type": "date" }, + "zeek.opcua_binary.request_id": { "type": "long" }, + "zeek.opcua_binary.res_hdr_add_hdr_enc_mask": { "type": "long" }, + "zeek.opcua_binary.res_hdr_add_hdr_type_id": { "type": "long" }, + "zeek.opcua_binary.res_hdr_request_handle": { "type": "long" }, + "zeek.opcua_binary.res_hdr_service_diag_encoding": { "type": "long" }, + "zeek.opcua_binary.res_hdr_service_result": { "type": "long" }, + "zeek.opcua_binary.res_hdr_timestamp": { "type": "date" }, + "zeek.opcua_binary.sec_channel_id": { "type": "long" }, + "zeek.opcua_binary.sec_policy_uri": { "type": "keyword" }, + "zeek.opcua_binary.sec_policy_uri_len": { "type": "integer" }, + "zeek.opcua_binary.seq_number": { "type": "long" }, + "zeek.opcua_binary.snd_buf_size": { "type": "long" }, + "zeek.opcua_binary.snd_cert": { "type": "keyword" }, + "zeek.opcua_binary.snd_cert_len": { "type": "integer" }, + "zeek.opcua_binary.version": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.addl_info": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_addl_info": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_inner_diag_info": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_inner_stat_code": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_locale": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_locale_txt": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_namespace_uri": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.has_symbolic_id": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.inner_diag_level": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.inner_stat_code": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.locale": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.locale_str": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.locale_txt": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.locale_txt_str": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.namespace_uri": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.namespace_uri_str": { "type": "keyword" }, + "zeek.opcua_binary_diag_info_detail.symbolic_id": { "type": "long" }, + "zeek.opcua_binary_diag_info_detail.symbolic_id_str": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.application_type": { "type": "long" }, + "zeek.opcua_binary_get_endpoints.application_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.cert_size": { "type": "long" }, + "zeek.opcua_binary_get_endpoints.discovery_profile_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.encoding_mask": { "type": "long" }, + "zeek.opcua_binary_get_endpoints.endpoint_url": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.gateway_server_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.locale": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.locale_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.message_security_mode": { "type": "long" }, + "zeek.opcua_binary_get_endpoints.product_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.profile_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.security_level": { "type": "long" }, + "zeek.opcua_binary_get_endpoints.security_policy_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.server_cert": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.text": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.transport_profile_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints.user_token_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_url": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_endpoint_url": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_issued_type": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_policy_id": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_sec_policy_uri": { "type": "keyword" }, + "zeek.opcua_binary_get_endpoints_user_token.user_token_type": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.client_nonce": { "type": "keyword" }, + "zeek.opcua_binary_opensecure_channel.client_proto_ver": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.message_security_mode": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.req_lifetime": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.sec_token_created_at": { "type": "date" }, + "zeek.opcua_binary_opensecure_channel.sec_token_id": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.sec_token_request_type": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.sec_token_revised_time": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.sec_token_sec_channel_id": { "type": "long" }, + "zeek.opcua_binary_opensecure_channel.server_nonce": { "type": "keyword" }, + "zeek.opcua_binary_opensecure_channel.server_proto_ver": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.historian_bits": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.historian_bits_str": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.historianExtraData": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.historianMultiValue": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.historianPartial": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.info_type": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.info_type_str": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.limit_bits": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.limit_bits_str": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.overflow": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.semantics_changed": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.severity": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.severity_str": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.source": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.source_str": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.status_code": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.structure_changed": { "type": "keyword" }, + "zeek.opcua_binary_status_code_detail.sub_code": { "type": "long" }, + "zeek.opcua_binary_status_code_detail.sub_code_str": { "type": "keyword" }, + "zeek.profinet.block_version": { "type": "keyword" }, + "zeek.profinet.index": { "type": "keyword" }, + "zeek.profinet.operation_type": { "type": "keyword" }, + "zeek.profinet.slot_number": { "type": "integer" }, + "zeek.profinet.subslot_number": { "type": "integer" }, + "zeek.profinet_dce_rpc.activity_uuid": { "type": "keyword" }, + "zeek.profinet_dce_rpc.interface_uuid": { "type": "keyword" }, + "zeek.profinet_dce_rpc.object_uuid": { "type": "keyword" }, + "zeek.profinet_dce_rpc.operation": { "type": "keyword" }, + "zeek.profinet_dce_rpc.packet_type": { "type": "keyword" }, + "zeek.profinet_dce_rpc.server_boot_time": { "type": "integer" }, + "zeek.profinet_dce_rpc.version": { "type": "integer" }, + "zeek.s7comm.data_info": { "type": "keyword" }, + "zeek.s7comm.item_count": { "type": "integer" }, + "zeek.s7comm.parameter": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, + "zeek.s7comm.parameters.class": { "type": "keyword" }, + "zeek.s7comm.parameters.code": { "type": "keyword" }, + "zeek.s7comm.parameters.group": { "type": "keyword" }, + "zeek.s7comm.parameters.mode": { "type": "keyword" }, + "zeek.s7comm.parameters.sub": { "type": "keyword" }, + "zeek.s7comm.parameters.type": { "type": "keyword" }, + "zeek.s7comm.rosctr": { "type": "keyword" } + } + } + } +} diff --git a/dashboards/templates/malcolm_template.json b/dashboards/templates/malcolm_template.json index b4fa8275d..febfa26cd 100644 --- a/dashboards/templates/malcolm_template.json +++ b/dashboards/templates/malcolm_template.json @@ -19,7 +19,11 @@ "ecs_source", "ecs_threat", "ecs_url", - "ecs_user_agent" + "ecs_user_agent", + "custom_arkime", + "custom_suricata", + "custom_zeek", + "custom_zeek_ot" ], "template" :{ "settings" : { @@ -29,21 +33,10 @@ }, "mappings": { "properties": { - "firstPacket": { "type": "date" }, - "lastPacket": { "type": "date" }, - "timestamp": { "type": "date" }, - "destination.geo.country_code2": { "type": "keyword" }, - "destination.geo.country_code3": { "type": "keyword" }, - "destination.geo.dma_code": { "type": "short" }, - "destination.geo.ip": { "type": "ip" }, - "destination.geo.latitude": { "type": "float" }, - "destination.geo.location": { "type": "geo_point" }, - "destination.geo.longitude": { "type": "float" }, "destination.hostname": { "type": "keyword" }, "destination.ip_reverse_dns": { "type": "keyword" }, "destination.oui": { "type": "keyword" }, "destination.segment": { "type": "keyword" }, - "dns.host": { "type": "keyword" }, "event.freq_score_v1": { "type": "float" }, "event.freq_score_v2": { "type": "float" }, "event.hits": { "type": "long" }, @@ -51,1559 +44,15 @@ "event.severity_tags": { "type": "keyword" }, "file.source": { "type": "keyword" }, "network.protocol_version": { "type": "keyword" }, - "node": { "type": "keyword" }, - "protocol": { "type": "keyword" }, - "quic.host": { "type": "keyword" }, - "quic.version": { "type": "keyword" }, "related.mac": { "type": "keyword" }, "related.oui": { "type": "keyword" }, "related.password": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "source.geo.country_code2": { "type": "keyword" }, - "source.geo.country_code3": { "type": "keyword" }, - "source.geo.dma_code": { "type": "short" }, - "source.geo.ip": { "type": "ip" }, - "source.geo.latitude": { "type": "float" }, - "source.geo.location": { "type": "geo_point" }, - "source.geo.longitude": { "type": "float" }, "source.hostname": { "type": "keyword" }, "source.ip_reverse_dns": { "type": "keyword" }, "source.oui": { "type": "keyword" }, "source.segment": { "type": "keyword" }, - "suricata.alert.action": { "type": "keyword" }, - "suricata.alert.metadata.created_at": { "type": "keyword" }, - "suricata.alert.metadata.malware_family": { "type": "keyword" }, - "suricata.alert.metadata.performance_impact": { "type": "keyword" }, - "suricata.alert.metadata.signature_severity": { "type": "keyword" }, - "suricata.alert.metadata.updated_at": { "type": "keyword" }, - "suricata.alert.rev": { "type": "integer" }, - "suricata.alert.severity": { "type": "integer" }, - "suricata.anomaly.app_proto": { "type": "keyword" }, - "suricata.anomaly.code": { "type": "integer" }, - "suricata.anomaly.event": { "type": "keyword" }, - "suricata.anomaly.event_no": { "type": "keyword" }, - "suricata.anomaly.layer": { "type": "keyword" }, - "suricata.anomaly.type": { "type": "keyword" }, - "suricata.app_proto_expected": { "type": "keyword" }, - "suricata.app_proto_orig": { "type": "keyword" }, - "suricata.app_proto_tc": { "type": "keyword" }, - "suricata.app_proto_ts": { "type": "keyword" }, - "suricata.dhcp.assigned_ip": { "type": "ip" }, - "suricata.dhcp.client_id": { "type": "keyword" }, - "suricata.dhcp.client_ip": { "type": "ip" }, - "suricata.dhcp.client_mac": { "type": "keyword" }, - "suricata.dhcp.dhcp_type": { "type": "keyword" }, - "suricata.dhcp.dns_servers": { "type": "keyword" }, - "suricata.dhcp.hostname": { "type": "keyword" }, - "suricata.dhcp.id": { "type": "keyword" }, - "suricata.dhcp.lease_time": { "type": "integer" }, - "suricata.dhcp.next_server_ip": { "type": "ip" }, - "suricata.dhcp.params": { "type": "keyword" }, - "suricata.dhcp.rebinding_time": { "type": "integer" }, - "suricata.dhcp.relay_ip": { "type": "ip" }, - "suricata.dhcp.renewal_time": { "type": "integer" }, - "suricata.dhcp.requested_ip": { "type": "ip" }, - "suricata.dhcp.routers": { "type": "keyword" }, - "suricata.dhcp.subnet_mask": { "type": "keyword" }, - "suricata.dhcp.type": { "type": "keyword" }, - "suricata.dnp3.application.complete": { "type": "keyword" }, - "suricata.dnp3.application.control.con": { "type": "keyword" }, - "suricata.dnp3.application.control.fin": { "type": "keyword" }, - "suricata.dnp3.application.control.fir": { "type": "keyword" }, - "suricata.dnp3.application.control.sequence": { "type": "integer" }, - "suricata.dnp3.application.control.uns": { "type": "keyword" }, - "suricata.dnp3.application.function_code": { "type": "integer" }, - "suricata.dnp3.application.objects": { - "type": "nested", - "properties": { - "count": { "type": "integer" }, - "group": { "type": "integer" }, - "prefix_code": { "type": "integer" }, - "qualifier": { "type": "integer" }, - "range_code": { "type": "integer" }, - "start": { "type": "integer" }, - "stop": { "type": "integer" }, - "variation": { "type": "integer" }, - "points": { - "type": "nested", - "properties": { - "authentication_key": { "type": "integer" }, - "block_number": { "type": "integer" }, - "challenge_data_len": { "type": "integer" }, - "chatter_filter": { "type": "integer" }, - "comm_lost": { "type": "integer" }, - "count": { "type": "integer" }, - "cr": { "type": "integer" }, - "created": { "type": "integer" }, - "data.mac_value": { "type": "keyword" }, - "data.wrapped_key_data": { "type": "keyword" }, - "delay_ms": { "type": "integer" }, - "file_data": { "type": "keyword" }, - "file_handle": { "type": "integer" }, - "file_size": { "type": "long" }, - "filename": { "type": "keyword" }, - "filename_offset": { "type": "integer" }, - "filename_size": { "type": "integer" }, - "index": { "type": "integer" }, - "key_status": { "type": "integer" }, - "key_wrap_alg": { "type": "integer" }, - "ksq": { "type": "integer" }, - "local_forced": { "type": "integer" }, - "mal": { "type": "integer" }, - "maximum_block_size": { "type": "integer" }, - "offtime": { "type": "integer" }, - "online": { "type": "integer" }, - "ontime": { "type": "integer" }, - "op_type": { "type": "integer" }, - "operational_mode": { "type": "integer" }, - "optional_text": { "type": "keyword" }, - "over_range": { "type": "integer" }, - "permissions": { "type": "integer" }, - "prefix": { "type": "integer" }, - "qu": { "type": "integer" }, - "reference_err": { "type": "integer" }, - "remote_forced": { "type": "integer" }, - "request_id": { "type": "keyword" }, - "reserved": { "type": "integer" }, - "reserved0": { "type": "integer" }, - "reserved1": { "type": "integer" }, - "restart": { "type": "integer" }, - "size": { "type": "integer" }, - "state": { "type": "integer" }, - "status_code": { "type": "integer" }, - "tcc": { "type": "integer" }, - "timestamp": { "type": "date" }, - "user_number": { "type": "integer" }, - "usr": { "type": "integer" }, - "value": { "type": "keyword" } - } - } - } - }, - "suricata.dnp3.control.dir": { "type": "keyword" }, - "suricata.dnp3.control.fcb": { "type": "keyword" }, - "suricata.dnp3.control.fcv": { "type": "keyword" }, - "suricata.dnp3.control.function_code": { "type": "integer" }, - "suricata.dnp3.control.pri": { "type": "keyword" }, - "suricata.dnp3.dst": { "type": "integer" }, - "suricata.dnp3.iin.indicators": { "type": "keyword" }, - "suricata.dnp3.request.application.complete": { "type": "keyword" }, - "suricata.dnp3.request.application.control.con": { "type": "keyword" }, - "suricata.dnp3.request.application.control.fin": { "type": "keyword" }, - "suricata.dnp3.request.application.control.fir": { "type": "keyword" }, - "suricata.dnp3.request.application.control.sequence": { "type": "integer" }, - "suricata.dnp3.request.application.control.uns": { "type": "keyword" }, - "suricata.dnp3.request.application.function_code": { "type": "integer" }, - "suricata.dnp3.request.application.objects": { - "type": "nested", - "properties": { - "count": { "type": "integer" }, - "group": { "type": "integer" }, - "prefix_code": { "type": "integer" }, - "qualifier": { "type": "integer" }, - "range_code": { "type": "integer" }, - "start": { "type": "integer" }, - "stop": { "type": "integer" }, - "variation": { "type": "integer" }, - "points": { - "type": "nested", - "properties": { - "authentication_key": { "type": "integer" }, - "count": { "type": "integer" }, - "cr": { "type": "integer" }, - "created": { "type": "integer" }, - "file_size": { "type": "long" }, - "filename": { "type": "keyword" }, - "filename_offset": { "type": "integer" }, - "filename_size": { "type": "integer" }, - "index": { "type": "integer" }, - "maximum_block_size": { "type": "integer" }, - "offtime": { "type": "integer" }, - "ontime": { "type": "integer" }, - "op_type": { "type": "integer" }, - "operational_mode": { "type": "integer" }, - "permissions": { "type": "integer" }, - "prefix": { "type": "integer" }, - "qu": { "type": "integer" }, - "request_id": { "type": "keyword" }, - "reserved": { "type": "integer" }, - "size": { "type": "integer" }, - "status_code": { "type": "integer" }, - "tcc": { "type": "integer" }, - "timestamp": { "type": "date" }, - "user_number": { "type": "integer" } - } - } - } - }, - "suricata.dnp3.request.control.dir": { "type": "keyword" }, - "suricata.dnp3.request.control.fcb": { "type": "keyword" }, - "suricata.dnp3.request.control.fcv": { "type": "keyword" }, - "suricata.dnp3.request.control.function_code": { "type": "integer" }, - "suricata.dnp3.request.control.pri": { "type": "keyword" }, - "suricata.dnp3.request.dst": { "type": "integer" }, - "suricata.dnp3.request.src": { "type": "integer" }, - "suricata.dnp3.request.type": { "type": "keyword" }, - "suricata.dnp3.response.application.complete": { "type": "keyword" }, - "suricata.dnp3.response.application.control.con": { "type": "keyword" }, - "suricata.dnp3.response.application.control.fin": { "type": "keyword" }, - "suricata.dnp3.response.application.control.fir": { "type": "keyword" }, - "suricata.dnp3.response.application.control.sequence": { "type": "integer" }, - "suricata.dnp3.response.application.control.uns": { "type": "keyword" }, - "suricata.dnp3.response.application.function_code": { "type": "integer" }, - "suricata.dnp3.response.application.objects": { - "type": "nested", - "properties": { - "count": { "type": "integer" }, - "group": { "type": "integer" }, - "prefix_code": { "type": "integer" }, - "qualifier": { "type": "integer" }, - "range_code": { "type": "integer" }, - "start": { "type": "integer" }, - "stop": { "type": "integer" }, - "variation": { "type": "integer" }, - "points": { - "type": "nested", - "properties": { - "challenge_data_len": { "type": "integer" }, - "chatter_filter": { "type": "integer" }, - "comm_lost": { "type": "integer" }, - "count": { "type": "integer" }, - "cr": { "type": "integer" }, - "data.challenge_data": { "type": "keyword" }, - "data.mac_value": { "type": "keyword" }, - "delay_ms": { "type": "integer" }, - "file_handle": { "type": "integer" }, - "file_size": { "type": "long" }, - "index": { "type": "integer" }, - "key_status": { "type": "integer" }, - "key_wrap_alg": { "type": "integer" }, - "ksq": { "type": "integer" }, - "local_forced": { "type": "integer" }, - "mal": { "type": "integer" }, - "maximum_block_size": { "type": "integer" }, - "offtime": { "type": "integer" }, - "online": { "type": "integer" }, - "ontime": { "type": "integer" }, - "op_type": { "type": "integer" }, - "optional_text": { "type": "keyword" }, - "over_range": { "type": "integer" }, - "prefix": { "type": "integer" }, - "qu": { "type": "integer" }, - "reference_err": { "type": "integer" }, - "remote_forced": { "type": "integer" }, - "request_id": { "type": "keyword" }, - "reserved": { "type": "integer" }, - "reserved0": { "type": "integer" }, - "reserved1": { "type": "integer" }, - "restart": { "type": "integer" }, - "size": { "type": "integer" }, - "state": { "type": "integer" }, - "status_code": { "type": "integer" }, - "tcc": { "type": "integer" }, - "user_number": { "type": "integer" }, - "value": { "type": "keyword" } - } - } - } - }, - "suricata.dnp3.response.control.dir": { "type": "keyword" }, - "suricata.dnp3.response.control.fcb": { "type": "keyword" }, - "suricata.dnp3.response.control.fcv": { "type": "keyword" }, - "suricata.dnp3.response.control.function_code": { "type": "integer" }, - "suricata.dnp3.response.control.pri": { "type": "keyword" }, - "suricata.dnp3.response.dst": { "type": "integer" }, - "suricata.dnp3.response.iin.indicators": { "type": "keyword" }, - "suricata.dnp3.response.src": { "type": "integer" }, - "suricata.dnp3.response.type": { "type": "keyword" }, - "suricata.dnp3.src": { "type": "integer" }, - "suricata.dnp3.type": { "type": "keyword" }, - "suricata.dns.aa": { "type": "keyword" }, - "suricata.dns.answer.aa": { "type": "keyword" }, - "suricata.dns.answer.authorities.rrname": { "type": "keyword" }, - "suricata.dns.answer.authorities.rrtype": { "type": "keyword" }, - "suricata.dns.answer.authorities.ttl": { "type": "integer" }, - "suricata.dns.answer.flags": { "type": "keyword" }, - "suricata.dns.answer.id": { "type": "integer" }, - "suricata.dns.answer.qr": { "type": "keyword" }, - "suricata.dns.answer.ra": { "type": "keyword" }, - "suricata.dns.answer.rcode": { "type": "keyword" }, - "suricata.dns.answer.rrname": { "type": "keyword" }, - "suricata.dns.answer.rrtype": { "type": "keyword" }, - "suricata.dns.answer.type": { "type": "keyword" }, - "suricata.dns.answer.version": { "type": "integer" }, - "suricata.dns.answers.rdata": { "type": "keyword" }, - "suricata.dns.answers.rrname": { "type": "keyword" }, - "suricata.dns.answers.rrtype": { "type": "keyword" }, - "suricata.dns.answers.ttl": { "type": "long" }, - "suricata.dns.authorities.rdata": { "type": "keyword" }, - "suricata.dns.authorities.rrname": { "type": "keyword" }, - "suricata.dns.authorities.rrtype": { "type": "keyword" }, - "suricata.dns.authorities.ttl": { "type": "integer" }, - "suricata.dns.flags": { "type": "keyword" }, - "suricata.dns.qr": { "type": "keyword" }, - "suricata.dns.query.id": { "type": "integer" }, - "suricata.dns.query.rrname": { "type": "keyword" }, - "suricata.dns.query.rrtype": { "type": "keyword" }, - "suricata.dns.query.tx_id": { "type": "keyword" }, - "suricata.dns.query.type": { "type": "keyword" }, - "suricata.dns.ra": { "type": "keyword" }, - "suricata.dns.rd": { "type": "keyword" }, - "suricata.dns.rrname": { "type": "keyword" }, - "suricata.dns.rrtype": { "type": "keyword" }, - "suricata.dns.tc": { "type": "keyword" }, - "suricata.dns.tx_id": { "type": "keyword" }, - "suricata.dns.version": { "type": "integer" }, - "suricata.email.attachment": { "type": "keyword" }, - "suricata.email.body_md5": { "type": "keyword" }, - "suricata.email.cc": { "type": "keyword" }, - "suricata.email.from": { "type": "keyword" }, - "suricata.email.status": { "type": "keyword" }, - "suricata.email.subject_md5": { "type": "keyword" }, - "suricata.email.to": { "type": "keyword" }, - "suricata.fileinfo.end": { "type": "integer" }, - "suricata.fileinfo.file_id": { "type": "keyword" }, - "suricata.fileinfo.filename": { "type": "keyword" }, - "suricata.fileinfo.gaps": { "type": "keyword" }, - "suricata.fileinfo.magic": { "type": "keyword" }, - "suricata.fileinfo.md5": { "type": "keyword" }, - "suricata.fileinfo.sha1": { "type": "keyword" }, - "suricata.fileinfo.sha256": { "type": "keyword" }, - "suricata.fileinfo.sid": { "type": "integer" }, - "suricata.fileinfo.size": { "type": "long" }, - "suricata.fileinfo.start": { "type": "integer" }, - "suricata.fileinfo.state": { "type": "keyword" }, - "suricata.fileinfo.tx_id": { "type": "keyword" }, - "suricata.files": { - "type": "nested", - "properties": { - "end": { "type": "keyword" }, - "filename": { "type": "keyword" }, - "gaps": { "type": "keyword" }, - "size": { "type": "long" }, - "start": { "type": "keyword" }, - "state": { "type": "keyword" }, - "tx_id": { "type": "keyword" } - } - }, - "suricata.flow.age": { "type": "integer" }, - "suricata.flow.alerted": { "type": "keyword" }, - "suricata.flow.bytes_toclient": { "type": "integer" }, - "suricata.flow.bytes_toserver": { "type": "integer" }, - "suricata.flow.emergency": { "type": "keyword" }, - "suricata.flow.end": { "type": "date" }, - "suricata.flow.pkts_toclient": { "type": "integer" }, - "suricata.flow.pkts_toserver": { "type": "integer" }, - "suricata.flow.reason": { "type": "keyword" }, - "suricata.flow.start": { "type": "date" }, - "suricata.flow.state": { "type": "keyword" }, - "suricata.flow_id": { "type": "keyword" }, - "suricata.ftp.command ": { "type": "keyword" }, - "suricata.ftp.command": { "type": "keyword" }, - "suricata.ftp.command_data": { "type": "keyword" }, - "suricata.ftp.completion_code": { "type": "keyword" }, - "suricata.ftp.dynamic_port": { "type": "integer" }, - "suricata.ftp.reply": { "type": "keyword" }, - "suricata.ftp.reply_received": { "type": "keyword" }, - "suricata.http.content_range.end": { "type": "integer" }, - "suricata.http.content_range.raw": { "type": "keyword" }, - "suricata.http.content_range.size": { "type": "integer" }, - "suricata.http.content_range.start": { "type": "integer" }, - "suricata.http.hostname": { "type": "keyword" }, - "suricata.http.http_content_type": { "type": "keyword" }, - "suricata.http.http_method": { "type": "keyword" }, - "suricata.http.http_port": { "type": "integer" }, - "suricata.http.http_refer": { "type": "keyword" }, - "suricata.http.http_request_body": { "type": "keyword" }, - "suricata.http.http_request_body_printable": { "type": "keyword" }, - "suricata.http.http_response_body": { "type": "keyword" }, - "suricata.http.http_response_body_printable": { "type": "keyword" }, - "suricata.http.http_user_agent": { "type": "keyword" }, - "suricata.http.length": { "type": "integer" }, - "suricata.http.redirect": { "type": "keyword" }, - "suricata.http.request_headers.name": { "type": "keyword" }, - "suricata.http.request_headers.value": { "type": "keyword" }, - "suricata.http.response_headers.name": { "type": "keyword" }, - "suricata.http.response_headers.value": { "type": "keyword" }, - "suricata.http.url": { "type": "keyword" }, - "suricata.icmp_code": { "type": "integer" }, - "suricata.icmp_type": { "type": "integer" }, - "suricata.ikev2.alg_auth": { "type": "keyword" }, - "suricata.ikev2.alg_dh": { "type": "keyword" }, - "suricata.ikev2.alg_enc": { "type": "keyword" }, - "suricata.ikev2.alg_esn": { "type": "keyword" }, - "suricata.ikev2.alg_prf": { "type": "keyword" }, - "suricata.ikev2.errors": { "type": "integer" }, - "suricata.ikev2.exchange_type": { "type": "integer" }, - "suricata.ikev2.init_spi": { "type": "keyword" }, - "suricata.ikev2.message_id": { "type": "keyword" }, - "suricata.ikev2.notify": { "type": "keyword" }, - "suricata.ikev2.payload": { "type": "keyword" }, - "suricata.ikev2.resp_spi": { "type": "keyword" }, - "suricata.ikev2.role": { "type": "keyword" }, - "suricata.ikev2.version_major": { "type": "integer" }, - "suricata.ikev2.version_minor": { "type": "integer" }, - "suricata.in_iface": { "type": "keyword" }, - "suricata.krb5.cname": { "type": "keyword" }, - "suricata.krb5.encryption": { "type": "keyword" }, - "suricata.krb5.error_code": { "type": "keyword" }, - "suricata.krb5.failed_request": { "type": "keyword" }, - "suricata.krb5.msg_type": { "type": "keyword" }, - "suricata.krb5.realm": { "type": "keyword" }, - "suricata.krb5.sname": { "type": "keyword" }, - "suricata.krb5.weak_encryption": { "type": "keyword" }, - "suricata.netflow.age": { "type": "integer" }, - "suricata.netflow.bytes": { "type": "integer" }, - "suricata.netflow.end": { "type": "keyword" }, - "suricata.netflow.max_ttl": { "type": "integer" }, - "suricata.netflow.min_ttl": { "type": "integer" }, - "suricata.netflow.pkts": { "type": "integer" }, - "suricata.netflow.start": { "type": "keyword" }, - "suricata.nfs.file_tx": { "type": "keyword" }, - "suricata.nfs.filename": { "type": "keyword" }, - "suricata.nfs.hhash": { "type": "keyword" }, - "suricata.nfs.id": { "type": "integer" }, - "suricata.nfs.procedure": { "type": "keyword" }, - "suricata.nfs.rename.from": { "type": "keyword" }, - "suricata.nfs.rename.to": { "type": "keyword" }, - "suricata.nfs.status": { "type": "keyword" }, - "suricata.nfs.type": { "type": "keyword" }, - "suricata.nfs.version": { "type": "integer" }, - "suricata.pcap_cnt": { "type": "integer" }, - "suricata.pcap_filename": { "type": "keyword" }, - "suricata.rdp.channels": { "type": "keyword" }, - "suricata.rdp.client.build": { "type": "keyword" }, - "suricata.rdp.client.capabilities": { "type": "keyword" }, - "suricata.rdp.client.client_name": { "type": "keyword" }, - "suricata.rdp.client.color_depth": { "type": "integer" }, - "suricata.rdp.client.connection_hint": { "type": "keyword" }, - "suricata.rdp.client.desktop_height": { "type": "integer" }, - "suricata.rdp.client.desktop_width": { "type": "integer" }, - "suricata.rdp.client.function_keys": { "type": "integer" }, - "suricata.rdp.client.id": { "type": "keyword" }, - "suricata.rdp.client.keyboard_layout": { "type": "keyword" }, - "suricata.rdp.client.keyboard_type": { "type": "keyword" }, - "suricata.rdp.client.product_id": { "type": "keyword" }, - "suricata.rdp.client.version": { "type": "keyword" }, - "suricata.rdp.cookie": { "type": "keyword" }, - "suricata.rdp.error_code": { "type": "integer" }, - "suricata.rdp.event_type": { "type": "keyword" }, - "suricata.rdp.protocol": { "type": "keyword" }, - "suricata.rdp.reason": { "type": "keyword" }, - "suricata.rdp.server_supports": { "type": "keyword" }, - "suricata.rdp.tx_id": { "type": "keyword" }, - "suricata.rdp.x509_serials": { "type": "keyword" }, - "suricata.response_icmp_code": { "type": "integer" }, - "suricata.response_icmp_type": { "type": "integer" }, - "suricata.rpc.auth_type": { "type": "keyword" }, - "suricata.rpc.creds.gid": { "type": "integer" }, - "suricata.rpc.creds.machine_name": { "type": "keyword" }, - "suricata.rpc.creds.uid": { "type": "integer" }, - "suricata.rpc.status": { "type": "keyword" }, - "suricata.rpc.xid": { "type": "integer" }, - "suricata.sip.code": { "type": "keyword" }, - "suricata.sip.method": { "type": "keyword" }, - "suricata.sip.reason": { "type": "keyword" }, - "suricata.sip.request_line": { "type": "keyword" }, - "suricata.sip.response_line": { "type": "keyword" }, - "suricata.sip.uri": { "type": "keyword" }, - "suricata.sip.version": { "type": "keyword" }, - "suricata.smb.access": { "type": "keyword" }, - "suricata.smb.accessed": { "type": "integer" }, - "suricata.smb.changed": { "type": "integer" }, - "suricata.smb.client_dialects": { "type": "keyword" }, - "suricata.smb.client_dialects[]": { "type": "keyword" }, - "suricata.smb.client_guid": { "type": "keyword" }, - "suricata.smb.command": { "type": "keyword" }, - "suricata.smb.created": { "type": "integer" }, - "suricata.smb.dcerpc.call_id": { "type": "keyword" }, - "suricata.smb.dcerpc.interfaces.ack_reason": { "type": "integer" }, - "suricata.smb.dcerpc.interfaces.ack_result": { "type": "integer" }, - "suricata.smb.dcerpc.interfaces.uuid": { "type": "keyword" }, - "suricata.smb.dcerpc.interfaces.version": { "type": "keyword" }, - "suricata.smb.dcerpc.opnum": { "type": "integer" }, - "suricata.smb.dcerpc.req.frag_cnt": { "type": "integer" }, - "suricata.smb.dcerpc.req.stub_data_size": { "type": "integer" }, - "suricata.smb.dcerpc.request": { "type": "keyword" }, - "suricata.smb.dcerpc.res.frag_cnt": { "type": "integer" }, - "suricata.smb.dcerpc.res.stub_data_size": { "type": "integer" }, - "suricata.smb.dcerpc.response": { "type": "keyword" }, - "suricata.smb.dialect": { "type": "keyword" }, - "suricata.smb.directory": { "type": "keyword" }, - "suricata.smb.disposition": { "type": "keyword" }, - "suricata.smb.filename": { "type": "keyword" }, - "suricata.smb.fuid": { "type": "keyword" }, - "suricata.smb.function": { "type": "keyword" }, - "suricata.smb.id": { "type": "integer" }, - "suricata.smb.kerberos.realm": { "type": "keyword" }, - "suricata.smb.kerberos.snames": { "type": "keyword" }, - "suricata.smb.modified": { "type": "integer" }, - "suricata.smb.named_pipe": { "type": "keyword" }, - "suricata.smb.ntlmssp.domain": { "type": "keyword" }, - "suricata.smb.ntlmssp.host": { "type": "keyword" }, - "suricata.smb.ntlmssp.user": { "type": "keyword" }, - "suricata.smb.rename.from": { "type": "keyword" }, - "suricata.smb.rename.to": { "type": "keyword" }, - "suricata.smb.request.native_lm": { "type": "keyword" }, - "suricata.smb.request.native_os": { "type": "keyword" }, - "suricata.smb.response.native_lm": { "type": "keyword" }, - "suricata.smb.response.native_os": { "type": "keyword" }, - "suricata.smb.server_guid": { "type": "keyword" }, - "suricata.smb.service.request": { "type": "keyword" }, - "suricata.smb.service.response": { "type": "keyword" }, - "suricata.smb.session_id": { "type": "keyword" }, - "suricata.smb.set_info.class": { "type": "keyword" }, - "suricata.smb.set_info.info_level": { "type": "keyword" }, - "suricata.smb.share": { "type": "keyword" }, - "suricata.smb.share_type": { "type": "keyword" }, - "suricata.smb.size": { "type": "integer" }, - "suricata.smb.status": { "type": "keyword" }, - "suricata.smb.status_code": { "type": "keyword" }, - "suricata.smb.tree_id": { "type": "keyword" }, - "suricata.smtp.helo": { "type": "keyword" }, - "suricata.snmp.community": { "type": "keyword" }, - "suricata.snmp.error": { "type": "keyword" }, - "suricata.snmp.pdu_type": { "type": "keyword" }, - "suricata.snmp.trap_address": { "type": "ip" }, - "suricata.snmp.trap_oid": { "type": "keyword" }, - "suricata.snmp.trap_type": { "type": "keyword" }, - "suricata.snmp.usm": { "type": "keyword" }, - "suricata.snmp.vars": { "type": "keyword" }, - "suricata.snmp.version": { "type": "integer" }, - "suricata.ssh.client.proto_version": { "type": "keyword" }, - "suricata.ssh.client.software_version": { "type": "keyword" }, - "suricata.ssh.server.proto_version": { "type": "keyword" }, - "suricata.ssh.server.software_version": { "type": "keyword" }, - "suricata.stream": { "type": "integer" }, - "suricata.tcp.ack": { "type": "keyword" }, - "suricata.tcp.cwr": { "type": "keyword" }, - "suricata.tcp.ecn": { "type": "keyword" }, - "suricata.tcp.fin": { "type": "keyword" }, - "suricata.tcp.psh": { "type": "keyword" }, - "suricata.tcp.rst": { "type": "keyword" }, - "suricata.tcp.state": { "type": "keyword" }, - "suricata.tcp.syn": { "type": "keyword" }, - "suricata.tcp.tcp_flags": { "type": "keyword" }, - "suricata.tcp.tcp_flags_tc": { "type": "keyword" }, - "suricata.tcp.tcp_flags_ts": { "type": "keyword" }, - "suricata.tcp.urg": { "type": "keyword" }, - "suricata.tftp.file": { "type": "keyword" }, - "suricata.tftp.mode": { "type": "keyword" }, - "suricata.tftp.packet": { "type": "keyword" }, - "suricata.timestamp": { "type": "date" }, - "suricata.tls.fingerprint": { "type": "keyword" }, - "suricata.tls.from_proto": { "type": "keyword" }, - "suricata.tls.issuerdn": { "type": "keyword" }, - "suricata.tls.notafter": { "type": "date" }, - "suricata.tls.notbefore": { "type": "date" }, - "suricata.tls.serial": { "type": "keyword" }, - "suricata.tls.session_resumed": { "type": "keyword" }, - "suricata.tls.sni": { "type": "keyword" }, - "suricata.tls.subject": { "type": "keyword" }, - "suricata.tls.version": { "type": "keyword" }, - "suricata.tunnel.depth": { "type": "integer" }, - "suricata.tunnel.dest_ip": { "type": "ip" }, - "suricata.tunnel.dest_port": { "type": "integer" }, - "suricata.tunnel.proto": { "type": "keyword" }, - "suricata.tunnel.src_ip": { "type": "ip" }, - "suricata.tunnel.src_port": { "type": "integer" }, - "suricata.tx_id": { "type": "keyword" }, "tls.client.ja3_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "tls.server.ja3s_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "user": { "type": "keyword" }, - "zeek.bacnet.bvlc_function": { "type": "keyword" }, - "zeek.bacnet.invoke_id": { "type": "integer" }, - "zeek.bacnet.pdu_service": { "type": "keyword" }, - "zeek.bacnet.pdu_type": { "type": "keyword" }, - "zeek.bacnet.result_code": { "type": "keyword" }, - "zeek.bacnet_discovery.instance_number": { "type": "integer" }, - "zeek.bacnet_discovery.object_name": { "type": "keyword" }, - "zeek.bacnet_discovery.object_type": { "type": "keyword" }, - "zeek.bacnet_discovery.pdu_service": { "type": "keyword" }, - "zeek.bacnet_discovery.range": { "type": "keyword" }, - "zeek.bacnet_discovery.range_high": { "type": "integer" }, - "zeek.bacnet_discovery.range_low": { "type": "integer" }, - "zeek.bacnet_discovery.vendor": { "type": "keyword" }, - "zeek.bacnet_property.array_index": { "type": "integer" }, - "zeek.bacnet_property.instance_number": { "type": "integer" }, - "zeek.bacnet_property.object_type": { "type": "keyword" }, - "zeek.bacnet_property.pdu_service": { "type": "keyword" }, - "zeek.bacnet_property.property": { "type": "keyword" }, - "zeek.bacnet_property.value": { "type": "keyword" }, - "zeek.bestguess.category": { "type": "keyword" }, - "zeek.bestguess.name": { "type": "keyword" }, - "zeek.bsap_ip_header.num_msg": { "type": "integer" }, - "zeek.bsap_ip_header.type_name": { "type": "keyword" }, - "zeek.bsap_ip_rdb.app_func_code": { "type": "keyword" }, - "zeek.bsap_ip_rdb.func_code": { "type": "keyword" }, - "zeek.bsap_ip_rdb.header_size": { "type": "integer" }, - "zeek.bsap_ip_rdb.mes_seq": { "type": "integer" }, - "zeek.bsap_ip_rdb.node_status": { "type": "integer" }, - "zeek.bsap_ip_rdb.res_seq": { "type": "integer" }, - "zeek.bsap_ip_rdb.sequence": { "type": "integer" }, - "zeek.bsap_ip_rdb.variable_count": { "type": "integer" }, - "zeek.bsap_ip_rdb.variables": { - "type": "nested", - "properties": { - "var": { "type": "keyword" }, - "val": { "type": "keyword" } - } - }, - "zeek.bsap_serial_header.ctl": { "type": "integer" }, - "zeek.bsap_serial_header.dadd": { "type": "integer" }, - "zeek.bsap_serial_header.dfun": { "type": "keyword" }, - "zeek.bsap_serial_header.nsb": { "type": "integer" }, - "zeek.bsap_serial_header.sadd": { "type": "integer" }, - "zeek.bsap_serial_header.seq": { "type": "integer" }, - "zeek.bsap_serial_header.ser": { "type": "keyword" }, - "zeek.bsap_serial_header.sfun": { "type": "keyword" }, - "zeek.bsap_serial_header.type_name": { "type": "keyword" }, - "zeek.bsap_serial_rdb.func_code": { "type": "keyword" }, - "zeek.bsap_serial_rdb.variable_count": { "type": "integer" }, - "zeek.bsap_serial_rdb.variables": { - "type": "nested", - "properties": { - "var": { "type": "keyword" }, - "val": { "type": "keyword" } - } - }, - "zeek.bsap_serial_rdb_ext.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.bsap_serial_rdb_ext.dfun": { "type": "keyword" }, - "zeek.bsap_serial_rdb_ext.extfun": { "type": "keyword" }, - "zeek.bsap_serial_rdb_ext.nsb": { "type": "integer" }, - "zeek.bsap_serial_rdb_ext.seq": { "type": "integer" }, - "zeek.bsap_serial_rdb_ext.sfun": { "type": "keyword" }, - "zeek.cip.attribute_id": { "type": "keyword" }, - "zeek.cip.cip_sequence_count": { "type": "integer" }, - "zeek.cip.cip_service": { "type": "keyword" }, - "zeek.cip.cip_service_code": { "type": "keyword" }, - "zeek.cip.cip_status": { "type": "keyword" }, - "zeek.cip.class_id": { "type": "keyword" }, - "zeek.cip.class_name": { "type": "keyword" }, - "zeek.cip.direction": { "type": "keyword" }, - "zeek.cip.instance_id": { "type": "keyword" }, - "zeek.cip_identity.device_state": { "type": "keyword" }, - "zeek.cip_identity.device_status": { "type": "keyword" }, - "zeek.cip_identity.device_type_id": { "type": "integer" }, - "zeek.cip_identity.device_type_name": { "type": "keyword" }, - "zeek.cip_identity.encapsulation_version": { "type": "integer" }, - "zeek.cip_identity.product_code": { "type": "integer" }, - "zeek.cip_identity.product_name": { "type": "keyword" }, - "zeek.cip_identity.revision": { "type": "keyword" }, - "zeek.cip_identity.serial_number": { "type": "keyword" }, - "zeek.cip_identity.socket_address": { "type": "ip" }, - "zeek.cip_identity.socket_address_asn": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.city_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.cip_identity.socket_address_geo.continent_code": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.country_code2": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.country_code3": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.country_name": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.cip_identity.socket_address_geo.dma_code": { "type": "short" }, - "zeek.cip_identity.socket_address_geo.ip": { "type": "ip" }, - "zeek.cip_identity.socket_address_geo.latitude": { "type": "float" }, - "zeek.cip_identity.socket_address_geo.location": { "type": "geo_point" }, - "zeek.cip_identity.socket_address_geo.longitude": { "type": "float" }, - "zeek.cip_identity.socket_address_geo.postal_code": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.region_code": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.region_name": { "type": "keyword" }, - "zeek.cip_identity.socket_address_geo.timezone": { "type": "keyword" }, - "zeek.cip_identity.socket_port": { "type": "integer" }, - "zeek.cip_identity.vendor_id": { "type": "integer" }, - "zeek.cip_identity.vendor_name": { "type": "keyword" }, - "zeek.cip_io.connection_id": { "type": "keyword" }, - "zeek.cip_io.data_length": { "type": "integer" }, - "zeek.cip_io.io_data": { "type": "keyword", "doc_values": false, "ignore_above": 8, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.cip_io.sequence_number": { "type": "integer" }, - "zeek.conn.conn_state": { "type": "keyword" }, - "zeek.conn.conn_state_description": { "type": "keyword" }, - "zeek.conn.duration": { "type": "float" }, - "zeek.conn.history": { "type": "keyword" }, - "zeek.conn.inner_vlan": { "type": "integer" }, - "zeek.conn.local_orig": { "type": "keyword" }, - "zeek.conn.local_resp": { "type": "keyword" }, - "zeek.conn.missed_bytes": { "type": "long" }, - "zeek.conn.orig_bytes": { "type": "long" }, - "zeek.conn.orig_ip_bytes": { "type": "long" }, - "zeek.conn.orig_pkts": { "type": "integer" }, - "zeek.conn.resp_bytes": { "type": "long" }, - "zeek.conn.resp_ip_bytes": { "type": "long" }, - "zeek.conn.resp_pkts": { "type": "integer" }, - "zeek.conn.tunnel_parents": { "type": "keyword" }, - "zeek.conn.vlan": { "type": "integer" }, - "zeek.dce_rpc.endpoint": { "type": "keyword" }, - "zeek.dce_rpc.named_pipe": { "type": "keyword" }, - "zeek.dce_rpc.operation": { "type": "keyword" }, - "zeek.dce_rpc.rtt": { "type": "float" }, - "zeek.dhcp.assigned_ip": { "type": "ip" }, - "zeek.dhcp.client_fqdn": { "type": "keyword" }, - "zeek.dhcp.client_message": { "type": "keyword" }, - "zeek.dhcp.client_software": { "type": "keyword" }, - "zeek.dhcp.domain": { "type": "keyword" }, - "zeek.dhcp.duration": { "type": "float" }, - "zeek.dhcp.host_name": { "type": "keyword" }, - "zeek.dhcp.lease_time": { "type": "float" }, - "zeek.dhcp.mac": { "type": "keyword" }, - "zeek.dhcp.msg_types": { "type": "keyword" }, - "zeek.dhcp.requested_ip": { "type": "ip" }, - "zeek.dhcp.server_message": { "type": "keyword" }, - "zeek.dhcp.server_software": { "type": "keyword" }, - "zeek.dhcp.trans_id": { "type": "keyword" }, - "zeek.dnp3.fc_reply": { "type": "keyword" }, - "zeek.dnp3.fc_request": { "type": "keyword" }, - "zeek.dnp3.iin": { "type": "keyword" }, - "zeek.dnp3.iin_flags": { "type": "keyword" }, - "zeek.dnp3_control.block_type": { "type": "keyword" }, - "zeek.dnp3_control.execute_count": { "type": "integer" }, - "zeek.dnp3_control.function_code": { "type": "keyword" }, - "zeek.dnp3_control.index_number": { "type": "integer" }, - "zeek.dnp3_control.off_time": { "type": "integer" }, - "zeek.dnp3_control.on_time": { "type": "integer" }, - "zeek.dnp3_control.operation_type": { "type": "keyword" }, - "zeek.dnp3_control.status_code": { "type": "keyword" }, - "zeek.dnp3_control.trip_control_code": { "type": "keyword" }, - "zeek.dnp3_objects.function_code": { "type": "keyword" }, - "zeek.dnp3_objects.object_count": { "type": "integer" }, - "zeek.dnp3_objects.object_type": { "type": "keyword" }, - "zeek.dnp3_objects.range_high": { "type": "integer" }, - "zeek.dnp3_objects.range_low": { "type": "integer" }, - "zeek.dns.AA": { "type": "keyword" }, - "zeek.dns.answers": { "type": "keyword" }, - "zeek.dns.qclass": { "type": "keyword" }, - "zeek.dns.qclass_name": { "type": "keyword" }, - "zeek.dns.qtype": { "type": "keyword" }, - "zeek.dns.qtype_name": { "type": "keyword" }, - "zeek.dns.query": { "type": "keyword" }, - "zeek.dns.RA": { "type": "keyword" }, - "zeek.dns.rcode": { "type": "short" }, - "zeek.dns.rcode_name": { "type": "keyword" }, - "zeek.dns.RD": { "type": "keyword" }, - "zeek.dns.rejected": { "type": "keyword" }, - "zeek.dns.rtt": { "type": "float" }, - "zeek.dns.TC": { "type": "keyword" }, - "zeek.dns.trans_id": { "type": "keyword" }, - "zeek.dns.TTLs": { "type": "float" }, - "zeek.dns.Z": { "type": "keyword" }, - "zeek.dpd.failure_reason": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.dpd.service": { "type": "keyword" }, - "zeek.ecat_aoe_info.command": { "type": "keyword" }, - "zeek.ecat_aoe_info.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ecat_aoe_info.orig_port": { "type": "keyword" }, - "zeek.ecat_aoe_info.resp_port": { "type": "keyword" }, - "zeek.ecat_aoe_info.state": { "type": "keyword" }, - "zeek.ecat_arp_info.arp_type": { "type": "keyword" }, - "zeek.ecat_arp_info.orig_hw_addr": { "type": "keyword" }, - "zeek.ecat_arp_info.orig_proto_addr": { "type": "keyword" }, - "zeek.ecat_arp_info.resp_hw_addr": { "type": "keyword" }, - "zeek.ecat_arp_info.resp_proto_addr": { "type": "keyword" }, - "zeek.ecat_coe_info.dataoffset": { "type": "keyword" }, - "zeek.ecat_coe_info.index": { "type": "keyword" }, - "zeek.ecat_coe_info.number": { "type": "keyword" }, - "zeek.ecat_coe_info.req_resp": { "type": "keyword" }, - "zeek.ecat_coe_info.subindex": { "type": "keyword" }, - "zeek.ecat_coe_info.type": { "type": "keyword" }, - "zeek.ecat_dev_info.build": { "type": "keyword" }, - "zeek.ecat_dev_info.dev_type": { "type": "keyword" }, - "zeek.ecat_dev_info.dpram": { "type": "keyword" }, - "zeek.ecat_dev_info.features": { "type": "keyword" }, - "zeek.ecat_dev_info.fmmucnt": { "type": "keyword" }, - "zeek.ecat_dev_info.ports": { "type": "keyword" }, - "zeek.ecat_dev_info.revision": { "type": "keyword" }, - "zeek.ecat_dev_info.server_id": { "type": "keyword" }, - "zeek.ecat_dev_info.smcount": { "type": "keyword" }, - "zeek.ecat_foe_info.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ecat_foe_info.error_code": { "type": "keyword" }, - "zeek.ecat_foe_info.filename": { "type": "keyword" }, - "zeek.ecat_foe_info.opcode": { "type": "keyword" }, - "zeek.ecat_foe_info.packet_num": { "type": "keyword" }, - "zeek.ecat_foe_info.reserved": { "type": "keyword" }, - "zeek.ecat_log_address.command": { "type": "keyword" }, - "zeek.ecat_log_address.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ecat_log_address.length": { "type": "integer" }, - "zeek.ecat_log_address.log_addr": { "type": "keyword" }, - "zeek.ecat_registers.command": { "type": "keyword" }, - "zeek.ecat_registers.data": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ecat_registers.register_addr": { "type": "keyword" }, - "zeek.ecat_registers.register_type": { "type": "keyword" }, - "zeek.ecat_registers.server_addr": { "type": "keyword" }, - "zeek.ecat_soe_info.drive_num": { "type": "keyword" }, - "zeek.ecat_soe_info.element": { "type": "keyword" }, - "zeek.ecat_soe_info.error": { "type": "keyword" }, - "zeek.ecat_soe_info.incomplete": { "type": "keyword" }, - "zeek.ecat_soe_info.index": { "type": "keyword" }, - "zeek.ecat_soe_info.opcode": { "type": "keyword" }, - "zeek.enip.enip_command": { "type": "keyword" }, - "zeek.enip.enip_command_code": { "type": "keyword" }, - "zeek.enip.enip_status": { "type": "keyword" }, - "zeek.enip.length": { "type": "integer" }, - "zeek.enip.options": { "type": "keyword" }, - "zeek.enip.sender_context": { "type": "keyword" }, - "zeek.enip.session_handle": { "type": "keyword" }, - "zeek.files.analyzers": { "type": "keyword" }, - "zeek.files.conn_uids": { "type": "keyword" }, - "zeek.files.depth": { "type": "integer" }, - "zeek.files.duration": { "type": "float" }, - "zeek.files.extracted": { "type": "keyword" }, - "zeek.files.extracted_cutoff": { "type": "keyword" }, - "zeek.files.extracted_size": { "type": "long" }, - "zeek.files.filename": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.files.ftime": { "type": "date" }, - "zeek.files.is_orig": { "type": "keyword" }, - "zeek.files.local_orig": { "type": "keyword" }, - "zeek.files.md5": { "type": "keyword" }, - "zeek.files.mime_type": { "type": "keyword" }, - "zeek.files.missing_bytes": { "type": "long" }, - "zeek.files.overflow_bytes": { "type": "long" }, - "zeek.files.parent_fuid": { "type": "keyword" }, - "zeek.files.rx_hosts": { "type": "ip" }, - "zeek.files.seen_bytes": { "type": "long" }, - "zeek.files.sha1": { "type": "keyword" }, - "zeek.files.sha256": { "type": "keyword" }, - "zeek.files.timedout": { "type": "keyword" }, - "zeek.files.total_bytes": { "type": "long" }, - "zeek.files.tx_hosts": { "type": "ip" }, - "zeek.ftp.arg": { "type": "keyword" }, - "zeek.ftp.command": { "type": "keyword" }, - "zeek.ftp.data_channel_orig_h": { "type": "ip" }, - "zeek.ftp.data_channel_passive": { "type": "keyword" }, - "zeek.ftp.data_channel_resp_h": { "type": "ip" }, - "zeek.ftp.data_channel_resp_p": { "type": "integer" }, - "zeek.ftp.file_size": { "type": "long" }, - "zeek.ftp.mime_type": { "type": "keyword" }, - "zeek.ftp.reply_code": { "type": "short" }, - "zeek.ftp.reply_msg": { "type": "keyword" }, - "zeek.fuid": { "type": "keyword" }, - "zeek.genisys.header": { "type": "keyword" }, - "zeek.genisys.server": { "type": "integer" }, - "zeek.genisys.direction": { "type": "keyword" }, - "zeek.genisys.crc_transmitted": { "type": "keyword" }, - "zeek.genisys.crc_calculated": { "type": "keyword" }, - "zeek.genisys.payload": { - "type": "nested", - "properties": { - "address": { "type": "integer" }, - "data": { "type": "integer" } - } - }, - "zeek.gquic.cyu": { "type": "keyword" }, - "zeek.gquic.cyutags": { "type": "keyword" }, - "zeek.gquic.server_name": { "type": "keyword" }, - "zeek.gquic.tag_count": { "type": "integer" }, - "zeek.gquic.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.gquic.version": { "type": "keyword" }, - "zeek.http.host": { "type": "keyword" }, - "zeek.http.info_code": { "type": "short" }, - "zeek.http.info_msg": { "type": "keyword" }, - "zeek.http.method": { "type": "keyword" }, - "zeek.http.orig_filenames": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.http.orig_fuids": { "type": "keyword" }, - "zeek.http.orig_mime_types": { "type": "keyword" }, - "zeek.http.origin": { "type": "keyword" }, - "zeek.http.post_password_plain": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.http.post_username": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.http.proxied": { "type": "keyword" }, - "zeek.http.referrer": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.http.request_body_len": { "type": "long" }, - "zeek.http.resp_filenames": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.http.resp_fuids": { "type": "keyword" }, - "zeek.http.resp_mime_types": { "type": "keyword" }, - "zeek.http.response_body_len": { "type": "long" }, - "zeek.http.status_code": { "type": "short" }, - "zeek.http.status_msg": { "type": "keyword", "ignore_above": 1024 }, - "zeek.http.tags": { "type": "keyword" }, - "zeek.http.trans_depth": { "type": "integer" }, - "zeek.http.uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.http.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.http.version": { "type": "keyword" }, - "zeek.intel.cif_confidence": { "type": "float" }, - "zeek.intel.cif_description": { "type": "keyword" }, - "zeek.intel.cif_firstseen": { "type": "keyword" }, - "zeek.intel.cif_lastseen": { "type": "keyword" }, - "zeek.intel.cif_source": { "type": "keyword" }, - "zeek.intel.cif_tags": { "type": "keyword" }, - "zeek.intel.file_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.intel.file_mime_type": { "type": "keyword" }, - "zeek.intel.matched": { "type": "keyword" }, - "zeek.intel.seen_indicator": { "type": "keyword" }, - "zeek.intel.seen_indicator_type": { "type": "keyword" }, - "zeek.intel.seen_node": { "type": "keyword" }, - "zeek.intel.seen_where": { "type": "keyword" }, - "zeek.intel.sources": { "type": "keyword" }, - "zeek.ipsec.certificates": { "type": "keyword" }, - "zeek.ipsec.exchange_type": { "type": "integer" }, - "zeek.ipsec.flag_a": { "type": "keyword" }, - "zeek.ipsec.flag_c": { "type": "keyword" }, - "zeek.ipsec.flag_e": { "type": "keyword" }, - "zeek.ipsec.flag_i": { "type": "keyword" }, - "zeek.ipsec.flag_r": { "type": "keyword" }, - "zeek.ipsec.flag_v": { "type": "keyword" }, - "zeek.ipsec.flags": { "type": "keyword" }, - "zeek.ipsec.hash": { "type": "keyword" }, - "zeek.ipsec.initiator_spi": { "type": "keyword" }, - "zeek.ipsec.is_orig": { "type": "keyword" }, - "zeek.ipsec.ke_dh_groups": { "type": "integer" }, - "zeek.ipsec.length": { "type": "integer" }, - "zeek.ipsec.maj_ver": { "type": "integer" }, - "zeek.ipsec.message_id": { "type": "keyword" }, - "zeek.ipsec.min_ver": { "type": "integer" }, - "zeek.ipsec.notify_messages": { "type": "keyword" }, - "zeek.ipsec.proposals": { "type": "integer" }, - "zeek.ipsec.responder_spi": { "type": "keyword" }, - "zeek.ipsec.transform_attributes": { "type": "keyword" }, - "zeek.ipsec.transforms": { "type": "keyword" }, - "zeek.ipsec.vendor_ids": { "type": "keyword" }, - "zeek.irc.addl": { "type": "keyword" }, - "zeek.irc.command": { "type": "keyword" }, - "zeek.irc.dcc_file_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.irc.dcc_file_size": { "type": "long" }, - "zeek.irc.dcc_mime_type": { "type": "keyword" }, - "zeek.irc.nick": { "type": "keyword" }, - "zeek.irc.value": { "type": "keyword" }, - "zeek.iso_cotp.pdu_type": { "type": "keyword" }, - "zeek.kerberos.cipher": { "type": "keyword" }, - "zeek.kerberos.client_cert_fuid": { "type": "keyword" }, - "zeek.kerberos.client_cert_subject": { "type": "keyword" }, - "zeek.kerberos.cname": { "type": "keyword" }, - "zeek.kerberos.error_msg": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.kerberos.forwardable": { "type": "keyword" }, - "zeek.kerberos.from": { "type": "date" }, - "zeek.kerberos.renewable": { "type": "keyword" }, - "zeek.kerberos.request_type": { "type": "keyword" }, - "zeek.kerberos.server_cert_fuid": { "type": "keyword" }, - "zeek.kerberos.server_cert_subject": { "type": "keyword" }, - "zeek.kerberos.sname": { "type": "keyword" }, - "zeek.kerberos.success": { "type": "keyword" }, - "zeek.kerberos.till": { "type": "date" }, - "zeek.known_certs.issuer_subject": { "type": "keyword" }, - "zeek.known_certs.serial": { "type": "keyword" }, - "zeek.known_certs.subject": { "type": "keyword" }, - "zeek.known_modbus.device_type": { "type": "keyword" }, - "zeek.ldap.argument": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ldap.message_id": { "type": "keyword" }, - "zeek.ldap.object": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ldap.operation": { "type": "keyword" }, - "zeek.ldap.result_code": { "type": "keyword" }, - "zeek.ldap.result_message": { "type": "keyword" }, - "zeek.ldap.version": { "type": "integer" }, - "zeek.ldap_search.attributes": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ldap_search.base_object": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ldap_search.deref": { "type": "keyword" }, - "zeek.ldap_search.filter": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.ldap_search.message_id": { "type": "keyword" }, - "zeek.ldap_search.result_code": { "type": "keyword" }, - "zeek.ldap_search.result_count": { "type": "integer" }, - "zeek.ldap_search.result_message": { "type": "keyword" }, - "zeek.ldap_search.scope": { "type": "keyword" }, - "zeek.login.client_user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.login.confused": { "type": "keyword" }, - "zeek.login.success": { "type": "keyword" }, - "zeek.modbus.exception": { "type": "keyword" }, - "zeek.modbus.func": { "type": "keyword" }, - "zeek.modbus_detailed.address": { "type": "integer" }, - "zeek.modbus_detailed.func": { "type": "keyword" }, - "zeek.modbus_detailed.network_direction": { "type": "keyword" }, - "zeek.modbus_detailed.quantity": { "type": "integer" }, - "zeek.modbus_detailed.unit_id": { "type": "integer" }, - "zeek.modbus_detailed.values": { "type": "keyword" }, - "zeek.modbus_mask_write_register.address": { "type": "integer" }, - "zeek.modbus_mask_write_register.and_mask": { "type": "integer" }, - "zeek.modbus_mask_write_register.func": { "type": "keyword" }, - "zeek.modbus_mask_write_register.network_direction": { "type": "keyword" }, - "zeek.modbus_mask_write_register.or_mask": { "type": "integer" }, - "zeek.modbus_mask_write_register.unit_id": { "type": "integer" }, - "zeek.modbus_read_write_multiple_registers.func": { "type": "keyword" }, - "zeek.modbus_read_write_multiple_registers.network_direction": { "type": "keyword" }, - "zeek.modbus_read_write_multiple_registers.read_quantity": { "type": "integer" }, - "zeek.modbus_read_write_multiple_registers.read_registers": { "type": "keyword" }, - "zeek.modbus_read_write_multiple_registers.read_start_address": { "type": "integer" }, - "zeek.modbus_read_write_multiple_registers.unit_id": { "type": "integer" }, - "zeek.modbus_read_write_multiple_registers.write_registers": { "type": "keyword" }, - "zeek.modbus_read_write_multiple_registers.write_start_address": { "type": "integer" }, - "zeek.mqtt_connect.client_id": { "type": "keyword" }, - "zeek.mqtt_connect.connect_status": { "type": "keyword" }, - "zeek.mqtt_connect.proto_name": { "type": "keyword" }, - "zeek.mqtt_connect.proto_version": { "type": "keyword" }, - "zeek.mqtt_connect.will_payload": { "type": "keyword" }, - "zeek.mqtt_connect.will_topic": { "type": "keyword" }, - "zeek.mqtt_publish.from_client": { "type": "keyword" }, - "zeek.mqtt_publish.payload": { "type": "keyword" }, - "zeek.mqtt_publish.payload_dict.messageType": { "type": "keyword" }, - "zeek.mqtt_publish.payload_len": { "type": "integer" }, - "zeek.mqtt_publish.qos": { "type": "keyword" }, - "zeek.mqtt_publish.retain": { "type": "keyword" }, - "zeek.mqtt_publish.status": { "type": "keyword" }, - "zeek.mqtt_publish.topic": { "type": "keyword" }, - "zeek.mqtt_subscribe.ack": { "type": "keyword" }, - "zeek.mqtt_subscribe.action": { "type": "keyword" }, - "zeek.mqtt_subscribe.granted_qos_level": { "type": "integer" }, - "zeek.mqtt_subscribe.qos_levels": { "type": "integer" }, - "zeek.mqtt_subscribe.topics": { "type": "keyword" }, - "zeek.mysql.arg": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.mysql.cmd": { "type": "keyword" }, - "zeek.mysql.response": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.mysql.rows": { "type": "integer" }, - "zeek.mysql.success": { "type": "keyword" }, - "zeek.notice.actions": { "type": "keyword" }, - "zeek.notice.dropped": { "type": "keyword" }, - "zeek.notice.dst": { "type": "ip" }, - "zeek.notice.file_desc": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.notice.file_mime_type": { "type": "keyword" }, - "zeek.notice.msg": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.notice.n": { "type": "integer" }, - "zeek.notice.note": { "type": "keyword" }, - "zeek.notice.p": { "type": "integer" }, - "zeek.notice.peer_descr": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.notice.remote_location_city": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.notice.remote_location_country_code": { "type": "keyword" }, - "zeek.notice.remote_location_latitude": { "type": "float" }, - "zeek.notice.remote_location_longitude": { "type": "float" }, - "zeek.notice.remote_location_region": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.notice.src": { "type": "ip" }, - "zeek.notice.sub": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.notice.suppress_for": { "type": "float" }, - "zeek.ntlm.domain": { "type": "keyword" }, - "zeek.ntlm.host": { "type": "keyword" }, - "zeek.ntlm.server_dns_computer": { "type": "keyword" }, - "zeek.ntlm.server_nb_computer": { "type": "keyword" }, - "zeek.ntlm.server_tree": { "type": "keyword" }, - "zeek.ntlm.status": { "type": "keyword" }, - "zeek.ntlm.success": { "type": "keyword" }, - "zeek.ntp.mode": { "type": "keyword" }, - "zeek.ntp.mode_str": { "type": "keyword" }, - "zeek.ntp.num_exts": { "type": "integer" }, - "zeek.ntp.org_time": { "type": "date" }, - "zeek.ntp.poll": { "type": "float" }, - "zeek.ntp.precision": { "type": "float" }, - "zeek.ntp.rec_time": { "type": "date" }, - "zeek.ntp.ref_id": { "type": "keyword" }, - "zeek.ntp.ref_time": { "type": "date" }, - "zeek.ntp.root_delay": { "type": "float" }, - "zeek.ntp.root_disp": { "type": "float" }, - "zeek.ntp.stratum": { "type": "keyword" }, - "zeek.ntp.version": { "type": "integer" }, - "zeek.ntp.xmt_time": { "type": "date" }, - "zeek.ocsp.certStatus": { "type": "keyword" }, - "zeek.ocsp.hashAlgorithm": { "type": "keyword" }, - "zeek.ocsp.issuerKeyHash": { "type": "keyword" }, - "zeek.ocsp.issuerNameHash": { "type": "keyword" }, - "zeek.ocsp.nextUpdate": { "type": "date" }, - "zeek.ocsp.revokereason": { "type": "keyword" }, - "zeek.ocsp.revoketime": { "type": "date" }, - "zeek.ocsp.serialNumber": { "type": "keyword" }, - "zeek.ocsp.thisUpdate": { "type": "date" }, - "zeek.opcua_binary.encoding_mask": { "type": "long" }, - "zeek.opcua_binary.endpoint_url": { "type": "keyword" }, - "zeek.opcua_binary.error": { "type": "long" }, - "zeek.opcua_binary.identifier": { "type": "long" }, - "zeek.opcua_binary.identifier_str": { "type": "keyword" }, - "zeek.opcua_binary.is_final": { "type": "keyword" }, - "zeek.opcua_binary.max_chunk_cnt": { "type": "long" }, - "zeek.opcua_binary.max_msg_size": { "type": "long" }, - "zeek.opcua_binary.msg_size": { "type": "long" }, - "zeek.opcua_binary.msg_type": { "type": "keyword" }, - "zeek.opcua_binary.namespace_idx": { "type": "long" }, - "zeek.opcua_binary.opcua_id": { "type": "keyword" }, - "zeek.opcua_binary.rcv_buf_size": { "type": "long" }, - "zeek.opcua_binary.rcv_cert": { "type": "keyword" }, - "zeek.opcua_binary.rcv_cert_len": { "type": "integer" }, - "zeek.opcua_binary.reason": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_add_hdr_enc_mask": { "type": "long" }, - "zeek.opcua_binary.req_hdr_add_hdr_type_id": { "type": "long" }, - "zeek.opcua_binary.req_hdr_audit_entry_id": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_node_id_guid": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_node_id_namespace_idx": { "type": "long" }, - "zeek.opcua_binary.req_hdr_node_id_numeric": { "type": "long" }, - "zeek.opcua_binary.req_hdr_node_id_opaque": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_node_id_string": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_node_id_type": { "type": "keyword" }, - "zeek.opcua_binary.req_hdr_request_handle": { "type": "long" }, - "zeek.opcua_binary.req_hdr_return_diag": { "type": "long" }, - "zeek.opcua_binary.req_hdr_timeout_hint": { "type": "date" }, - "zeek.opcua_binary.req_hdr_timestamp": { "type": "date" }, - "zeek.opcua_binary.request_id": { "type": "long" }, - "zeek.opcua_binary.res_hdr_add_hdr_enc_mask": { "type": "long" }, - "zeek.opcua_binary.res_hdr_add_hdr_type_id": { "type": "long" }, - "zeek.opcua_binary.res_hdr_request_handle": { "type": "long" }, - "zeek.opcua_binary.res_hdr_service_diag_encoding": { "type": "long" }, - "zeek.opcua_binary.res_hdr_service_result": { "type": "long" }, - "zeek.opcua_binary.res_hdr_timestamp": { "type": "date" }, - "zeek.opcua_binary.sec_channel_id": { "type": "long" }, - "zeek.opcua_binary.sec_policy_uri": { "type": "keyword" }, - "zeek.opcua_binary.sec_policy_uri_len": { "type": "integer" }, - "zeek.opcua_binary.seq_number": { "type": "long" }, - "zeek.opcua_binary.snd_buf_size": { "type": "long" }, - "zeek.opcua_binary.snd_cert": { "type": "keyword" }, - "zeek.opcua_binary.snd_cert_len": { "type": "integer" }, - "zeek.opcua_binary.version": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.addl_info": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_addl_info": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_inner_diag_info": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_inner_stat_code": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_locale": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_locale_txt": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_namespace_uri": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.has_symbolic_id": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.inner_diag_level": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.inner_stat_code": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.locale": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.locale_str": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.locale_txt": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.locale_txt_str": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.namespace_uri": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.namespace_uri_str": { "type": "keyword" }, - "zeek.opcua_binary_diag_info_detail.symbolic_id": { "type": "long" }, - "zeek.opcua_binary_diag_info_detail.symbolic_id_str": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.application_type": { "type": "long" }, - "zeek.opcua_binary_get_endpoints.application_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.cert_size": { "type": "long" }, - "zeek.opcua_binary_get_endpoints.discovery_profile_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.encoding_mask": { "type": "long" }, - "zeek.opcua_binary_get_endpoints.endpoint_url": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.gateway_server_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.locale": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.locale_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.message_security_mode": { "type": "long" }, - "zeek.opcua_binary_get_endpoints.product_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.profile_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.security_level": { "type": "long" }, - "zeek.opcua_binary_get_endpoints.security_policy_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.server_cert": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.text": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.transport_profile_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints.user_token_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_discovery.discovery_profile_url": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_endpoint_url": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_issued_type": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_policy_id": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_sec_policy_uri": { "type": "keyword" }, - "zeek.opcua_binary_get_endpoints_user_token.user_token_type": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.client_nonce": { "type": "keyword" }, - "zeek.opcua_binary_opensecure_channel.client_proto_ver": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.message_security_mode": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.req_lifetime": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.sec_token_created_at": { "type": "date" }, - "zeek.opcua_binary_opensecure_channel.sec_token_id": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.sec_token_request_type": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.sec_token_revised_time": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.sec_token_sec_channel_id": { "type": "long" }, - "zeek.opcua_binary_opensecure_channel.server_nonce": { "type": "keyword" }, - "zeek.opcua_binary_opensecure_channel.server_proto_ver": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.historian_bits": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.historian_bits_str": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.historianExtraData": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.historianMultiValue": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.historianPartial": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.info_type": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.info_type_str": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.limit_bits": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.limit_bits_str": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.overflow": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.semantics_changed": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.severity": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.severity_str": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.source": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.source_str": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.status_code": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.structure_changed": { "type": "keyword" }, - "zeek.opcua_binary_status_code_detail.sub_code": { "type": "long" }, - "zeek.opcua_binary_status_code_detail.sub_code_str": { "type": "keyword" }, - "zeek.ospf.advert_router": { "type": "ip" }, - "zeek.ospf.area_id": { "type": "ip" }, - "zeek.ospf.backup_router": { "type": "ip" }, - "zeek.ospf.desig_router": { "type": "ip" }, - "zeek.ospf.dest_router_id": { "type": "ip" }, - "zeek.ospf.fwd_addrs": { "type": "ip" }, - "zeek.ospf.interface_id": { "type": "integer" }, - "zeek.ospf.intra_prefixes": { "type": "keyword" }, - "zeek.ospf.link_data": { "type": "ip" }, - "zeek.ospf.link_id": { "type": "ip" }, - "zeek.ospf.link_prefixes": { "type": "keyword" }, - "zeek.ospf.link_state_id": { "type": "ip" }, - "zeek.ospf.link_type": { "type": "keyword" }, - "zeek.ospf.lsa_type": { "type": "keyword" }, - "zeek.ospf.metric": { "type": "integer" }, - "zeek.ospf.metrics": { "type": "long" }, - "zeek.ospf.neighbor_interface_id": { "type": "integer" }, - "zeek.ospf.neighbor_router_id": { "type": "ip" }, - "zeek.ospf.neighbors": { "type": "ip" }, - "zeek.ospf.netmask": { "type": "ip" }, - "zeek.ospf.ospf_type": { "type": "keyword" }, - "zeek.ospf.prefix": { "type": "keyword" }, - "zeek.ospf.route_tags": { "type": "integer" }, - "zeek.ospf.router_id": { "type": "ip" }, - "zeek.ospf.routers": { "type": "ip" }, - "zeek.ospf.version": { "type": "integer" }, - "zeek.pe.compile_ts": { "type": "date" }, - "zeek.pe.has_cert_table": { "type": "keyword" }, - "zeek.pe.has_debug_data": { "type": "keyword" }, - "zeek.pe.has_export_table": { "type": "keyword" }, - "zeek.pe.has_import_table": { "type": "keyword" }, - "zeek.pe.is_64bit": { "type": "keyword" }, - "zeek.pe.is_exe": { "type": "keyword" }, - "zeek.pe.machine": { "type": "keyword" }, - "zeek.pe.os": { "type": "keyword" }, - "zeek.pe.section_names": { "type": "keyword" }, - "zeek.pe.subsystem": { "type": "keyword" }, - "zeek.pe.uses_aslr": { "type": "keyword" }, - "zeek.pe.uses_code_integrity": { "type": "keyword" }, - "zeek.pe.uses_dep": { "type": "keyword" }, - "zeek.pe.uses_seh": { "type": "keyword" }, - "zeek.profinet.block_version": { "type": "keyword" }, - "zeek.profinet.index": { "type": "keyword" }, - "zeek.profinet.operation_type": { "type": "keyword" }, - "zeek.profinet.slot_number": { "type": "integer" }, - "zeek.profinet.subslot_number": { "type": "integer" }, - "zeek.profinet_dce_rpc.activity_uuid": { "type": "keyword" }, - "zeek.profinet_dce_rpc.interface_uuid": { "type": "keyword" }, - "zeek.profinet_dce_rpc.object_uuid": { "type": "keyword" }, - "zeek.profinet_dce_rpc.operation": { "type": "keyword" }, - "zeek.profinet_dce_rpc.packet_type": { "type": "keyword" }, - "zeek.profinet_dce_rpc.server_boot_time": { "type": "integer" }, - "zeek.profinet_dce_rpc.version": { "type": "integer" }, - "zeek.radius.connect_info": { "type": "keyword" }, - "zeek.radius.framed_addr": { "type": "ip" }, - "zeek.radius.mac": { "type": "keyword" }, - "zeek.radius.reply_msg": { "type": "keyword" }, - "zeek.radius.result": { "type": "keyword" }, - "zeek.radius.ttl": { "type": "float" }, - "zeek.radius.tunnel_client": { "type": "keyword" }, - "zeek.rdp.cert_count": { "type": "integer" }, - "zeek.rdp.cert_permanent": { "type": "keyword" }, - "zeek.rdp.cert_type": { "type": "keyword" }, - "zeek.rdp.client_build": { "type": "keyword" }, - "zeek.rdp.client_channels": { "type": "keyword" }, - "zeek.rdp.client_dig_product_id": { "type": "keyword" }, - "zeek.rdp.client_name": { "type": "keyword" }, - "zeek.rdp.cookie": { "type": "keyword" }, - "zeek.rdp.desktop_height": { "type": "integer" }, - "zeek.rdp.desktop_width": { "type": "integer" }, - "zeek.rdp.encryption_level": { "type": "keyword" }, - "zeek.rdp.encryption_method": { "type": "keyword" }, - "zeek.rdp.keyboard_layout": { "type": "keyword" }, - "zeek.rdp.requested_color_depth": { "type": "keyword" }, - "zeek.rdp.result": { "type": "keyword" }, - "zeek.rdp.security_protocol": { "type": "keyword" }, - "zeek.rfb.auth": { "type": "keyword" }, - "zeek.rfb.authentication_method": { "type": "keyword" }, - "zeek.rfb.client_major_version": { "type": "keyword" }, - "zeek.rfb.client_minor_version": { "type": "keyword" }, - "zeek.rfb.desktop_name": { "type": "keyword" }, - "zeek.rfb.height": { "type": "integer" }, - "zeek.rfb.server_major_version": { "type": "keyword" }, - "zeek.rfb.server_minor_version": { "type": "keyword" }, - "zeek.rfb.share_flag": { "type": "keyword" }, - "zeek.rfb.width": { "type": "integer" }, - "zeek.s7comm.data_info": { "type": "keyword" }, - "zeek.s7comm.item_count": { "type": "integer" }, - "zeek.s7comm.parameter": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.s7comm.parameters.class": { "type": "keyword" }, - "zeek.s7comm.parameters.code": { "type": "keyword" }, - "zeek.s7comm.parameters.group": { "type": "keyword" }, - "zeek.s7comm.parameters.mode": { "type": "keyword" }, - "zeek.s7comm.parameters.sub": { "type": "keyword" }, - "zeek.s7comm.parameters.type": { "type": "keyword" }, - "zeek.s7comm.rosctr": { "type": "keyword" }, - "zeek.signatures.hits": { - "type": "nested", - "properties": { - "Capa": { "type": "keyword" }, - "ClamAV": { "type": "keyword" }, - "Yara": { "type": "keyword" } - } - }, - "zeek.signatures.host_count": { "type": "integer" }, - "zeek.signatures.signature_count": { "type": "integer" }, - "zeek.signatures.signature_id": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.signatures.sub_message": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.sip.call_id": { "type": "keyword" }, - "zeek.sip.content_type": { "type": "keyword" }, - "zeek.sip.date": { "type": "keyword" }, - "zeek.sip.method": { "type": "keyword" }, - "zeek.sip.reply_to": { "type": "keyword" }, - "zeek.sip.request_body_len": { "type": "integer" }, - "zeek.sip.request_from": { "type": "keyword" }, - "zeek.sip.request_path": { "type": "keyword" }, - "zeek.sip.request_to": { "type": "keyword" }, - "zeek.sip.response_body_len": { "type": "integer" }, - "zeek.sip.response_from": { "type": "keyword" }, - "zeek.sip.response_path": { "type": "keyword" }, - "zeek.sip.response_to": { "type": "keyword" }, - "zeek.sip.seq": { "type": "keyword" }, - "zeek.sip.status_code": { "type": "short" }, - "zeek.sip.status_msg": { "type": "keyword" }, - "zeek.sip.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.sip.trans_depth": { "type": "integer" }, - "zeek.sip.uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.sip.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.sip.version": { "type": "keyword" }, - "zeek.sip.warning": { "type": "keyword" }, - "zeek.smb_cmd.argument": { "type": "keyword" }, - "zeek.smb_cmd.command": { "type": "keyword" }, - "zeek.smb_cmd.rtt": { "type": "float" }, - "zeek.smb_cmd.status": { "type": "keyword" }, - "zeek.smb_cmd.sub_command": { "type": "keyword" }, - "zeek.smb_cmd.tree": { "type": "keyword" }, - "zeek.smb_cmd.tree_service": { "type": "keyword" }, - "zeek.smb_cmd.user": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.smb_cmd.version": { "type": "keyword" }, - "zeek.smb_files.action": { "type": "keyword" }, - "zeek.smb_files.data_len_req": { "type": "long" }, - "zeek.smb_files.data_len_rsp": { "type": "long" }, - "zeek.smb_files.data_offset_req": { "type": "long" }, - "zeek.smb_files.name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smb_files.path": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smb_files.prev_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smb_files.size": { "type": "long" }, - "zeek.smb_files.times_accessed": { "type": "date" }, - "zeek.smb_files.times_changed": { "type": "date" }, - "zeek.smb_files.times_created": { "type": "date" }, - "zeek.smb_files.times_modified": { "type": "date" }, - "zeek.smb_files.ts": { "type": "date" }, - "zeek.smb_mapping.native_file_system": { "type": "keyword" }, - "zeek.smb_mapping.path": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smb_mapping.resource_type": { "type": "keyword" }, - "zeek.smb_mapping.share_type": { "type": "keyword" }, - "zeek.smtp.cc": { "type": "keyword" }, - "zeek.smtp.date": { "type": "keyword" }, - "zeek.smtp.first_received": { "type": "keyword" }, - "zeek.smtp.from": { "type": "keyword" }, - "zeek.smtp.helo": { "type": "keyword" }, - "zeek.smtp.in_reply_to": { "type": "keyword" }, - "zeek.smtp.is_webmail": { "type": "keyword" }, - "zeek.smtp.last_reply": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smtp.last_reply_code": { "type": "keyword" }, - "zeek.smtp.last_reply_msg": { "type": "keyword" }, - "zeek.smtp.mailfrom": { "type": "keyword" }, - "zeek.smtp.msg_id": { "type": "keyword" }, - "zeek.smtp.path": { "type": "ip" }, - "zeek.smtp.rcptto": { "type": "keyword" }, - "zeek.smtp.reply_to": { "type": "keyword" }, - "zeek.smtp.second_received": { "type": "keyword" }, - "zeek.smtp.subject": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.smtp.tls": { "type": "keyword" }, - "zeek.smtp.to": { "type": "keyword" }, - "zeek.smtp.trans_depth": { "type": "integer" }, - "zeek.smtp.user_agent": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.smtp.x_originating_ip": { "type": "ip" }, - "zeek.snmp.community": { "type": "keyword" }, - "zeek.snmp.display_string": { "type": "keyword" }, - "zeek.snmp.duration": { "type": "float" }, - "zeek.snmp.get_bulk_requests": { "type": "integer" }, - "zeek.snmp.get_requests": { "type": "integer" }, - "zeek.snmp.get_responses": { "type": "integer" }, - "zeek.snmp.set_requests": { "type": "integer" }, - "zeek.snmp.up_since": { "type": "date" }, - "zeek.snmp.version": { "type": "keyword" }, - "zeek.socks.bound_host": { "type": "ip" }, - "zeek.socks.bound_name": { "type": "keyword" }, - "zeek.socks.bound_port": { "type": "integer" }, - "zeek.socks.request_host": { "type": "ip" }, - "zeek.socks.request_name": { "type": "keyword" }, - "zeek.socks.request_port": { "type": "integer" }, - "zeek.socks.server_status": { "type": "keyword" }, - "zeek.socks.version": { "type": "integer" }, - "zeek.software.name": { "type": "keyword", "ignore_above": 256, "fields": { "text": { "type": "text" } } }, - "zeek.software.software_type": { "type": "keyword" }, - "zeek.software.unparsed_version": { "type": "keyword", "ignore_above": 1024 }, - "zeek.software.version_addl": { "type": "keyword", "ignore_above": 1024 }, - "zeek.software.version_major": { "type": "integer" }, - "zeek.software.version_minor": { "type": "integer" }, - "zeek.software.version_minor2": { "type": "integer" }, - "zeek.software.version_minor3": { "type": "integer" }, - "zeek.ssh.auth_attempts": { "type": "integer" }, - "zeek.ssh.auth_success": { "type": "keyword" }, - "zeek.ssh.cipher_alg": { "type": "keyword" }, - "zeek.ssh.client": { "type": "keyword" }, - "zeek.ssh.compression_alg": { "type": "keyword" }, - "zeek.ssh.cshka": { "type": "keyword" }, - "zeek.ssh.direction": { "type": "keyword" }, - "zeek.ssh.hassh": { "type": "keyword" }, - "zeek.ssh.hasshAlgorithms": { "type": "keyword" }, - "zeek.ssh.hasshServer": { "type": "keyword" }, - "zeek.ssh.hasshServerAlgorithms": { "type": "keyword" }, - "zeek.ssh.hasshVersion": { "type": "keyword" }, - "zeek.ssh.host_key": { "type": "keyword" }, - "zeek.ssh.host_key_alg": { "type": "keyword" }, - "zeek.ssh.kex_alg": { "type": "keyword" }, - "zeek.ssh.mac_alg": { "type": "keyword" }, - "zeek.ssh.remote_location_city": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.ssh.remote_location_country_code": { "type": "keyword" }, - "zeek.ssh.remote_location_latitude": { "type": "float" }, - "zeek.ssh.remote_location_longitude": { "type": "float" }, - "zeek.ssh.remote_location_region": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text" } } }, - "zeek.ssh.server": { "type": "keyword" }, - "zeek.ssh.sshka": { "type": "keyword" }, - "zeek.ssh.version": { "type": "integer" }, - "zeek.ssl.cert_chain_fps": { "type": "keyword" }, - "zeek.ssl.cert_chain_fuids": { "type": "keyword" }, - "zeek.ssl.cipher": { "type": "keyword" }, - "zeek.ssl.client_cert_chain_fps": { "type": "keyword" }, - "zeek.ssl.client_cert_chain_fuids": { "type": "keyword" }, - "zeek.ssl.client_issuer.C": { "type": "keyword" }, - "zeek.ssl.client_issuer.CN": { "type": "keyword" }, - "zeek.ssl.client_issuer.DC": { "type": "keyword" }, - "zeek.ssl.client_issuer.emailAddress": { "type": "keyword" }, - "zeek.ssl.client_issuer.GN": { "type": "keyword" }, - "zeek.ssl.client_issuer.initials": { "type": "keyword" }, - "zeek.ssl.client_issuer.L": { "type": "keyword" }, - "zeek.ssl.client_issuer.O": { "type": "keyword" }, - "zeek.ssl.client_issuer.OU": { "type": "keyword" }, - "zeek.ssl.client_issuer.pseudonym": { "type": "keyword" }, - "zeek.ssl.client_issuer.serialNumber": { "type": "keyword" }, - "zeek.ssl.client_issuer.SN": { "type": "keyword" }, - "zeek.ssl.client_issuer.ST": { "type": "keyword" }, - "zeek.ssl.client_issuer.title": { "type": "keyword" }, - "zeek.ssl.client_issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ssl.client_subject.C": { "type": "keyword" }, - "zeek.ssl.client_subject.CN": { "type": "keyword" }, - "zeek.ssl.client_subject.emailAddress": { "type": "keyword" }, - "zeek.ssl.client_subject.GN": { "type": "keyword" }, - "zeek.ssl.client_subject.initials": { "type": "keyword" }, - "zeek.ssl.client_subject.L": { "type": "keyword" }, - "zeek.ssl.client_subject.O": { "type": "keyword" }, - "zeek.ssl.client_subject.OU": { "type": "keyword" }, - "zeek.ssl.client_subject.pseudonym": { "type": "keyword" }, - "zeek.ssl.client_subject.serialNumber": { "type": "keyword" }, - "zeek.ssl.client_subject.SN": { "type": "keyword" }, - "zeek.ssl.client_subject.ST": { "type": "keyword" }, - "zeek.ssl.client_subject.title": { "type": "keyword" }, - "zeek.ssl.client_subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ssl.curve": { "type": "keyword" }, - "zeek.ssl.established": { "type": "keyword" }, - "zeek.ssl.issuer.C": { "type": "keyword" }, - "zeek.ssl.issuer.CN": { "type": "keyword" }, - "zeek.ssl.issuer.DC": { "type": "keyword" }, - "zeek.ssl.issuer.emailAddress": { "type": "keyword" }, - "zeek.ssl.issuer.GN": { "type": "keyword" }, - "zeek.ssl.issuer.initials": { "type": "keyword" }, - "zeek.ssl.issuer.L": { "type": "keyword" }, - "zeek.ssl.issuer.O": { "type": "keyword" }, - "zeek.ssl.issuer.OU": { "type": "keyword" }, - "zeek.ssl.issuer.pseudonym": { "type": "keyword" }, - "zeek.ssl.issuer.serialNumber": { "type": "keyword" }, - "zeek.ssl.issuer.SN": { "type": "keyword" }, - "zeek.ssl.issuer.ST": { "type": "keyword" }, - "zeek.ssl.issuer.title": { "type": "keyword" }, - "zeek.ssl.issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ssl.ja3": { "type": "keyword" }, - "zeek.ssl.ja3s": { "type": "keyword" }, - "zeek.ssl.last_alert": { "type": "keyword" }, - "zeek.ssl.next_protocol": { "type": "keyword" }, - "zeek.ssl.resumed": { "type": "keyword" }, - "zeek.ssl.server_name": { "type": "keyword" }, - "zeek.ssl.sni_matches_cert": { "type": "keyword" }, - "zeek.ssl.ssl_history": { "type": "keyword" }, - "zeek.ssl.ssl_version": { "type": "keyword" }, - "zeek.ssl.subject.C": { "type": "keyword" }, - "zeek.ssl.subject.CN": { "type": "keyword" }, - "zeek.ssl.subject.description": { "type": "keyword" }, - "zeek.ssl.subject.emailAddress": { "type": "keyword" }, - "zeek.ssl.subject.GN": { "type": "keyword" }, - "zeek.ssl.subject.initials": { "type": "keyword" }, - "zeek.ssl.subject.L": { "type": "keyword" }, - "zeek.ssl.subject.O": { "type": "keyword" }, - "zeek.ssl.subject.OU": { "type": "keyword" }, - "zeek.ssl.subject.postalCode": { "type": "keyword" }, - "zeek.ssl.subject.pseudonym": { "type": "keyword" }, - "zeek.ssl.subject.serialNumber": { "type": "keyword" }, - "zeek.ssl.subject.SN": { "type": "keyword" }, - "zeek.ssl.subject.ST": { "type": "keyword" }, - "zeek.ssl.subject.street": { "type": "keyword" }, - "zeek.ssl.subject.title": { "type": "keyword" }, - "zeek.ssl.subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.ssl.validation_status": { "type": "keyword" }, - "zeek.stun.attr_type": { "type": "keyword" }, - "zeek.stun.attr_val": { "type": "keyword", "ignore_above": 128, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.stun.class": { "type": "keyword" }, - "zeek.stun.is_orig": { "type": "keyword" }, - "zeek.stun.method": { "type": "keyword" }, - "zeek.stun.trans_id": { "type": "keyword" }, - "zeek.stun_nat.is_orig": { "type": "keyword" }, - "zeek.stun_nat.lan_addr": { "type": "keyword" }, - "zeek.stun_nat.wan_addr": { "type": "ip" }, - "zeek.stun_nat.wan_port": { "type": "integer" }, - "zeek.syslog.facility": { "type": "keyword" }, - "zeek.syslog.message": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.syslog.severity": { "type": "keyword" }, - "zeek.tds.command": { "type": "keyword" }, - "zeek.tds_rpc.parameter": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.tds_rpc.parameters": { "type": "nested" }, - "zeek.tds_rpc.procedure_name": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.tds_sql_batch.header_type": { "type": "keyword" }, - "zeek.tds_sql_batch.query": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } }, - "zeek.tftp.block_acked": { "type": "integer" }, - "zeek.tftp.block_sent": { "type": "integer" }, - "zeek.tftp.error_code": { "type": "integer" }, - "zeek.tftp.error_msg": { "type": "keyword" }, - "zeek.tftp.fname": { "type": "keyword" }, - "zeek.tftp.mode": { "type": "keyword" }, - "zeek.tftp.size": { "type": "integer" }, - "zeek.tftp.uid_data": { "type": "keyword" }, - "zeek.tftp.wrq": { "type": "keyword" }, - "zeek.ts": { "type": "date" }, - "zeek.tunnel.action": { "type": "keyword" }, - "zeek.tunnel.tunnel_type": { "type": "keyword" }, - "zeek.uid": { "type": "keyword" }, - "zeek.weird.addl": { "type": "keyword", "doc_values": false, "ignore_above": 16384, "fields": { "text": { "type": "text", "norms": false } } }, - "zeek.weird.notice": { "type": "keyword" }, - "zeek.wireguard.established": { "type": "keyword" }, - "zeek.wireguard.initiations": { "type": "integer" }, - "zeek.wireguard.receiver_index": { "type": "keyword" }, - "zeek.wireguard.responses": { "type": "integer" }, - "zeek.wireguard.sender_index": { "type": "keyword" }, - "zeek.x509.basic_constraints_ca": { "type": "keyword" }, - "zeek.x509.basic_constraints_path_len": { "type": "integer" }, - "zeek.x509.certificate_curve": { "type": "keyword" }, - "zeek.x509.certificate_exponent": { "type": "keyword" }, - "zeek.x509.certificate_issuer.C": { "type": "keyword" }, - "zeek.x509.certificate_issuer.CN": { "type": "keyword" }, - "zeek.x509.certificate_issuer.DC": { "type": "keyword" }, - "zeek.x509.certificate_issuer.emailAddress": { "type": "keyword" }, - "zeek.x509.certificate_issuer.GN": { "type": "keyword" }, - "zeek.x509.certificate_issuer.initials": { "type": "keyword" }, - "zeek.x509.certificate_issuer.L": { "type": "keyword" }, - "zeek.x509.certificate_issuer.O": { "type": "keyword" }, - "zeek.x509.certificate_issuer.OU": { "type": "keyword" }, - "zeek.x509.certificate_issuer.pseudonym": { "type": "keyword" }, - "zeek.x509.certificate_issuer.serialNumber": { "type": "keyword" }, - "zeek.x509.certificate_issuer.SN": { "type": "keyword" }, - "zeek.x509.certificate_issuer.ST": { "type": "keyword" }, - "zeek.x509.certificate_issuer.title": { "type": "keyword" }, - "zeek.x509.certificate_issuer_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.x509.certificate_key_alg": { "type": "keyword" }, - "zeek.x509.certificate_key_length": { "type": "integer" }, - "zeek.x509.certificate_key_type": { "type": "keyword" }, - "zeek.x509.certificate_not_valid_after": { "type": "date" }, - "zeek.x509.certificate_not_valid_before": { "type": "date" }, - "zeek.x509.certificate_serial": { "type": "keyword" }, - "zeek.x509.certificate_sig_alg": { "type": "keyword" }, - "zeek.x509.certificate_subject.C": { "type": "keyword" }, - "zeek.x509.certificate_subject.CN": { "type": "keyword" }, - "zeek.x509.certificate_subject.DC": { "type": "keyword" }, - "zeek.x509.certificate_subject.description": { "type": "keyword" }, - "zeek.x509.certificate_subject.emailAddress": { "type": "keyword" }, - "zeek.x509.certificate_subject.GN": { "type": "keyword" }, - "zeek.x509.certificate_subject.initials": { "type": "keyword" }, - "zeek.x509.certificate_subject.L": { "type": "keyword" }, - "zeek.x509.certificate_subject.O": { "type": "keyword" }, - "zeek.x509.certificate_subject.OU": { "type": "keyword" }, - "zeek.x509.certificate_subject.postalCode": { "type": "keyword" }, - "zeek.x509.certificate_subject.pseudonym": { "type": "keyword" }, - "zeek.x509.certificate_subject.serialNumber": { "type": "keyword" }, - "zeek.x509.certificate_subject.SN": { "type": "keyword" }, - "zeek.x509.certificate_subject.ST": { "type": "keyword" }, - "zeek.x509.certificate_subject.street": { "type": "keyword" }, - "zeek.x509.certificate_subject.title": { "type": "keyword" }, - "zeek.x509.certificate_subject_full": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.x509.certificate_version": { "type": "integer" }, - "zeek.x509.client_cert": { "type": "keyword" }, - "zeek.x509.fingerprint": { "type": "keyword" }, - "zeek.x509.host_cert": { "type": "keyword" }, - "zeek.x509.san_dns": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } }, - "zeek.x509.san_email": { "type": "keyword" }, - "zeek.x509.san_ip": { "type": "ip" }, - "zeek.x509.san_uri": { "type": "keyword", "ignore_above": 16384, "fields": { "text": { "type": "text" } } } + "tls.server.ja3s_description": { "type": "keyword", "ignore_above": 1024, "fields": { "text": { "type": "text" } } } } } } diff --git a/docs/contributing/README.md b/docs/contributing/README.md index 7b6693b95..8dc8907ab 100644 --- a/docs/contributing/README.md +++ b/docs/contributing/README.md @@ -142,7 +142,7 @@ Although OpenSearch is a NoSQL database and as-such is "unstructured" and "schem * [`arkime/etc/config.ini`](../../arkime/etc/config.ini) - follow existing examples in the `[custom-fields]` and `[custom-views]` sections in order for [Arkime](https://arkime.com) to be aware of your new fields * [`arkime/wise/source.zeeklogs.js`](../../arkime/wise/source.zeeklogs.js) - add new fields to the `allFields` array for Malcolm to create Arkime [value actions](https://arkime.com/settings#right-click) for your fields -* [`dashboards/templates/malcolm_template.json`](../../arkime/wise/source.zeeklogs.js) - add new fields to the giant list of fields in this document in order for them to be defined as part of the `arkime_sessions3-*` [index template](https://opensearch.org/docs/latest/opensearch/index-templates/) used by Arkime and OpenSearch Dashboards in Malcolm +* [`dashboards/templates/composable/component/__(name)__.json`](../../dashboards/templates/composable/component/) - add new fields to a new [composable index template](https://opensearch.org/docs/latest/opensearch/index-templates/#composable-index-templates) file in this directory and add its name (prefixed with `custom_`) to the `composed_of` section of [`dashboards/templates/malcolm_template.json`](../../dashboards/templates/malcolm_template.json) in order for it to be included as part of the `arkime_sessions3-*` [index template](https://opensearch.org/docs/latest/opensearch/index-templates/) used by Arkime and OpenSearch Dashboards in Malcolm When possible, I recommend you to use (or at least take inspiration from) the [Elastic Common Schema (ECS) Reference](https://www.elastic.co/guide/en/ecs/current/index.html) when deciding how to define new field names. From 3ec50ea15ba222b31b4f346a6d72d23896be3d62 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 08:21:51 -0600 Subject: [PATCH 041/122] update readme --- scripts/beats/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/beats/README.md b/scripts/beats/README.md index 95f4d7235..296029a66 100644 --- a/scripts/beats/README.md +++ b/scripts/beats/README.md @@ -1,3 +1,5 @@ +NOTE: Now that Malcolm uses OpenSearch instead of ElasticSearch, the information in this document is out-of-date. A similar outcome can be achieved by forwarding to Logstash (which Malcolm still uses, for now). + # Using Beats to forward host logs to Malcolm Because Malcolm uses components of the open source data analysis platform [Elastic Stack](https://www.elastic.co/elastic-stack), it can accept various host logs sent from [Beats](https://www.elastic.co/beats/#the-beats-family), Elastic Stack's lightweight data shippers. These Beats generally include prebuilt Kibana dashboards for each of their respective data sets. From b2583197461ff059fcfe15c3c20aeb107b62c3fd Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 08:28:31 -0600 Subject: [PATCH 042/122] update protologbeat tag --- sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 9a29ea8c8..26a3dc2c2 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -12,7 +12,7 @@ fields_under_root: true processors: - add_tags: - tags: [_malcolm_beats, _malcolm_protologbeat] + tags: [_malcolm_beats, _malcolm_heatbeat] #================================ Outputs ====================================== From 416ab8915f029f5dea1eaa68f903eedfc4ad04b6 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 13:12:46 -0600 Subject: [PATCH 043/122] work on stuff for opensearch v2.0.0 and other misc --- ...alcolm-iso-build-docker-wrap-push-ghcr.yml | 2 + ...sensor-iso-build-docker-wrap-push-ghcr.yml | 1 + api/requirements.txt | 4 +- malcolm-iso/.gitignore | 6 + malcolm-iso/build.sh | 4 + malcolm-iso/build_via_vagrant.sh | 10 ++ .../hooks/normal/0910-agg-build.hook.chroot | 35 +++++- sensor-iso/build.sh | 4 + sensor-iso/build_via_vagrant.sh | 1 + .../config/archives/fluentbit.key.binary | 52 ++++++++ .../config/archives/fluentbit.key.chroot | 52 ++++++++ .../config/archives/fluentbit.list.binary | 1 + .../config/archives/fluentbit.list.chroot | 1 + .../normal/0910-sensor-build.hook.chroot | 116 ++++++++++-------- .../0991-security-performance.hook.chroot | 3 + .../config/includes.chroot/etc/skel/.bashrc | 2 +- .../config/package-lists/sensor.list.chroot | 1 + 17 files changed, 237 insertions(+), 58 deletions(-) create mode 100644 malcolm-iso/.gitignore create mode 100644 sensor-iso/config/archives/fluentbit.key.binary create mode 100644 sensor-iso/config/archives/fluentbit.key.chroot create mode 100644 sensor-iso/config/archives/fluentbit.list.binary create mode 100644 sensor-iso/config/archives/fluentbit.list.chroot create mode 100644 sensor-iso/config/package-lists/sensor.list.chroot diff --git a/.github/workflows/malcolm-iso-build-docker-wrap-push-ghcr.yml b/.github/workflows/malcolm-iso-build-docker-wrap-push-ghcr.yml index c44d20f38..74cd11e11 100644 --- a/.github/workflows/malcolm-iso-build-docker-wrap-push-ghcr.yml +++ b/.github/workflows/malcolm-iso-build-docker-wrap-push-ghcr.yml @@ -106,6 +106,8 @@ jobs: docker rmi "$IMAGE" done pushd ./malcolm-iso + mkdir -p ./shared + echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" > ./shared/environment.chroot sudo /usr/bin/env bash ./build.sh -d "$DEST_IMAGES_TGZ" rm -rf ./shared/ sudo chmod 644 ./malcolm-*.* diff --git a/.github/workflows/sensor-iso-build-docker-wrap-push-ghcr.yml b/.github/workflows/sensor-iso-build-docker-wrap-push-ghcr.yml index 8d1dc56c4..93117d742 100644 --- a/.github/workflows/sensor-iso-build-docker-wrap-push-ghcr.yml +++ b/.github/workflows/sensor-iso-build-docker-wrap-push-ghcr.yml @@ -91,6 +91,7 @@ jobs: pushd ./sensor-iso echo "${{ steps.extract_malcolm_version.outputs.mversion }}" > ./shared/version.txt echo "${{ secrets.MAXMIND_GEOIP_DB_LICENSE_KEY }}" > ./shared/maxmind_license.txt + echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" > ./shared/environment.chroot sudo /usr/bin/env bash ./build.sh rm -rf ./shared/ sudo chmod 644 ./hedgehog-*.* diff --git a/api/requirements.txt b/api/requirements.txt index 55d5c84fb..0653fab98 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,8 +1,8 @@ pytz==2021.3 Flask==2.0.2 gunicorn==20.1.0 -opensearch-py==1.1.0 -opensearch-dsl==1.0.0 +opensearch-py==2.0.0 +opensearch-dsl==2.0.1 requests==2.26.0 regex==2022.3.2 dateparser==1.1.1 \ No newline at end of file diff --git a/malcolm-iso/.gitignore b/malcolm-iso/.gitignore new file mode 100644 index 000000000..618989ccb --- /dev/null +++ b/malcolm-iso/.gitignore @@ -0,0 +1,6 @@ +# build artifacts +*.iso +*-build.log +.vagrant +/config/packages.chroot/*.deb +/shared diff --git a/malcolm-iso/build.sh b/malcolm-iso/build.sh index af8ba0c3f..228cb4c6a 100755 --- a/malcolm-iso/build.sh +++ b/malcolm-iso/build.sh @@ -137,6 +137,10 @@ if [ -d "$WORKDIR" ]; then echo "SUPPORT_URL=\"https://github.com/${IMAGE_PUBLISHER}\"" >> "$MALCOLM_DEST_DIR"/.os-info echo "BUG_REPORT_URL=\"https://github.com/${IMAGE_PUBLISHER}/malcolm/issues\"" >> "$MALCOLM_DEST_DIR"/.os-info + # environment variables to pass into chroot + [[ -f "$SCRIPT_PATH/shared/environment.chroot" ]] && \ + cat "$SCRIPT_PATH/shared/environment.chroot" >> ./config/environment.chroot + # copy shared scripts and some branding stuff mkdir -p ./config/includes.chroot/usr/local/bin/ rsync -a "$SCRIPT_PATH/../shared/bin/" ./config/includes.chroot/usr/local/bin/ diff --git a/malcolm-iso/build_via_vagrant.sh b/malcolm-iso/build_via_vagrant.sh index 1bd002b56..4d684b599 100755 --- a/malcolm-iso/build_via_vagrant.sh +++ b/malcolm-iso/build_via_vagrant.sh @@ -29,6 +29,10 @@ function vm_execute() { vagrant ssh --no-tty --command "$1" } +function cleanup_shared { + rm -rf "$SCRIPT_PATH"/shared +} + pushd "$SCRIPT_PATH"/vagrant VM_NAME="$(grep "config.vm.box" Vagrantfile | tr -d "[:space:]" | sed "s/.*=//")" @@ -60,6 +64,12 @@ until vm_execute 'sudo whoami' | grep -q "root" ; do done echo "SSH available." >&2 +# pass a few things across to the vagrant environment in a "shared" directory (and clean it up when done) +cleanup_shared +mkdir -p "$SCRIPT_PATH"/shared +[[ ${#GITHUB_TOKEN} -gt 1 ]] && echo "GITHUB_TOKEN=$GITHUB_TOKEN" >> "$SCRIPT_PATH"/shared/environment.chroot +trap cleanup_shared EXIT + if [[ -r "$DOCKER_IMAGES_TGZ" ]]; then DOCKER_IMAGES_LOCAL="$SCRIPT_PATH/../$(basename "$DOCKER_IMAGES_TGZ")" DOCKER_IMAGES_TGZ_REMOTE="/malcolm-build/$(basename "$DOCKER_IMAGES_TGZ")" diff --git a/malcolm-iso/config/hooks/normal/0910-agg-build.hook.chroot b/malcolm-iso/config/hooks/normal/0910-agg-build.hook.chroot index 6d7f7c7f4..db746640d 100755 --- a/malcolm-iso/config/hooks/normal/0910-agg-build.hook.chroot +++ b/malcolm-iso/config/hooks/normal/0910-agg-build.hook.chroot @@ -1,7 +1,34 @@ #!/bin/bash -DOCKER_COMPOSE_VER="2.5.0" -DOCKER_COMPOSE_URL="https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VER/docker-compose-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" +# we'll use cURL to get release information and assets from GitHub using the GitHub API +GITHUB_API_CURL_ARGS=() +GITHUB_API_CURL_ARGS+=( -fsSL ) +GITHUB_API_CURL_ARGS+=( -H ) +GITHUB_API_CURL_ARGS+=( "Accept: application/vnd.github.v3+json" ) +[[ -n "$GITHUB_TOKEN" ]] && GITHUB_API_CURL_ARGS+=( -H ) && GITHUB_API_CURL_ARGS+=( "Authorization: token $GITHUB_TOKEN" ) -# install docker-compose -curl -o /usr/local/bin/docker-compose -sSL "$DOCKER_COMPOSE_URL" && chmod 755 /usr/local/bin/docker-compose +# docker-compose +RELEASE_URL="https://api.github.com/repos/docker/compose/releases/latest" +OUTPUT_FILENAME="/usr/local/bin/docker-compose" +RELEASE_FILE_REGEX="docker-compose-linux-x86_64$" +curl -o "$OUTPUT_FILENAME" "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq ".[] | select(.browser_download_url|test(\"$RELEASE_FILE_REGEX\")) | .browser_download_url" | tr -d '"')" +chmod 755 "$OUTPUT_FILENAME" + +# croc +RELEASE_URL="https://api.github.com/repos/schollz/croc/releases/latest" +RELEASE_FILE_REGEX="Linux-64bit\\\.tar\\\.gz$" +cd /usr/local/bin +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq ".[] | select(.browser_download_url|test(\"$RELEASE_FILE_REGEX\")) | .browser_download_url" | tr -d '"')" | tar zxvf - croc +chmod 755 ./croc +### + +# step +RELEASE_URL="https://api.github.com/repos/smallstep/cli/releases/latest" +RELEASE_FILE_REGEX="_linux_.+amd64\\\.tar\\\.gz$" +cd /tmp +mkdir -p ./step +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq ".[] | select(.browser_download_url|test(\"$RELEASE_FILE_REGEX\")) | .browser_download_url" | tr -d '"')" | tar xzf - -C ./step --strip-components 1 +mv ./step/bin/step /usr/local/bin/step +chmod 755 /usr/local/bin/step +rm -rf /tmp/step* +### diff --git a/sensor-iso/build.sh b/sensor-iso/build.sh index 46319338d..220ff9851 100755 --- a/sensor-iso/build.sh +++ b/sensor-iso/build.sh @@ -107,6 +107,10 @@ if [ -d "$WORKDIR" ]; then echo "SUPPORT_URL=\"https://github.com/${IMAGE_PUBLISHER}\"" >> ./config/includes.chroot/opt/sensor/.os-info echo "BUG_REPORT_URL=\"https://github.com/${IMAGE_PUBLISHER}/malcolm/issues\"" >> ./config/includes.chroot/opt/sensor/.os-info + # environment variables to pass into chroot + [[ -f "$SCRIPT_PATH/shared/environment.chroot" ]] && \ + cat "$SCRIPT_PATH/shared/environment.chroot" >> ./config/environment.chroot + # grab maxmind geoip database files, iana ipv4 address ranges, wireshark oui lists, etc. mkdir -p "$SCRIPT_PATH/arkime/etc" pushd "$SCRIPT_PATH/arkime/etc" diff --git a/sensor-iso/build_via_vagrant.sh b/sensor-iso/build_via_vagrant.sh index 222a5d91f..7b56ce5d6 100755 --- a/sensor-iso/build_via_vagrant.sh +++ b/sensor-iso/build_via_vagrant.sh @@ -75,6 +75,7 @@ cp -r "$SCRIPT_PATH"/../shared "$SCRIPT_PATH"/ YML_IMAGE_VERSION="$(grep -P "^\s+image:\s*malcolm" "$SCRIPT_PATH"/../docker-compose-standalone.yml | awk '{print $2}' | cut -d':' -f2 | uniq -c | sort -nr | awk '{print $2}' | head -n 1)" [[ -n $YML_IMAGE_VERSION ]] && echo "$YML_IMAGE_VERSION" > "$SCRIPT_PATH"/shared/version.txt [[ ${#MAXMIND_GEOIP_DB_LICENSE_KEY} -gt 1 ]] && echo "$MAXMIND_GEOIP_DB_LICENSE_KEY" > "$SCRIPT_PATH"/shared/maxmind_license.txt +[[ ${#GITHUB_TOKEN} -gt 1 ]] && echo "GITHUB_TOKEN=$GITHUB_TOKEN" >> "$SCRIPT_PATH"/shared/environment.chroot [[ -d "$SCRIPT_PATH"/../arkime/patch ]] && cp -r "$SCRIPT_PATH"/../arkime/patch "$SCRIPT_PATH"/shared/arkime_patch trap cleanup_shared EXIT diff --git a/sensor-iso/config/archives/fluentbit.key.binary b/sensor-iso/config/archives/fluentbit.key.binary new file mode 100644 index 000000000..8b054ea1e --- /dev/null +++ b/sensor-iso/config/archives/fluentbit.key.binary @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=LXe5 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/sensor-iso/config/archives/fluentbit.key.chroot b/sensor-iso/config/archives/fluentbit.key.chroot new file mode 100644 index 000000000..8b054ea1e --- /dev/null +++ b/sensor-iso/config/archives/fluentbit.key.chroot @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGIA8yUBEADMnv3Jd248fIxt8lI4l9zFrkrYM2X1o3Nd003qTIXT3ScXNQVj +0O40RDRnw61ngQ6iZ64O6sSdZlB39WGC/+KNmm8vrUP5IedtHZ8FVVZe7aJy38HV +2CZM15eFiFqE6YBqdu51rPvG2eW27MWwIcV+rr0S+TVq/cQlye6LrFJQd+4D7tZA +i4nbLJk8btV+9lPYpb+4/387Twk5ZFem+a1nTHjIB9Hp13pqZc4orz8omwhMmAte +v/FekRyfBFJ0hIW7QnFvaqR6/t+Ic1FB/8yu2uW74ADYrSoR7F1SxO3k4sbKdcgU +yD3rsOhLlzj6nJThTHDudHvE9h/F+nI9+UK/U16tNrLIDYPvyzZZd9CAWe28AupN +a97M/Jw2q6+RnpHnxUBu5SnDLTOTCVSUfqGcTIHnN+IAIDhpycb1BHZhShS5hGzV +zfhGYsPjwU/GHKAyYURff9kxY0qpJKTJNfiSMubGPVB5PaVNS2U3AY5tkzV8ESlc +igs3dtmY9qMUTq1Zp0toXLFdmpihuHxyIDLKoJ23b/JFwGq2zZYarLIGXn4DbGF7 +yCnT4ZFtDzTL1mv6NEBXHaXkIyqCSyllAdtySIYoARU9HXjjpJ+pFOrsW+ES0tmu +6m58BObWaRF/UIx6MnFDhR1HzS6ri+gFrLCbW8Ti0ulsCSBMlNnfj6b+DwARAQAB +tEFGbHVlbnRiaXQgcmVsZWFzZXMgKFJlbGVhc2VzIHNpZ25pbmcga2V5KSA8cmVs +ZWFzZXNAZmx1ZW50Yml0LmlvPokCTgQTAQgAOBYhBMPAooU0uSk+r1H6vZ+d3Ag4 +iMHNBQJiAPMlAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJ+d3Ag4iMHN +oEIP/0Tm+hMDZpMzxl3SZAyR10Zo0Dd0LNrKQ4+cCV/AQZPAp3qxaVqtslXu40d+ +3l4kVlITmoauNWR5adCAPZ/dOrx9uTz2bLJJI41hfaJQ0StUyQoRF601LG7SJW+u +Fh698TVqxEOsC1V9DoL+Dy1Pv4QN/S3Ro18mCttPz2G+RnMv3lrzzF1aHo29w25S +BiTjSK4LiPIUxhoXYD19iPib+EPuprh1aOcR/VhAZl0OzZFvfiICsRd1149DiizL +XnKxwjDCPmEtmZZJ4VWqv/d1SoTR/9yiSiAM1CD3SlwgIRDbQuxLK4zYggOlempp +7b2akDaT0BqILMgGcC9M56UTGfZw+V+2cJ4DeP/6OEKN/bHUu4cHJM9YYbNIDbzX +QLarxYlr8rtxf3l8FNtH9f7EcpKSB5j3jMSEPPA4S74HVqbrHWNJphsNbp53jXpp +n+OsYKIKuCvWvnXb+mu0QCNNvVlcI/HCPFmdt0ob80h/9ZoNbzWk5IxPJSKkNvNA +COkBcLIP9sm/kRVdvnWjAc2fc2A0VH7F8/vEHWvUpAwf1Q//03Girgj9meNss0C3 +S9yLKfVIiAhIhMQG+l1njgeHl/6FcfTHcBl0BtsbSZ818ZU6chwKG7oIS5tjY37m +AoVG8HtuXkJvwmogqZri8z8c6SZCYUDiVWhlh8LADfsD6nmxuQINBGIA8yUBEADu +cjwm5w5fcH07YgU0ZewG9oKunR9k3l56JkG1Fzxcq4wqMSJI6XLoEdIh8C1F0raO +JFTB9+SDRwrNwuw9hqCjwMcOeGsSKNt/ZKnD49sDEs/GGf6TgXGCKbIP3w5dk8ra +haU+A1V+dOswjzuouWEAxbCqej1E4NxHUi8pfh9/h00hRs8s3oPS4QrsAEcmsRkS +XqTJrMGoUlvW9PsGjRKj+oTHrJkP7aswXaBj5j4vsjZeR0MK26D6AwwHHkJvEaGd +94zL7kovY7v+JcZaiivQmlgC5eR9fxjFKD1SP660uIgTGrAU4SiBA/mJSmAk9g96 +2drdrOgLmLS3tf3cgNGeKvqhTMEyxuTx5yUWEM6kCD60B/Ut1x+YEqm+bw3QBLFV +Cd6uAdoLn8A3ETCfI1yIQhE3tPiaoLAtYYKWlbrPAfk337gNBbmE8liVnDsvMnhx +UF54dFwUyr4fRNgM26BCFYFCzbj3G9NESvcBTwY9Y5TILwqIut012E5OBq7stqQv +RfxUEjmz7LRixxAr53k+KW9Y1/5lWtqjD8ydwiA32vA/fbI0+qO87mQuPZkC3l5H +AO/Z5WV6tXgnpUfn5ZUTm+lQ6dHNj4LjlmQCppmAFYSNoI4QKpG9uZOVDKTj1FsY +nBGeLV4BXtLlBQ+8nkgom41e1VUinsVMWVOlvZBlawARAQABiQI2BBgBCAAgFiEE +w8CihTS5KT6vUfq9n53cCDiIwc0FAmIA8yUCGwwACgkQn53cCDiIwc2KNg/9E/c5 +UzJI8tvEaCYJBARHWvHy4a2sj8UHikjpTYvjU524VF0xVYoTI0i/gm40orvsV9k8 +0n7NIb4uinjZWsAuAY85S5jXCqCUopEpcyNN9/Ko/+U7Kg0vBds/rUOngP7dCw52 +CYaI4/Rzzh2Ndh1aV/Rl8dNFSuu1Cg6r7pA0msNMXEBHoSUZIr141V7/svIxkfl9 +l1nX804AbF9vS6OcRqlbFrD+SLSIfJ1N595+ws1xe04x4vCcQqKUJZ5d5iDuS55E +w8FTsFgPsdeTo2oXodff8I6Krzlu8Ub4crySFXiGXiBr7lUdOp5wFzv0zseQO5OW +BPjmkgqM1P0pkPVI5xQ9kVHMxweyOPDqicaY4KygOPPd8hdKnSdvgNVhOnpyjl+R +oduBr/gsop8hRzqsl2A0qWXBjC+mpNG8uBhBLMh+6CGDSDhGsuQQFhQybmuxSzRy +A09hHaEGiay749rYzdla9IsTIh57Edt3occEHCm14Ay4v2u+VScz0DAsMrDQnBJw +iPYA5WUhDXwbiqooDELTeWF8ylWhxsZq/LX0nTa1W6x2D1o6b9JlbaUuI/xlNjRE +YhUj2cy5195AvazZqBRp4ofLF0spPGkxU1UZ47929qImxcrI0bX4PaJSxxV+0XyR +rLDtY1tzWLCr3tkD306RQnRho29+PH5w+5qRNPA= +=LXe5 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/sensor-iso/config/archives/fluentbit.list.binary b/sensor-iso/config/archives/fluentbit.list.binary new file mode 100644 index 000000000..2eeb67a7c --- /dev/null +++ b/sensor-iso/config/archives/fluentbit.list.binary @@ -0,0 +1 @@ +deb https://packages.fluentbit.io/debian/bullseye bullseye main \ No newline at end of file diff --git a/sensor-iso/config/archives/fluentbit.list.chroot b/sensor-iso/config/archives/fluentbit.list.chroot new file mode 100644 index 000000000..2eeb67a7c --- /dev/null +++ b/sensor-iso/config/archives/fluentbit.list.chroot @@ -0,0 +1 @@ +deb https://packages.fluentbit.io/debian/bullseye bullseye main \ No newline at end of file diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index d147ac2d8..f2b57d3a3 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -6,57 +6,55 @@ export CCACHE_DIR="/var/spool/ccache" export CCACHE_COMPRESS=1 -NETSNIFF_VER="0.6.8" -NETSNIFF_URL="https://github.com/netsniff-ng/netsniff-ng/archive/v$NETSNIFF_VER.tar.gz" - -ZEEK_VERSION=4.2.2-0 +# we'll use cURL to get release information and assets from GitHub using the GitHub API +GITHUB_API_CURL_ARGS=() +GITHUB_API_CURL_ARGS+=( -fsSL ) +GITHUB_API_CURL_ARGS+=( -H ) +GITHUB_API_CURL_ARGS+=( "Accept: application/vnd.github.v3+json" ) +[[ -n "$GITHUB_TOKEN" ]] && GITHUB_API_CURL_ARGS+=( -H ) && GITHUB_API_CURL_ARGS+=( "Authorization: token $GITHUB_TOKEN" ) + +ZEEK_VER=4.2.2-0 ZEEK_LTS= -SPICY_VERSION=1.4.1 +SPICY_VER=1.4.1 ZEEK_DIR="/opt/zeek" SPICY_DIR="/opt/spicy" export PATH="${ZEEK_DIR}"/bin:"${SPICY_DIR}"/bin:$PATH +SURICATA_RULES_DIR="/etc/suricata/rules" + BEATS_VER="7.10.2" BEATS_OSS="-oss" BEATS_DEB_URL_TEMPLATE_REPLACER="XXXXX" BEATS_DEB_URL_TEMPLATE="https://artifacts.elastic.co/downloads/beats/$BEATS_DEB_URL_TEMPLATE_REPLACER/$BEATS_DEB_URL_TEMPLATE_REPLACER$BEATS_OSS-$BEATS_VER-amd64.deb" -YARA_VERSION="4.2.1" -YARA_URL="https://github.com/VirusTotal/yara/archive/v${YARA_VERSION}.tar.gz" +NETSNIFF_RELEASE_URL="https://api.github.com/repos/netsniff-ng/netsniff-ng/releases/latest" +CAPA_RELEASE_URL="https://api.github.com/repos/fireeye/capa/releases/latest" +YQ_RELEASE_URL="https://api.github.com/repos/mikefarah/yq/releases/latest" +SUPERCRONIC_RELEASE_URL="https://api.github.com/repos/aptible/supercronic/releases/latest" +CROC_RELEASE_URL="https://api.github.com/repos/schollz/croc/releases/latest" +STEP_RELEASE_URL="https://api.github.com/repos/smallstep/cli/releases/latest" +YARA_RELEASE_URL="https://api.github.com/repos/VirusTotal/yara/releases/latest" YARA_RULES_URL="https://codeload.github.com/Neo23x0/signature-base/tar.gz/master" YARA_RULES_DIR="/opt/yara-rules" -SURICATA_RULES_DIR="/etc/suricata/rules" - -CAPA_VERSION="3.2.0" -CAPA_URL="https://github.com/fireeye/capa/releases/download/v${CAPA_VERSION}/capa-v${CAPA_VERSION}-linux.zip" -CAPA_DIR="/usr/local/bin" -CAPA_BIN="${CAPA_DIR}/capa" - -YQ_VERSION="4.24.2" -YQ_URL="https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64" - -SUPERCRONIC_VERSION="0.1.12" -SUPERCRONIC_URL="https://github.com/aptible/supercronic/releases/download/v$SUPERCRONIC_VERSION/supercronic-linux-amd64" -SUPERCRONIC="supercronic-linux-amd64" - mkdir -p /opt/hedgehog_install_artifacts/ # an arkime .deb is built and installed in a different context # Install netsniff-ng cd /tmp -curl -L -o netsniff-$NETSNIFF_VER.tar.gz "$NETSNIFF_URL" -tar -xzvf netsniff-$NETSNIFF_VER.tar.gz -cd netsniff-ng-$NETSNIFF_VER +mkdir ./netsniff-ng +NETSNIFF_VER="$(curl "${GITHUB_API_CURL_ARGS[@]}" "$NETSNIFF_RELEASE_URL" | jq '.tag_name' | tr -d '"' | sed 's/^v//')" +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$NETSNIFF_RELEASE_URL" | jq '.tarball_url' | tr -d '"')" | tar xzf - -C ./netsniff-ng --strip-components 1 +cd ./netsniff-ng ./configure --prefix=/usr --disable-geoip make netsniff-ng # make netsniff-ng_install checkinstall -y -D --strip=yes --stripso=yes --install=yes --fstrans=no --pkgname="netsniff-ng" --pkgversion="$NETSNIFF_VER" --pkgarch="amd64" --pkgsource="$NETSNIFF_URL" make netsniff-ng_install cp *.deb /opt/hedgehog_install_artifacts/ -cd .. -rm -Rf netsniff-$NETSNIFF_VER.tar.gz netsniff-ng-$NETSNIFF_VER +cd /tmp +rm -Rf ./netsniff-ng ## # Download and install zeek, spicy and 3rd-party zeek plugins @@ -66,21 +64,21 @@ mkdir -p /tmp/zeek-packages /tmp/spicy-packages "${CCACHE_DIR}" cd /tmp/zeek-packages if [ -n "${ZEEK_LTS}" ]; then ZEEK_LTS="-lts"; fi && export ZEEK_LTS curl -sSL --remote-name-all \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/libbroker${ZEEK_LTS}-dev_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-core-dev_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-core_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-libcaf-dev_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-btest_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-btest-data_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-zkg_${ZEEK_VERSION}_amd64.deb" \ - "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeekctl${ZEEK_LTS}_${ZEEK_VERSION}_amd64.deb" + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/libbroker${ZEEK_LTS}-dev_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-core-dev_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-core_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-libcaf-dev_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-btest_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-btest-data_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeek${ZEEK_LTS}-zkg_${ZEEK_VER}_amd64.deb" \ + "https://download.opensuse.org/repositories/security:/zeek/Debian_11/amd64/zeekctl${ZEEK_LTS}_${ZEEK_VER}_amd64.deb" dpkg -i ./*.deb # spicy cd /tmp/spicy-packages curl -sSL --remote-name-all \ - "https://github.com/zeek/spicy/releases/download/v${SPICY_VERSION}/spicy_linux_debian11.deb" + "https://github.com/zeek/spicy/releases/download/v${SPICY_VER}/spicy_linux_debian11.deb" dpkg -i ./*.deb # plugins @@ -137,19 +135,19 @@ mv ./suricata-rules-hedgehog.tar.gz /opt/hedgehog_install_artifacts/ ### # yara -mkdir -p usr/local/src -cd /usr/local/src - -curl -sSL "${YARA_URL}" | tar xzf - -C /usr/local/src/ -cd "./yara-${YARA_VERSION}" +cd /tmp +mkdir ./yara +YARA_VER="$(curl "${GITHUB_API_CURL_ARGS[@]}" "$YARA_RELEASE_URL" | jq '.tag_name' | tr -d '"' | sed 's/^v//')" +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$YARA_RELEASE_URL" | jq '.tarball_url' | tr -d '"')" | tar xzf - -C ./yara --strip-components 1 +cd ./yara ./bootstrap.sh ./configure --prefix=/usr --with-crypto --enable-magic --enable-cuckoo --enable-dotnet make #make install -checkinstall -y -D --strip=yes --stripso=yes --install=yes --fstrans=no --pkgname="yara" --pkgversion="$YARA_VERSION" --pkgarch="amd64" --pkgsource="$YARA_URL" +checkinstall -y -D --strip=yes --stripso=yes --install=yes --fstrans=no --pkgname="yara" --pkgversion="$YARA_VER" --pkgarch="amd64" --pkgsource="$YARA_URL" cp *.deb /opt/hedgehog_install_artifacts/ cd /tmp -rm -rf /usr/local/src/yara* +rm -rf /yara mkdir -p ./Neo23x0 curl -sSL "$YARA_RULES_URL" | tar xzvf - -C ./Neo23x0 --strip-components 1 @@ -165,27 +163,43 @@ mv ./yara-rules-hedgehog.tar.gz /opt/hedgehog_install_artifacts/ # capa cd /tmp -rm -rf /tmp/capa* -curl -fsSL -o ./capa.zip "${CAPA_URL}" +curl -o ./capa.zip "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$CAPA_RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq '.[] | select(.browser_download_url|test("-linux\\.zip$")) | .browser_download_url' | tr -d '"')" unzip ./capa.zip -chmod 755 ./capa -mkdir -p "${CAPA_DIR}" -mv ./capa "${CAPA_BIN}" +mv ./capa /usr/local/bin/capa +chmod 755 /usr/local/bin/capa rm -rf /tmp/capa* -cp "${CAPA_BIN}" /opt/hedgehog_install_artifacts/ +cp /usr/local/bin/capa /opt/hedgehog_install_artifacts/ ### # yq -curl -fsSL -o /usr/bin/yq "${YQ_URL}" +cd /tmp +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$YQ_RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq '.[] | select(.browser_download_url|test("linux_amd64\\.tar\\.gz$")) | .browser_download_url' | tr -d '"')" | tar zxvf - ./yq_linux_amd64 +mv ./yq_linux_amd64 /usr/bin/yq chmod 755 /usr/bin/yq ### # supercronic -curl -fsSL -o /usr/local/bin/supercronic "$SUPERCRONIC_URL" +curl -o /usr/local/bin/supercronic "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$SUPERCRONIC_RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq '.[] | select(.browser_download_url|test("-linux-amd64$")) | .browser_download_url' | tr -d '"')" chmod 755 /usr/local/bin/supercronic ### +# croc +cd /tmp +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$CROC_RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq '.[] | select(.browser_download_url|test("Linux-64bit\\.tar\\.gz$")) | .browser_download_url' | tr -d '"')" | tar zxvf - croc +mv ./croc /usr/local/bin/croc +chmod 755 /usr/local/bin/croc +### + +# step +cd /tmp +mkdir -p ./step +curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$(curl "${GITHUB_API_CURL_ARGS[@]}" "$STEP_RELEASE_URL" | jq '.assets_url' | tr -d '"')" | jq '.[] | select(.browser_download_url|test("_linux_.+amd64\\.tar\\.gz$")) | .browser_download_url' | tr -d '"')" | tar xzf - -C ./step --strip-components 1 +mv ./step/bin/step /usr/local/bin/step +chmod 755 /usr/local/bin/step +rm -rf /tmp/step* +### + # update clamav signatures freshclam --stdout --quiet --no-warnings diff --git a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot index 7e6e168d9..d3977cc27 100755 --- a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot +++ b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot @@ -138,6 +138,9 @@ systemctl disable htpdate || true sed -i "s/#[[:space:]]*HTP_IFUP=.*/HTP_IFUP=no/" /etc/default/htpdate sed -i "s/#[[:space:]]*HTP_DAEMON=.*/HTP_DAEMON=no/" /etc/default/htpdate +# disable default fluentbit configuration +systemctl disable fluent-bit || true + # remove identifying operating system information truncate -s 0 /etc/motd sed -i "s/Debian/Hedgehog/g" /etc/issue diff --git a/sensor-iso/config/includes.chroot/etc/skel/.bashrc b/sensor-iso/config/includes.chroot/etc/skel/.bashrc index 138783751..ff29f7a5b 100644 --- a/sensor-iso/config/includes.chroot/etc/skel/.bashrc +++ b/sensor-iso/config/includes.chroot/etc/skel/.bashrc @@ -40,7 +40,7 @@ fi ############################################################################### # PATH ############################################################################### -PATH=/opt/zeek/bin:/opt/spicy/bin:/opt/arkime/bin:/usr/sbin:$PATH +PATH=/opt/zeek/bin:/opt/spicy/bin:/opt/arkime/bin:/opt/fluent-bit/bin:/usr/sbin:$PATH if [ -d ~/bin ]; then PATH=~/bin:$PATH diff --git a/sensor-iso/config/package-lists/sensor.list.chroot b/sensor-iso/config/package-lists/sensor.list.chroot new file mode 100644 index 000000000..02e62b868 --- /dev/null +++ b/sensor-iso/config/package-lists/sensor.list.chroot @@ -0,0 +1 @@ +fluent-bit \ No newline at end of file From f98bb595815f2a2b474f71aaf3df0283ddb3272b Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 13:55:23 -0600 Subject: [PATCH 044/122] set up misc. protologbeat listener --- .../Protologbeat-temperatures-dashboard.json | 2 +- logstash/pipelines/beats/98_finalize.conf | 1 + .../interface/sensor_ctl/control_vars.conf | 6 ++-- .../sensor_ctl/heatbeat/protologbeat.yml | 4 +-- .../sensor_ctl/miscbeat/protologbeat.yml | 30 +++++++++++++++++++ .../miscbeat/sensor_miscbeat_local.sh | 19 ++++++++++++ .../sensor_ctl/supervisor.d/beats.conf | 11 ++++++- shared/bin/configure-capture.py | 6 ++++ 8 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml create mode 100755 sensor-iso/interface/sensor_ctl/miscbeat/sensor_miscbeat_local.sh diff --git a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json index caaa174b4..97ed48875 100644 --- a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json +++ b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json @@ -49,7 +49,7 @@ "@timestamp", "desc" ], - "title": "Protologbeat search", + "title": "Malcolm sensor temperature metrics search", "version": 1 }, "id": "65345580-03c5-11e9-b42b-a7822d24ca20", diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 24f42d003..642066f9e 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -81,6 +81,7 @@ filter { "_malcolm_filebeat_syslog", "_malcolm_heatbeat", "_malcolm_metricbeat", + "_malcolm_miscbeat", "_malcolm_protologbeat", "_dateparsefailure", "_grokparsefailure", diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 1e6d85ab1..4d29b952c 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -16,8 +16,9 @@ export ARKIME_PACKET_ACL= export ARKIME_ECS_PROVIDER=arkime export ARKIME_ECS_DATASET=session -export PROTOLOGBEAT_PORT=9515 -export PROTOLOGBEAT_INTERVAL=10 +export HEATBEAT_PORT=9515 +export HEATBEAT_INTERVAL=10 +export MISCBEAT_PORT=9516 export ZEEK_LOG_PATH=/home/sensor/bro_logs export ZEEK_MAX_DISK_FILL=90 @@ -109,6 +110,7 @@ export AUTOSTART_CLAMAV_UPDATES=false export AUTOSTART_FILEBEAT=false export AUTOSTART_HEATBEAT=false export AUTOSTART_HEATBEAT_SENSORS=false +export AUTOSTART_MISCBEAT=false export AUTOSTART_METRICBEAT=false export AUTOSTART_NETSNIFF=false export AUTOSTART_PRUNE_PCAP=false diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 26a3dc2c2..6e798392f 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -1,11 +1,11 @@ protologbeat: address: "127.0.0.1" - port: 9515 + port: ${HEATBEAT_PORT:9515} protocol: udp json_mode: true merge_fields_to_root: true max_msg_size: 8192 - default_es_log_type: protologbeat + default_es_log_type: heatbeat #================================ General ====================================== fields_under_root: true diff --git a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml new file mode 100644 index 000000000..03b891a47 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml @@ -0,0 +1,30 @@ +protologbeat: + address: "127.0.0.1" + port: ${MISCBEAT_PORT:9516} + protocol: tcp + json_mode: true + merge_fields_to_root: true + max_msg_size: 16384 + default_es_log_type: miscbeat + +#================================ General ====================================== +fields_under_root: true + +processors: + - add_tags: + tags: [_malcolm_beats, _malcolm_miscbeat] + +#================================ Outputs ====================================== + +#-------------------------- Logstash Output ------------------------------------ +output.logstash: + hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] + ssl.enabled: ${BEAT_LS_SSL:false} + ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] + ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" + ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" + ssl.supported_protocols: "TLSv1.2" + ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" + +#================================ Logging ====================================== +logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/miscbeat/sensor_miscbeat_local.sh b/sensor-iso/interface/sensor_ctl/miscbeat/sensor_miscbeat_local.sh new file mode 100755 index 000000000..4d248c4fd --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/miscbeat/sensor_miscbeat_local.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. + +# force-navigate to script directory (containing config file) +[[ "$(uname -s)" = 'Darwin' ]] && REALPATH=grealpath || REALPATH=realpath +[[ "$(uname -s)" = 'Darwin' ]] && DIRNAME=gdirname || DIRNAME=dirname +if ! (type "$REALPATH" && type "$DIRNAME") > /dev/null; then + echo "$(basename "${BASH_SOURCE[0]}") requires $REALPATH and $DIRNAME" + exit 1 +fi +SCRIPT_PATH="$($DIRNAME $($REALPATH -e "${BASH_SOURCE[0]}"))" +pushd "$SCRIPT_PATH" >/dev/null 2>&1 + +mkdir -p "$SCRIPT_PATH/data" + +protologbeat --path.home "$SCRIPT_PATH" --path.config "$SCRIPT_PATH" --path.data "$SCRIPT_PATH/data" -c "$SCRIPT_PATH/protologbeat.yml" -e + +popd >/dev/null 2>&1 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf index 6087b6881..ecf81cc03 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf @@ -38,6 +38,15 @@ killasgroup=true autostart=%(ENV_AUTOSTART_AUDITBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/auditbeat +[program:miscbeat] +command=bash -l %(ENV_SUPERVISOR_PATH)s/miscbeat/sensor_miscbeat_local.sh +startsecs=5 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_MISCBEAT)s +directory=%(ENV_SUPERVISOR_PATH)s/miscbeat + [program:heatbeat] command=bash -l %(ENV_SUPERVISOR_PATH)s/heatbeat/sensor_heatbeat_local.sh startsecs=5 @@ -48,7 +57,7 @@ autostart=%(ENV_AUTOSTART_HEATBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/heatbeat [program:sensors] -command=/usr/bin/python3 /usr/local/bin/beat-log-temperature.py -p %(ENV_PROTOLOGBEAT_PORT)s -c 0 -s %(ENV_PROTOLOGBEAT_INTERVAL)s +command=/usr/bin/python3 /usr/local/bin/beat-log-temperature.py -p %(ENV_HEATBEAT_PORT)s -c 0 -s %(ENV_HEATBEAT_INTERVAL)s startsecs=5 startretries=3 stopasgroup=true diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index 530f982fa..cf2d52b45 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -57,6 +57,7 @@ class Constants: METRICBEAT = 'metricbeat' AUDITBEAT = 'auditbeat' HEATBEAT = 'heatbeat' # protologbeat to log temperature and other misc. stuff + MISCBEAT = 'miscbeat' # protologbeat to log from fluent-bit as we investigate that tool SYSLOGBEAT = 'filebeat-syslog' # another filebeat instance for syslog ARKIMECAP = 'arkime-capture' @@ -66,6 +67,7 @@ class Constants: AUDITBEAT: f'/opt/sensor/sensor_ctl/{AUDITBEAT}', SYSLOGBEAT: f'/opt/sensor/sensor_ctl/{SYSLOGBEAT}', HEATBEAT: f'/opt/sensor/sensor_ctl/{HEATBEAT}', + MISCBEAT: f'/opt/sensor/sensor_ctl/{MISCBEAT}', } BEAT_CMD = { @@ -74,6 +76,7 @@ class Constants: AUDITBEAT: f'{AUDITBEAT} --path.home "{BEAT_DIR[AUDITBEAT]}" --path.config "{BEAT_DIR[AUDITBEAT]}" --path.data "{BEAT_DIR[AUDITBEAT]}/data" --path.logs "{BEAT_DIR[AUDITBEAT]}/logs" -c "{BEAT_DIR[AUDITBEAT]}/{AUDITBEAT}.yml"', SYSLOGBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[SYSLOGBEAT]}" --path.config "{BEAT_DIR[SYSLOGBEAT]}" --path.data "{BEAT_DIR[SYSLOGBEAT]}/data" --path.logs "{BEAT_DIR[SYSLOGBEAT]}/logs" -c "{BEAT_DIR[SYSLOGBEAT]}/{SYSLOGBEAT}.yml"', HEATBEAT: f'protologbeat --path.home "{BEAT_DIR[HEATBEAT]}" --path.config "{BEAT_DIR[HEATBEAT]}" --path.data "{BEAT_DIR[HEATBEAT]}/data" --path.logs "{BEAT_DIR[HEATBEAT]}/logs" -c "{BEAT_DIR[HEATBEAT]}/protologbeat.yml"', + MISCBEAT: f'protologbeat --path.home "{BEAT_DIR[MISCBEAT]}" --path.config "{BEAT_DIR[MISCBEAT]}" --path.data "{BEAT_DIR[MISCBEAT]}/data" --path.logs "{BEAT_DIR[MISCBEAT]}/logs" -c "{BEAT_DIR[MISCBEAT]}/protologbeat.yml"', } # specific to beats forwarded to logstash (eg., filebeat, metricbeat, auditbeat, filebeat-syslog) @@ -123,6 +126,7 @@ class Constants: MSG_CONFIG_AUDITBEAT = (f'{AUDITBEAT}', f'Configure audit log forwarding via {AUDITBEAT}') MSG_CONFIG_SYSLOGBEAT = (f'{SYSLOGBEAT}', f'Configure syslog forwarding via {FILEBEAT}') MSG_CONFIG_HEATBEAT = (f'{HEATBEAT}', f'Configure hardware metrics (temperature, etc.) forwarding via protologbeat') + MSG_CONFIG_MISCBEAT = (f'{MISCBEAT}', f'Configure miscellaneous log forwarding via protologbeat') MSG_OVERWRITE_CONFIG = '{} is already configured, overwrite current settings?' MSG_IDENTIFY_NICS = 'Do you need help identifying network interfaces?' MSG_BACKGROUND_TITLE = 'Sensor Configuration' @@ -805,6 +809,7 @@ def main(): Constants.MSG_CONFIG_AUDITBEAT, Constants.MSG_CONFIG_SYSLOGBEAT, Constants.MSG_CONFIG_HEATBEAT, + Constants.MSG_CONFIG_MISCBEAT, ], ) if code != Dialog.OK: @@ -897,6 +902,7 @@ def main(): or (fwd_mode == Constants.AUDITBEAT) or (fwd_mode == Constants.SYSLOGBEAT) or (fwd_mode == Constants.HEATBEAT) + or (fwd_mode == Constants.MISCBEAT) ): # forwarder configuration for beats -> logstash From 0c0c386ac3d16c537895ed494bcb54a7179289bf Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 14:01:34 -0600 Subject: [PATCH 045/122] remove deprecated field from protologbeat --- sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml | 1 - sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 6e798392f..265af517e 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -5,7 +5,6 @@ protologbeat: json_mode: true merge_fields_to_root: true max_msg_size: 8192 - default_es_log_type: heatbeat #================================ General ====================================== fields_under_root: true diff --git a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml index 03b891a47..1afba52d2 100644 --- a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml @@ -5,7 +5,6 @@ protologbeat: json_mode: true merge_fields_to_root: true max_msg_size: 16384 - default_es_log_type: miscbeat #================================ General ====================================== fields_under_root: true From 0443215f230e03922d1325f6327a8ed104516c06 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 16:15:08 -0600 Subject: [PATCH 046/122] more processing beats on sensor --- .../composable/component/miscbeat.json | 16 ++++++++++ .../templates/malcolm_beats_template.json | 1 + logstash/pipelines/beats/11_beats_logs.conf | 32 +++++++++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 dashboards/templates/composable/component/miscbeat.json diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json new file mode 100644 index 000000000..8b0036358 --- /dev/null +++ b/dashboards/templates/composable/component/miscbeat.json @@ -0,0 +1,16 @@ +{ + "template": { + "mappings": { + "properties": { + "fluentbit": { + "properties": { + "input": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } +} diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 83f496657..9d2fa2843 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -23,6 +23,7 @@ "ecs_user_agent", "custom_auditd", "custom_heatbeat", + "custom_miscbeat", "custom_syslog", "custom_system" ], diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 3f612bb4f..b9ca49a03 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -120,8 +120,36 @@ filter { } } - mutate { id => "mutate_replace_agent_type_beats_heatbeat" - replace => { "[agent][type]" => "heatbeat" } } + } else if ("_malcolm_miscbeat" in [tags]) { + + if ([fluentbit][input]) { + mutate { id => "mutate_replace_event_module_fluentbit_input" + replace => { "[event][module]" => "%{[fluentbit][input]}" } } + } + + if ([date]) { + date { + id => "date_beats_miscbeat_fluentbit_date" + match => [ "[date]", "UNIX" ] + target => "[@timestamp]" + remove_field => [ "[date]" ] + } + } + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_beats_miscbeat" + source => [ "[host][name]", + "[agent][type]", + "[event][module]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } } # event.module (nginx/auditd/etc.) From 0b80847444b62e506001cd580c4f670006ad2637 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 16:30:52 -0600 Subject: [PATCH 047/122] nest stuff from protologbeat --- .../composable/component/heatbeat.json | 108 +++++++++--------- .../composable/component/miscbeat.json | 12 +- .../sensor_ctl/heatbeat/protologbeat.yml | 7 +- .../sensor_ctl/miscbeat/protologbeat.yml | 5 +- 4 files changed, 69 insertions(+), 63 deletions(-) diff --git a/dashboards/templates/composable/component/heatbeat.json b/dashboards/templates/composable/component/heatbeat.json index ea40b2319..635e6a9b0 100644 --- a/dashboards/templates/composable/component/heatbeat.json +++ b/dashboards/templates/composable/component/heatbeat.json @@ -2,58 +2,62 @@ "template": { "mappings": { "properties": { - "cpu_rpm_avg": { - "type": "float" - }, - "cpu_volt_avg": { - "type": "float" - }, - "cpu_temp_avg": { - "type": "float" - }, - "gpu_rpm_avg": { - "type": "float" - }, - "gpu_volt_avg": { - "type": "float" - }, - "gpu_temp_avg": { - "type": "float" - }, - "hdd_temp_avg": { - "type": "float" - }, - "other_volt_avg": { - "type": "float" - }, - "other_rpm_avg": { - "type": "float" - }, - "other_temp_avg": { - "type": "float" - }, - "sensors.adapter": { - "type": "keyword", - "norms": false - }, - "sensors.class": { - "type": "keyword", - "norms": false - }, - "sensors.label": { - "type": "keyword", - "norms": false - }, - "sensors.name": { - "type": "keyword", - "norms": false - }, - "sensors.units": { - "type": "keyword", - "norms": false - }, - "sensors.value": { - "type": "float" + "heatbeat": { + "properties": { + "cpu_rpm_avg": { + "type": "float" + }, + "cpu_volt_avg": { + "type": "float" + }, + "cpu_temp_avg": { + "type": "float" + }, + "gpu_rpm_avg": { + "type": "float" + }, + "gpu_volt_avg": { + "type": "float" + }, + "gpu_temp_avg": { + "type": "float" + }, + "hdd_temp_avg": { + "type": "float" + }, + "other_volt_avg": { + "type": "float" + }, + "other_rpm_avg": { + "type": "float" + }, + "other_temp_avg": { + "type": "float" + }, + "sensors.adapter": { + "type": "keyword", + "norms": false + }, + "sensors.class": { + "type": "keyword", + "norms": false + }, + "sensors.label": { + "type": "keyword", + "norms": false + }, + "sensors.name": { + "type": "keyword", + "norms": false + }, + "sensors.units": { + "type": "keyword", + "norms": false + }, + "sensors.value": { + "type": "float" + } + } } } } diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 8b0036358..e4b70b71e 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -2,11 +2,15 @@ "template": { "mappings": { "properties": { - "fluentbit": { + "miscbeat": { "properties": { - "input": { - "ignore_above": 1024, - "type": "keyword" + "fluentbit": { + "properties": { + "input": { + "ignore_above": 1024, + "type": "keyword" + } + } } } } diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml index 265af517e..34cbfabe6 100644 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml @@ -1,14 +1,13 @@ protologbeat: address: "127.0.0.1" port: ${HEATBEAT_PORT:9515} - protocol: udp + protocol: "udp" json_mode: true - merge_fields_to_root: true + merge_fields_to_root: false + fields_parent: "heatbeat" max_msg_size: 8192 #================================ General ====================================== -fields_under_root: true - processors: - add_tags: tags: [_malcolm_beats, _malcolm_heatbeat] diff --git a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml index 1afba52d2..1c1a5f7c0 100644 --- a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml @@ -1,14 +1,13 @@ protologbeat: address: "127.0.0.1" port: ${MISCBEAT_PORT:9516} - protocol: tcp + protocol: "tcp" json_mode: true merge_fields_to_root: true + fields_parent: "miscbeat" max_msg_size: 16384 #================================ General ====================================== -fields_under_root: true - processors: - add_tags: tags: [_malcolm_beats, _malcolm_miscbeat] From f48d92c4272e476b351f305950a8018a9587a0b4 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 22:25:31 -0600 Subject: [PATCH 048/122] don't put miscbeat fields under root --- sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml index 1c1a5f7c0..7575f57bc 100644 --- a/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml +++ b/sensor-iso/interface/sensor_ctl/miscbeat/protologbeat.yml @@ -3,7 +3,7 @@ protologbeat: port: ${MISCBEAT_PORT:9516} protocol: "tcp" json_mode: true - merge_fields_to_root: true + merge_fields_to_root: false fields_parent: "miscbeat" max_msg_size: 16384 From 96372c677d3ee6e9fd756f562260b13ceb2c9c69 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Wed, 8 Jun 2022 22:50:49 -0600 Subject: [PATCH 049/122] more beats work --- .../Protologbeat-temperatures-dashboard.json | 12 +++++------ logstash/pipelines/beats/11_beats_logs.conf | 20 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json index 97ed48875..cca206d06 100644 --- a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json +++ b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json @@ -9,7 +9,7 @@ "title": "Temperature Timeline", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\":\"Temperature Timeline\",\"type\":\"line\",\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":true,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Max cpu_temp_avg\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"3\",\"label\":\"Maximum Other °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"4\",\"label\":\"Maximum GPU °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"8\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-12h\",\"to\":\"now\",\"mode\":\"quick\"},\"useNormalizedEsInterval\":true,\"interval\":\"auto\",\"time_zone\":\"America/Denver\",\"drop_partials\":false,\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"other_temp_avg\",\"customLabel\":\"Maximum Other °C\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"gpu_temp_avg\",\"customLabel\":\"Maximum GPU °C\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" + "visState": "{\"title\":\"Temperature Timeline\",\"type\":\"line\",\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":true,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Max cpu_temp_avg\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"3\",\"label\":\"Maximum Other °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"4\",\"label\":\"Maximum GPU °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"8\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-12h\",\"to\":\"now\",\"mode\":\"quick\"},\"useNormalizedEsInterval\":true,\"interval\":\"auto\",\"time_zone\":\"America/Denver\",\"drop_partials\":false,\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.other_temp_avg\",\"customLabel\":\"Maximum Other °C\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.gpu_temp_avg\",\"customLabel\":\"Maximum GPU °C\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" }, "id": "752a7e30-03af-11e9-bf7f-6138c205dfb3", "type": "visualization", @@ -36,9 +36,9 @@ "attributes": { "columns": [ "host.name", - "cpu_temp_avg", - "hdd_temp_avg", - "other_temp_avg" + "heatbeat.cpu_temp_avg", + "heatbeat.hdd_temp_avg", + "heatbeat.other_temp_avg" ], "description": "", "hits": 0, @@ -66,7 +66,7 @@ "title": "CPU and Storage Temperature Gauge", "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 60\":\"rgb(0,104,55)\",\"60 - 70\":\"rgb(255,255,190)\",\"70 - 90\":\"rgb(165,0,38)\"}}}", "version": 1, - "visState": "{\"title\":\"CPU and Storage Temperature Gauge\",\"type\":\"gauge\",\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"verticalSplit\":false,\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":60},{\"from\":60,\"to\":70},{\"from\":70,\"to\":90}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"#333\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"#eee\",\"bgColor\":false,\"subText\":\"\",\"fontSize\":60,\"labelColor\":true}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" + "visState": "{\"title\":\"CPU and Storage Temperature Gauge\",\"type\":\"gauge\",\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"verticalSplit\":false,\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":60},{\"from\":60,\"to\":70},{\"from\":70,\"to\":90}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"#333\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"#eee\",\"bgColor\":false,\"subText\":\"\",\"fontSize\":60,\"labelColor\":true}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" }, "id": "db628ba0-03c5-11e9-b42b-a7822d24ca20", "type": "visualization", @@ -82,7 +82,7 @@ "title": "Maximum Sensor CPU and Storage Temperatures", "uiStateJSON": "{}", "version": 1, - "visState": "{\"title\":\"Maximum Sensor CPU and Storage Temperatures\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"},\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100,\"rotate\":0},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\",\"defaultYExtents\":false},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Maximum CPU °C\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"data\":{\"id\":\"3\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"orderBucketsBySum\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"host.name\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Name\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" + "visState": "{\"title\":\"Maximum Sensor CPU and Storage Temperatures\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"},\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100,\"rotate\":0},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\",\"defaultYExtents\":false},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Maximum CPU °C\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"data\":{\"id\":\"3\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"orderBucketsBySum\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"host.name\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Name\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" }, "id": "923c3ce0-03c6-11e9-b42b-a7822d24ca20", "type": "visualization", diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index b9ca49a03..18b2c8f5e 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -105,12 +105,12 @@ filter { fingerprint { id => "fingerprint_malcolm_beats_heatbeat" source => [ "[host][name]", - "[sensors][adapter]", - "[sensors][class]", - "[sensors][label]", - "[sensors][name]", - "[sensors][units]", - "[sensors][value]", + "[heatbeat][sensors][adapter]", + "[heatbeat][sensors][class]", + "[heatbeat][sensors][label]", + "[heatbeat][sensors][name]", + "[heatbeat][sensors][units]", + "[heatbeat][sensors][value]", "[@timestamp]" ] concatenate_sources => true # uses event.hash @@ -122,17 +122,17 @@ filter { } else if ("_malcolm_miscbeat" in [tags]) { - if ([fluentbit][input]) { + if ([miscbeat][fluentbit][input]) { mutate { id => "mutate_replace_event_module_fluentbit_input" - replace => { "[event][module]" => "%{[fluentbit][input]}" } } + replace => { "[event][module]" => "%{[miscbeat][fluentbit][input]}" } } } if ([date]) { date { id => "date_beats_miscbeat_fluentbit_date" - match => [ "[date]", "UNIX" ] + match => [ "[miscbeat][date]", "UNIX" ] target => "[@timestamp]" - remove_field => [ "[date]" ] + remove_field => [ "[miscbeat][date]" ] } } From 1d108faf5bba4a495c8f6d6c2653b56fafd9e45d Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 9 Jun 2022 11:01:39 -0600 Subject: [PATCH 050/122] work in progress on sensor beats -> (fluentbit)? --- api/project/__init__.py | 35 +++++++---- .../composable/component/miscbeat.json | 52 ++++++++++++--- logstash/pipelines/beats/11_beats_logs.conf | 11 ++-- .../interface/sensor_ctl/control_vars.conf | 7 ++- .../supervisor.d/fluentbit-netif.template | 14 +++++ .../sensor_ctl/supervisor.d/fluentbit.conf | 63 +++++++++++++++++++ sensor-iso/interface/sensor_ctl/supervisor.sh | 4 +- shared/bin/memory_usage_percentage.sh | 3 + 8 files changed, 162 insertions(+), 27 deletions(-) create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf create mode 100755 shared/bin/memory_usage_percentage.sh diff --git a/api/project/__init__.py b/api/project/__init__.py index 101338b08..41f329477 100644 --- a/api/project/__init__.py +++ b/api/project/__init__.py @@ -532,28 +532,37 @@ def fields(): Parameters ---------- - + request : Request + template - template name (default is app.config["MALCOLM_TEMPLATE"]) + pattern - index pattern name (default is app.config["ARKIME_INDEX_PATTERN"]) Returns ------- fields A dict of dicts where key is the field name and value may contain 'description' and 'type' """ + args = get_request_arguments(request) + + template = args['template'] if 'template' in args else app.config["MALCOLM_TEMPLATE"] + pattern = args['pattern'] if 'pattern' in args else app.config["ARKIME_INDEX_PATTERN"] + arkimeFields = (template == app.config["MALCOLM_TEMPLATE"]) and (pattern == app.config["ARKIME_INDEX_PATTERN"]) + fields = defaultdict(dict) - # get fields from Arkime's field's table - s = opensearch_dsl.Search( - using=opensearch_dsl.connections.get_connection(), index=app.config["ARKIME_FIELDS_INDEX"] - ).extra(size=3000) - for hit in [x['_source'] for x in s.execute().to_dict()['hits']['hits']]: - if (fieldname := deep_get(hit, ['dbField2'])) and (fieldname not in fields): - fields[fieldname] = { - 'description': deep_get(hit, ['help']), - 'type': field_type_map[deep_get(hit, ['type'])], - } + if arkimeFields: + # get fields from Arkime's field's table + s = opensearch_dsl.Search( + using=opensearch_dsl.connections.get_connection(), index=app.config["ARKIME_FIELDS_INDEX"] + ).extra(size=3000) + for hit in [x['_source'] for x in s.execute().to_dict()['hits']['hits']]: + if (fieldname := deep_get(hit, ['dbField2'])) and (fieldname not in fields): + fields[fieldname] = { + 'description': deep_get(hit, ['help']), + 'type': field_type_map[deep_get(hit, ['type'])], + } # get fields from OpenSearch template for template in deep_get( - requests.get(f'{app.config["OPENSEARCH_URL"]}/_index_template/{app.config["MALCOLM_TEMPLATE"]}').json(), + requests.get(f'{app.config["OPENSEARCH_URL"]}/_index_template/{template}').json(), ["index_templates"], ): for fieldname, fieldinfo in deep_get( @@ -567,7 +576,7 @@ def fields(): for field in requests.get( f"{app.config['DASHBOARDS_URL']}/api/index_patterns/_fields_for_wildcard", params={ - 'pattern': app.config["ARKIME_INDEX_PATTERN"], + 'pattern': pattern, 'meta_fields': ["_source", "_id", "_type", "_index", "_score"], }, ).json()['fields']: diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index e4b70b71e..e9bc874d5 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -4,13 +4,51 @@ "properties": { "miscbeat": { "properties": { - "fluentbit": { - "properties": { - "input": { - "ignore_above": 1024, - "type": "keyword" - } - } + "Mem.free": { + "type": "long" + }, + "Mem.total": { + "type": "long" + }, + "Mem.used": { + "type": "long" + }, + "Mem.used_p": { + "type": "float" + }, + "Swap.free": { + "type": "long" + }, + "Swap.total": { + "type": "long" + }, + "Swap.used": { + "type": "long" + }, + "date": { + "type": "date" + }, + "cpu_p": { + "type": "float" + }, + "exec": { + "type": "keyword", + "ignore_above": 1024 + }, + "module": { + "type": "keyword" + }, + "read_size": { + "type": "long" + }, + "system_p": { + "type": "float" + }, + "user_p": { + "type": "float" + }, + "write_size": { + "type": "long" } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 18b2c8f5e..8f19f5757 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -122,14 +122,15 @@ filter { } else if ("_malcolm_miscbeat" in [tags]) { - if ([miscbeat][fluentbit][input]) { - mutate { id => "mutate_replace_event_module_fluentbit_input" - replace => { "[event][module]" => "%{[miscbeat][fluentbit][input]}" } } + if ([miscbeat][module]) { + mutate { id => "mutate_replace_event_module_miscbeat_module" + replace => { "[event][module]" => "%{[miscbeat][module]}" } + remove_field => [ "[miscbeat][module]" ] } } - if ([date]) { + if ([miscbeat][date]) { date { - id => "date_beats_miscbeat_fluentbit_date" + id => "date_beats_miscbeat_date" match => [ "[miscbeat][date]", "UNIX" ] target => "[@timestamp]" remove_field => [ "[miscbeat][date]" ] diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 4d29b952c..7a3858c80 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -18,7 +18,9 @@ export ARKIME_ECS_DATASET=session export HEATBEAT_PORT=9515 export HEATBEAT_INTERVAL=10 + export MISCBEAT_PORT=9516 +export FLUENTBIT_METRIC_INTERVAL=30 export ZEEK_LOG_PATH=/home/sensor/bro_logs export ZEEK_MAX_DISK_FILL=90 @@ -108,10 +110,11 @@ export AUTOSTART_ARKIME=false export AUTOSTART_AUDITBEAT=false export AUTOSTART_CLAMAV_UPDATES=false export AUTOSTART_FILEBEAT=false +export AUTOSTART_FLUENTBIT_METRIC=false export AUTOSTART_HEATBEAT=false export AUTOSTART_HEATBEAT_SENSORS=false -export AUTOSTART_MISCBEAT=false export AUTOSTART_METRICBEAT=false +export AUTOSTART_MISCBEAT=false export AUTOSTART_NETSNIFF=false export AUTOSTART_PRUNE_PCAP=false export AUTOSTART_PRUNE_ZEEK=false @@ -120,3 +123,5 @@ export AUTOSTART_SURICATA_UPDATES=false export AUTOSTART_SYSLOGBEAT=false export AUTOSTART_TCPDUMP=false export AUTOSTART_ZEEK=false + + diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template new file mode 100644 index 000000000..4b8783e60 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template @@ -0,0 +1,14 @@ +[program:fluentbit-netif-$IFACE] +command=/opt/fluent-bit/bin/fluent-bit + -i netif + -p interface=$IFACE + -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F record_modifier -p "Record=module netif" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf new file mode 100644 index 000000000..69f319381 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf @@ -0,0 +1,63 @@ +[group:fluentbit] +programs=cpu,disk,mem,mem_p +#,netif + +[program:cpu] +command=/opt/fluent-bit/bin/fluent-bit + -i cpu + -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F record_modifier -p "Record=module cpu" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s + +[program:disk] +command=/opt/fluent-bit/bin/fluent-bit + -i disk + -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F record_modifier -p "Record=module disk" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s + +[program:mem] +command=/opt/fluent-bit/bin/fluent-bit + -i mem + -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F record_modifier -p "Record=module mem" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s + +[program:mem_p] +command=/opt/fluent-bit/bin/fluent-bit + -i exec + -p "command= /usr/local/bin/memory_usage_percentage.sh" + -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F modify -p "Hard_rename=exec Mem.used_p" -m '*' + -F record_modifier -p "Record=module mem" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s + +# netif is managed in a template per-interface (fluentbit-netif.template) \ No newline at end of file diff --git a/sensor-iso/interface/sensor_ctl/supervisor.sh b/sensor-iso/interface/sensor_ctl/supervisor.sh index 0e7cdd491..99a51f729 100755 --- a/sensor-iso/interface/sensor_ctl/supervisor.sh +++ b/sensor-iso/interface/sensor_ctl/supervisor.sh @@ -17,7 +17,9 @@ function join_by { local IFS="$1"; shift; echo "$*"; } # we can use load balancing function CreateCaptureConfigs() { - declare -a CAPTURE_PROGS=("tcpdump" "netsniff") + # fluentbit's netif module isn't really a capture program, but it does monitor an invididual interface + # in a similar way, so we'll handle it here with these + declare -a CAPTURE_PROGS=("tcpdump" "netsniff" "fluentbit-netif") if [[ -d ./"$CONFIG_DIR" ]]; then rm -f ./"$CONFIG_DIR"/"$CAPTURE_GROUPS_FILE" diff --git a/shared/bin/memory_usage_percentage.sh b/shared/bin/memory_usage_percentage.sh new file mode 100755 index 000000000..1f91cdfb2 --- /dev/null +++ b/shared/bin/memory_usage_percentage.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +free -t | awk 'FNR == 2 {printf("%.2f\n"), $3/$2*100}' \ No newline at end of file From 8518148cbe353138016958f909f972af522bb925 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 9 Jun 2022 11:27:35 -0600 Subject: [PATCH 051/122] Get fluentbit syslog --- .../interface/sensor_ctl/control_vars.conf | 2 ++ .../{fluentbit.conf => fluentbit-metrics.conf} | 2 +- .../supervisor.d/fluentbit-netif.template | 2 +- .../supervisor.d/fluentbit-syslog.conf | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) rename sensor-iso/interface/sensor_ctl/supervisor.d/{fluentbit.conf => fluentbit-metrics.conf} (98%) create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 7a3858c80..762f25ae4 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -111,6 +111,8 @@ export AUTOSTART_AUDITBEAT=false export AUTOSTART_CLAMAV_UPDATES=false export AUTOSTART_FILEBEAT=false export AUTOSTART_FLUENTBIT_METRIC=false +export AUTOSTART_FLUENTBIT_NETIF=false +export AUTOSTART_FLUENTBIT_SYSLOG=false export AUTOSTART_HEATBEAT=false export AUTOSTART_HEATBEAT_SENSORS=false export AUTOSTART_METRICBEAT=false diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf similarity index 98% rename from sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf rename to sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf index 69f319381..b5e50787c 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf @@ -1,4 +1,4 @@ -[group:fluentbit] +[group:fluentbit-metrics] programs=cpu,disk,mem,mem_p #,netif diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template index 4b8783e60..5ed4f90a6 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template @@ -11,4 +11,4 @@ startsecs=20 startretries=3 stopasgroup=true killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s +autostart=%(ENV_AUTOSTART_FLUENTBIT_NETIF)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf new file mode 100644 index 000000000..50823123f --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf @@ -0,0 +1,18 @@ +[program:fluentbit-syslog] +command=/opt/fluent-bit/bin/fluent-bit + -i syslog + -p Mode=udp + -p Listen=127.0.0.1 + -p Port=9514 + -p Parser=syslog-rfc3164-local + -p Buffer_Chunk_Size=32000 + -p Buffer_Max_Size=64000 + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F record_modifier -p "Record=module syslog" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_SYSLOG)s From 7f32c4ce9fa09ea66a4aae69274e120829323418 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 9 Jun 2022 12:31:58 -0600 Subject: [PATCH 052/122] more work in progress on the dashboards for hedgehog --- .../composable/component/miscbeat.json | 66 ++++++------------- logstash/pipelines/beats/11_beats_logs.conf | 6 ++ .../supervisor.d/fluentbit-syslog.conf | 2 +- 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index e9bc874d5..91a955085 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -4,52 +4,26 @@ "properties": { "miscbeat": { "properties": { - "Mem.free": { - "type": "long" - }, - "Mem.total": { - "type": "long" - }, - "Mem.used": { - "type": "long" - }, - "Mem.used_p": { - "type": "float" - }, - "Swap.free": { - "type": "long" - }, - "Swap.total": { - "type": "long" - }, - "Swap.used": { - "type": "long" - }, - "date": { - "type": "date" - }, - "cpu_p": { - "type": "float" - }, - "exec": { - "type": "keyword", - "ignore_above": 1024 - }, - "module": { - "type": "keyword" - }, - "read_size": { - "type": "long" - }, - "system_p": { - "type": "float" - }, - "user_p": { - "type": "float" - }, - "write_size": { - "type": "long" - } + "cpu_p": { "type": "float" }, + "date": { "type": "date" }, + "exec": { "type": "keyword", "ignore_above": 1024 }, + "host": { "type": "keyword" }, + "ident": { "type": "keyword" }, + "Mem.free": { "type": "long" }, + "Mem.total": { "type": "long" }, + "Mem.used": { "type": "long" }, + "Mem.used_p": { "type": "float" }, + "message": { "type": "keyword", "ignore_above": 1024 }, + "module": { "type": "keyword" }, + "pid": { "type": "integer" }, + "pri": { "type": "long" }, + "read_size": { "type": "long" }, + "Swap.free": { "type": "long" }, + "Swap.total": { "type": "long" }, + "Swap.used": { "type": "long" }, + "system_p": { "type": "float" }, + "user_p": { "type": "float" }, + "write_size": { "type": "long" } } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 8f19f5757..7584f9936 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -137,6 +137,12 @@ filter { } } + if ([event][module] == "syslog") { + # time gets parsed into the miscbeat.date field, this is redundant + mutate { id => "mutate_miscbeat_remove_syslog_time" + remove_field => [ "[miscbeat][time]" ] } + } + if (![event][hash]) { fingerprint { id => "fingerprint_malcolm_beats_miscbeat" diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf index 50823123f..4591b949c 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf @@ -4,7 +4,7 @@ command=/opt/fluent-bit/bin/fluent-bit -p Mode=udp -p Listen=127.0.0.1 -p Port=9514 - -p Parser=syslog-rfc3164-local + -p Parser=syslog-rfc3164 -p Buffer_Chunk_Size=32000 -p Buffer_Max_Size=64000 -o tcp://localhost:%(ENV_MISCBEAT_PORT)s From e6b65f870eef8e13eb2591629f887ea0cc3f8ade Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Thu, 9 Jun 2022 17:01:44 -0600 Subject: [PATCH 053/122] sensor WIP --- .../dashboards/beats/Filebeat-syslog.json | 144 ------------ .../db0312a0-e842-11ec-88e0-67bf497b7120.json | 212 ++++++++++++++++++ .../composable/component/miscbeat.json | 4 - .../composable/component/syslog.json | 34 --- .../templates/malcolm_beats_template.json | 1 - logstash/maps/syslog_facility_codes.yaml | 24 ++ logstash/maps/syslog_severity_levels.yaml | 8 + logstash/pipelines/beats/11_beats_logs.conf | 61 +++-- logstash/pipelines/beats/98_finalize.conf | 1 - sensor-iso/README.md | 11 +- .../interface/sensor_ctl/control_vars.conf | 1 - .../filebeat-syslog/filebeat-syslog.yml | 26 --- .../sensor_filebeat-syslog_local.sh | 19 -- .../sensor_ctl/supervisor.d/beats.conf | 11 +- shared/bin/configure-capture.py | 8 +- 15 files changed, 285 insertions(+), 280 deletions(-) delete mode 100644 dashboards/dashboards/beats/Filebeat-syslog.json create mode 100755 dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json delete mode 100644 dashboards/templates/composable/component/syslog.json create mode 100644 logstash/maps/syslog_facility_codes.yaml create mode 100644 logstash/maps/syslog_severity_levels.yaml delete mode 100644 sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml delete mode 100755 sensor-iso/interface/sensor_ctl/filebeat-syslog/sensor_filebeat-syslog_local.sh diff --git a/dashboards/dashboards/beats/Filebeat-syslog.json b/dashboards/dashboards/beats/Filebeat-syslog.json deleted file mode 100644 index 871f6938b..000000000 --- a/dashboards/dashboards/beats/Filebeat-syslog.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "version": "2.0.0", - "objects": [ - { - "id": "Filebeat-syslog-dashboard-ecs", - "type": "dashboard", - "namespaces": [ - "default" - ], - "updated_at": "2022-06-06T22:19:27.173Z", - "version": "WzkyMywxXQ==", - "attributes": { - "title": "Malcolm Sensor Syslog", - "hits": 0, - "description": "Syslog logs from Malcolm sensors", - "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":36,\"h\":22,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":22,\"w\":48,\"h\":28,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"columns\":[\"host.name\",\"process.program\",\"event.original\"],\"sort\":[\"@timestamp\",\"desc\"]},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":36,\"y\":0,\"w\":12,\"h\":22,\"i\":\"29d428e5-2e38-4055-990a-127002b9239e\"},\"panelIndex\":\"29d428e5-2e38-4055-990a-127002b9239e\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"version\":true,\"highlightAll\":true,\"filter\":[]}" - } - }, - "references": [ - { - "name": "panel_0", - "type": "visualization", - "id": "Syslog-events-by-hostname-ecs" - }, - { - "name": "panel_1", - "type": "search", - "id": "Syslog-system-logs-ecs" - }, - { - "name": "panel_2", - "type": "visualization", - "id": "acd5bc10-e5e6-11ec-93b8-7d74ebb8d857" - } - ], - "migrationVersion": { - "dashboard": "7.9.3" - } - }, - { - "id": "Syslog-events-by-hostname-ecs", - "type": "visualization", - "namespaces": [ - "default" - ], - "updated_at": "2022-06-06T22:16:35.490Z", - "version": "WzkyMSwxXQ==", - "attributes": { - "title": "syslog - Events by Hostname", - "visState": "{\"title\":\"syslog - Events by Hostname\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"group\"}],\"params\":{\"times\":[],\"addTimeMarker\":false,\"setYExtents\":false,\"shareYAxis\":true,\"legendPosition\":\"bottom\",\"scale\":\"linear\",\"yAxis\":{},\"addTooltip\":true,\"addLegend\":true,\"mode\":\"stacked\",\"defaultYExtents\":false,\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}", - "uiStateJSON": "{}", - "description": "", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" - }, - "savedSearchRefName": "search_0" - }, - "references": [ - { - "name": "search_0", - "type": "search", - "id": "Syslog-system-logs-ecs" - } - ], - "migrationVersion": { - "visualization": "7.10.0" - } - }, - { - "id": "Syslog-system-logs-ecs", - "type": "search", - "namespaces": [ - "default" - ], - "updated_at": "2022-06-06T22:09:20.377Z", - "version": "Wzg0MiwxXQ==", - "attributes": { - "columns": [ - "host.name", - "process.program", - "event.original" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"agent.type:syslog\",\"language\":\"kuery\"},\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"filter\":[],\"highlightAll\":true,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "title": "syslog - Logs", - "version": 1 - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "malcolm_beats_*" - } - ], - "migrationVersion": { - "search": "7.9.3" - } - }, - { - "id": "acd5bc10-e5e6-11ec-93b8-7d74ebb8d857", - "type": "visualization", - "namespaces": [ - "default" - ], - "updated_at": "2022-06-06T22:19:04.657Z", - "version": "WzkyMiwxXQ==", - "attributes": { - "title": "Syslog Program Name", - "visState": "{\"title\":\"Syslog Program Name\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"process.program\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Program Name\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", - "description": "", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"agent.type:syslog\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - } - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "malcolm_beats_*" - } - ], - "migrationVersion": { - "visualization": "7.10.0" - } - } - ] -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json b/dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json new file mode 100755 index 000000000..06ff9ba5b --- /dev/null +++ b/dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json @@ -0,0 +1,212 @@ +{ + "version": "2.0.0", + "objects": [ + { + "id": "db0312a0-e842-11ec-88e0-67bf497b7120", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T23:00:39.461Z", + "version": "WzkyMywxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog", + "hits": 0, + "description": "Syslog logs from Malcolm sensors", + "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":9,\"h\":19,\"i\":\"e1d6d345-c417-4f95-8907-17806a08cc34\"},\"panelIndex\":\"e1d6d345-c417-4f95-8907-17806a08cc34\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":9,\"y\":0,\"w\":9,\"h\":19,\"i\":\"ec19724f-f84a-4dde-acff-f539df5afef4\"},\"panelIndex\":\"ec19724f-f84a-4dde-acff-f539df5afef4\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":18,\"y\":0,\"w\":15,\"h\":19,\"i\":\"ff1d5bec-24fd-43b1-8a7b-e1b6942aa306\"},\"panelIndex\":\"ff1d5bec-24fd-43b1-8a7b-e1b6942aa306\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":33,\"y\":0,\"w\":15,\"h\":19,\"i\":\"6874104c-2a3e-432f-9cf1-3324dce134c9\"},\"panelIndex\":\"6874104c-2a3e-432f-9cf1-3324dce134c9\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":19,\"w\":48,\"h\":19,\"i\":\"f8d075cc-f2fc-4da7-8c0b-c1e691386eaf\"},\"panelIndex\":\"f8d075cc-f2fc-4da7-8c0b-c1e691386eaf\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]", + "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + } + }, + "references": [ + { + "name": "panel_0", + "type": "visualization", + "id": "6ccdb970-e842-11ec-88e0-67bf497b7120" + }, + { + "name": "panel_1", + "type": "visualization", + "id": "a6549790-e842-11ec-88e0-67bf497b7120" + }, + { + "name": "panel_2", + "type": "visualization", + "id": "42bd0a50-e847-11ec-8b84-87a2d75f23b1" + }, + { + "name": "panel_3", + "type": "visualization", + "id": "8e4a7890-e847-11ec-8b84-87a2d75f23b1" + }, + { + "name": "panel_4", + "type": "search", + "id": "37139ac0-e842-11ec-88e0-67bf497b7120" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "6ccdb970-e842-11ec-88e0-67bf497b7120", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T22:51:27.963Z", + "version": "WzkxMywxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog - Host", + "visState": "{\"title\":\"Malcolm Sensor Syslog - Host\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"log.syslog.hostname\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Host\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "37139ac0-e842-11ec-88e0-67bf497b7120" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "a6549790-e842-11ec-88e0-67bf497b7120", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T22:51:27.963Z", + "version": "WzkxNCwxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog - Program", + "visState": "{\"title\":\"Malcolm Sensor Syslog - Program\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"log.syslog.appname\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":200,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Program\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "37139ac0-e842-11ec-88e0-67bf497b7120" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "42bd0a50-e847-11ec-8b84-87a2d75f23b1", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T22:55:30.164Z", + "version": "WzkyMSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog - Severity", + "visState": "{\"title\":\"Malcolm Sensor Syslog - Severity\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"log.syslog.severity.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":8,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"isDonut\":true,\"labels\":{\"show\":true,\"values\":true,\"last_level\":true,\"truncate\":100}}}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "37139ac0-e842-11ec-88e0-67bf497b7120" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "8e4a7890-e847-11ec-8b84-87a2d75f23b1", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T22:57:36.921Z", + "version": "WzkyMiwxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog - Facility", + "visState": "{\"title\":\"Malcolm Sensor Syslog - Facility\",\"type\":\"horizontal_bar\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"log.syslog.facility.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":25,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Facility\"},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"log.syslog.facility.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":25,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Facility\"},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":75,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "37139ac0-e842-11ec-88e0-67bf497b7120" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "37139ac0-e842-11ec-88e0-67bf497b7120", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-09T22:51:27.963Z", + "version": "WzkxNSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Syslog - Logs", + "description": "", + "hits": 0, + "columns": [ + "log.syslog.hostname", + "log.syslog.severity.name", + "log.syslog.facility.name", + "log.syslog.appname", + "event.original" + ], + "sort": [], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"log.syslog:*\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "search": "7.9.3" + } + } + ] +} \ No newline at end of file diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 91a955085..bde855a4e 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -7,16 +7,12 @@ "cpu_p": { "type": "float" }, "date": { "type": "date" }, "exec": { "type": "keyword", "ignore_above": 1024 }, - "host": { "type": "keyword" }, - "ident": { "type": "keyword" }, "Mem.free": { "type": "long" }, "Mem.total": { "type": "long" }, "Mem.used": { "type": "long" }, "Mem.used_p": { "type": "float" }, "message": { "type": "keyword", "ignore_above": 1024 }, "module": { "type": "keyword" }, - "pid": { "type": "integer" }, - "pri": { "type": "long" }, "read_size": { "type": "long" }, "Swap.free": { "type": "long" }, "Swap.total": { "type": "long" }, diff --git a/dashboards/templates/composable/component/syslog.json b/dashboards/templates/composable/component/syslog.json deleted file mode 100644 index 18ad2de68..000000000 --- a/dashboards/templates/composable/component/syslog.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "template": { - "mappings": { - "properties": { - "process": { - "properties": { - "program": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "syslog": { - "properties": { - "facility": { - "type": "long" - }, - "facility_label": { - "ignore_above": 1024, - "type": "keyword" - }, - "priority": { - "type": "long" - }, - "severity_label": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } -} diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 9d2fa2843..4dbcda810 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -24,7 +24,6 @@ "custom_auditd", "custom_heatbeat", "custom_miscbeat", - "custom_syslog", "custom_system" ], "template" :{ diff --git a/logstash/maps/syslog_facility_codes.yaml b/logstash/maps/syslog_facility_codes.yaml new file mode 100644 index 000000000..46baa98c5 --- /dev/null +++ b/logstash/maps/syslog_facility_codes.yaml @@ -0,0 +1,24 @@ +"0": "kern" +"1": "user" +"2": "mail" +"3": "daemon" +"4": "auth" +"5": "syslog" +"6": "lpr" +"7": "news" +"8": "uucp" +"9": "cron" +"10": "authpriv" +"11": "ftp" +"12": "ntp" +"13": "security" +"14": "console" +"15": "solaris-cron" +"16": "local0" +"17": "local1" +"18": "local2" +"19": "local3" +"20": "local4" +"21": "local5" +"22": "local6" +"23": "local7" \ No newline at end of file diff --git a/logstash/maps/syslog_severity_levels.yaml b/logstash/maps/syslog_severity_levels.yaml new file mode 100644 index 000000000..595f2b1e1 --- /dev/null +++ b/logstash/maps/syslog_severity_levels.yaml @@ -0,0 +1,8 @@ +"0": "emerg" +"1": "alert" +"2": "crit" +"3": "err" +"4": "warning" +"5": "notice" +"6": "info" +"7": "debug" \ No newline at end of file diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 7584f9936..82bebbd77 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -55,30 +55,6 @@ filter { } } - } else if ([agent][type] == "filebeat") and ([input][type] == "syslog") { - - if (![event][hash]) { - fingerprint { - id => "fingerprint_malcolm_beats_filebeat_syslog" - source => [ "[host][name]", - "[event][module]", - "[syslog][facility]", - "[syslog][priority]", - "[process][program]", - "[event][original]", - "[process][pid]", - "[@timestamp]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true - } - } - - mutate { id => "mutate_replace_agent_type_beats_filebeat_syslog" - replace => { "[agent][type]" => "syslog" } } - } else if ([agent][type] == "metricbeat") { if (![event][hash]) { @@ -141,6 +117,43 @@ filter { # time gets parsed into the miscbeat.date field, this is redundant mutate { id => "mutate_miscbeat_remove_syslog_time" remove_field => [ "[miscbeat][time]" ] } + + # rename fields according to ECS + mutate { id => "mutate_rename_miscbeat_syslog" + rename => { "[miscbeat][ident]" => "[log][syslog][appname]" } + rename => { "[miscbeat][pid]" => "[log][syslog][procid]" } + rename => { "[miscbeat][pri]" => "[log][syslog][priority]" } + rename => { "[miscbeat][message]" => "[event][original]" } + rename => { "[miscbeat][host]" => "[log][syslog][hostname]" } + } + + if ([log][syslog][priority]) { + ruby { + id => "ruby_log_syslog_priority_convert" + code => " + if pri = event.get('[log][syslog][priority]').to_i then + event.set('[log][syslog][severity][code]', pri % 8) + event.set('[log][syslog][facility][code]', pri / 8) + end" + } + if ([log][syslog][severity][code]) { + translate { + id => "translate_sensor_syslog_severity_code" + source => "[log][syslog][severity][code]" + target => "[log][syslog][severity][name]" + dictionary_path => "/etc/syslog_severity_levels.yaml" + } + } + if ([log][syslog][facility][code]) { + translate { + id => "translate_sensor_syslog_facility_code" + source => "[log][syslog][facility][code]" + target => "[log][syslog][facility][name]" + dictionary_path => "/etc/syslog_facility_codes.yaml" + } + } + } + } if (![event][hash]) { diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 642066f9e..95817b9ca 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -78,7 +78,6 @@ filter { remove_tag => [ "beats_input_codec_plain_applied", "beats_input_raw_event", "_malcolm_auditbeat", - "_malcolm_filebeat_syslog", "_malcolm_heatbeat", "_malcolm_metricbeat", "_malcolm_miscbeat", diff --git a/sensor-iso/README.md b/sensor-iso/README.md index d87172b33..eee546b7d 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -1,3 +1,5 @@ +TODO: update for beats replaced by fluentd + # Hedgehog Linux ## Network Traffic Capture Appliance @@ -32,7 +34,6 @@ Hedgehog Linux is a Debian-based operating system built to * [arkime-capture](#arkime-capture): Arkime session forwarding * [metricbeat](#metricbeat): resource statistics forwarding * [auditbeat](#auditbeat): audit log forwarding - * [filebeat-syslog](#syslogbeat): syslog forwarding * [heatbeat](#heatbeat): temperature forwarding + [Autostart services](#ConfigAutostart) + [Zeek Intelligence Framework](#ZeekIntel) @@ -297,12 +298,6 @@ The sensor uses [auditbeat](https://www.elastic.co/products/beats/auditbeat) to The sensor implements STIG (Security Technical Implementation Guidelines) rules according to DISA RHEL 7 STIG V1 R1, ported to a Debian 9 base platform. Enabling audit log forwarding via auditbeat is required to satisfy the requirements regarding forwarding audit logs to a remote log server as defined in that specification. -### filebeat-syslog: syslog forwarding - -The sensor uses [filebeat's syslog input](https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-input-syslog.html) to forward the sensor's system logs to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. - -Enabling syslog forwarding via filebeat is required to satisfy the STIG requirements regarding sending system logs to a remote log server as defined in that specification. - ### heatbeat: temperature forwarding The sensor employs a custom agent using the beats protocol to forward hardware metrics such as CPU and storage device temperatures, system voltages, and fan speeds (when applicable) to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. @@ -325,7 +320,6 @@ Despite configuring capture and/or forwarder services as described in previous s * **AUTOSTART_PRUNE_PCAP** – storage space monitor to ensure that PCAP files do not consume more than 90% of the total size of the storage volume to which PCAP files are written * **AUTOSTART_SURICATA** - [Suricata](https://suricata.io/) traffic analysis engine * **AUTOSTART_SURICATA_UPDATES** - Rule update service for Suricata (requires sensor to be connected to the internet) -* **AUTOSTART_SYSLOGBEAT** – filebeat [system log forwarder](#syslogbeat) * *AUTOSTART_TCPDUMP* – [tcpdump](https://www.tcpdump.org/) PCAP engine for saving packet capture (PCAP) files * **AUTOSTART_ZEEK** – [Zeek](https://www.zeek.org/) traffic analysis engine @@ -352,7 +346,6 @@ beats:filebeat RUNNING pid 14460, uptime 8 days, 20:22:32 beats:heatbeat RUNNING pid 14481, uptime 8 days, 20:22:32 beats:metricbeat RUNNING pid 14476, uptime 8 days, 20:22:32 beats:sensors RUNNING pid 14484, uptime 8 days, 20:22:32 -beats:syslogbeat RUNNING pid 14471, uptime 8 days, 20:22:32 clamav:clamav-service RUNNING pid 14454, uptime 8 days, 20:22:32 clamav:clamav-updates RUNNING pid 14450, uptime 8 days, 20:22:32 arkime:arkime-capture RUNNING pid 14432, uptime 8 days, 20:22:32 diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 762f25ae4..0c0571882 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -122,7 +122,6 @@ export AUTOSTART_PRUNE_PCAP=false export AUTOSTART_PRUNE_ZEEK=false export AUTOSTART_SURICATA=false export AUTOSTART_SURICATA_UPDATES=false -export AUTOSTART_SYSLOGBEAT=false export AUTOSTART_TCPDUMP=false export AUTOSTART_ZEEK=false diff --git a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml b/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml deleted file mode 100644 index f319f42dc..000000000 --- a/sensor-iso/interface/sensor_ctl/filebeat-syslog/filebeat-syslog.yml +++ /dev/null @@ -1,26 +0,0 @@ -filebeat.inputs: -- type: syslog - protocol.udp: - host: "127.0.0.1:9514" - -#================================ General ====================================== -fields_under_root: true - -processors: - - add_tags: - tags: [_malcolm_beats, _malcolm_filebeat_syslog] - -#================================ Outputs ====================================== - -#-------------------------- Logstash Output ------------------------------------ -output.logstash: - hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] - ssl.enabled: ${BEAT_LS_SSL:false} - ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] - ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" - ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" - ssl.supported_protocols: "TLSv1.2" - ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/filebeat-syslog/sensor_filebeat-syslog_local.sh b/sensor-iso/interface/sensor_ctl/filebeat-syslog/sensor_filebeat-syslog_local.sh deleted file mode 100755 index 2ae0a7e5b..000000000 --- a/sensor-iso/interface/sensor_ctl/filebeat-syslog/sensor_filebeat-syslog_local.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -# force-navigate to script directory (containing config file) -[[ "$(uname -s)" = 'Darwin' ]] && REALPATH=grealpath || REALPATH=realpath -[[ "$(uname -s)" = 'Darwin' ]] && DIRNAME=gdirname || DIRNAME=dirname -if ! (type "$REALPATH" && type "$DIRNAME") > /dev/null; then - echo "$(basename "${BASH_SOURCE[0]}") requires $REALPATH and $DIRNAME" - exit 1 -fi -SCRIPT_PATH="$($DIRNAME $($REALPATH -e "${BASH_SOURCE[0]}"))" -pushd "$SCRIPT_PATH" >/dev/null 2>&1 - -mkdir -p "$SCRIPT_PATH/data" - -filebeat --path.home "$SCRIPT_PATH" --path.config "$SCRIPT_PATH" --path.data "$SCRIPT_PATH/data" -c "$SCRIPT_PATH/filebeat-syslog.yml" --modules=system -e - -popd >/dev/null 2>&1 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf index ecf81cc03..808634ef4 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf @@ -1,5 +1,5 @@ [group:beats] -programs=filebeat,syslogbeat,metricbeat,auditbeat,heatbeat,sensors +programs=filebeat,metricbeat,auditbeat,heatbeat,sensors [program:filebeat] environment=ZEEK_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/logs/current,SURICATA_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/suricata @@ -11,15 +11,6 @@ killasgroup=true autostart=%(ENV_AUTOSTART_FILEBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/filebeat -[program:syslogbeat] -command=bash -l %(ENV_SUPERVISOR_PATH)s/filebeat-syslog/sensor_filebeat-syslog_local.sh -startsecs=5 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_SYSLOGBEAT)s -directory=%(ENV_SUPERVISOR_PATH)s/filebeat-syslog - [program:metricbeat] command=bash -l %(ENV_SUPERVISOR_PATH)s/metricbeat/sensor_metricbeat_local.sh startsecs=5 diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index cf2d52b45..f8b9ee246 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -58,14 +58,12 @@ class Constants: AUDITBEAT = 'auditbeat' HEATBEAT = 'heatbeat' # protologbeat to log temperature and other misc. stuff MISCBEAT = 'miscbeat' # protologbeat to log from fluent-bit as we investigate that tool - SYSLOGBEAT = 'filebeat-syslog' # another filebeat instance for syslog ARKIMECAP = 'arkime-capture' BEAT_DIR = { FILEBEAT: f'/opt/sensor/sensor_ctl/{FILEBEAT}', METRICBEAT: f'/opt/sensor/sensor_ctl/{METRICBEAT}', AUDITBEAT: f'/opt/sensor/sensor_ctl/{AUDITBEAT}', - SYSLOGBEAT: f'/opt/sensor/sensor_ctl/{SYSLOGBEAT}', HEATBEAT: f'/opt/sensor/sensor_ctl/{HEATBEAT}', MISCBEAT: f'/opt/sensor/sensor_ctl/{MISCBEAT}', } @@ -74,12 +72,11 @@ class Constants: FILEBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[FILEBEAT]}" --path.config "{BEAT_DIR[FILEBEAT]}" --path.data "{BEAT_DIR[FILEBEAT]}/data" --path.logs "{BEAT_DIR[FILEBEAT]}/logs" -c "{BEAT_DIR[FILEBEAT]}/{FILEBEAT}.yml"', METRICBEAT: f'{METRICBEAT} --path.home "{BEAT_DIR[METRICBEAT]}" --path.config "{BEAT_DIR[METRICBEAT]}" --path.data "{BEAT_DIR[METRICBEAT]}/data" --path.logs "{BEAT_DIR[METRICBEAT]}/logs" -c "{BEAT_DIR[METRICBEAT]}/{METRICBEAT}.yml"', AUDITBEAT: f'{AUDITBEAT} --path.home "{BEAT_DIR[AUDITBEAT]}" --path.config "{BEAT_DIR[AUDITBEAT]}" --path.data "{BEAT_DIR[AUDITBEAT]}/data" --path.logs "{BEAT_DIR[AUDITBEAT]}/logs" -c "{BEAT_DIR[AUDITBEAT]}/{AUDITBEAT}.yml"', - SYSLOGBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[SYSLOGBEAT]}" --path.config "{BEAT_DIR[SYSLOGBEAT]}" --path.data "{BEAT_DIR[SYSLOGBEAT]}/data" --path.logs "{BEAT_DIR[SYSLOGBEAT]}/logs" -c "{BEAT_DIR[SYSLOGBEAT]}/{SYSLOGBEAT}.yml"', HEATBEAT: f'protologbeat --path.home "{BEAT_DIR[HEATBEAT]}" --path.config "{BEAT_DIR[HEATBEAT]}" --path.data "{BEAT_DIR[HEATBEAT]}/data" --path.logs "{BEAT_DIR[HEATBEAT]}/logs" -c "{BEAT_DIR[HEATBEAT]}/protologbeat.yml"', MISCBEAT: f'protologbeat --path.home "{BEAT_DIR[MISCBEAT]}" --path.config "{BEAT_DIR[MISCBEAT]}" --path.data "{BEAT_DIR[MISCBEAT]}/data" --path.logs "{BEAT_DIR[MISCBEAT]}/logs" -c "{BEAT_DIR[MISCBEAT]}/protologbeat.yml"', } - # specific to beats forwarded to logstash (eg., filebeat, metricbeat, auditbeat, filebeat-syslog) + # specific to beats forwarded to logstash (eg., filebeat, metricbeat, auditbeat, etc.) BEAT_LS_HOST = 'BEAT_LS_HOST' BEAT_LS_PORT = 'BEAT_LS_PORT' BEAT_LS_SSL = 'BEAT_LS_SSL' @@ -124,7 +121,6 @@ class Constants: MSG_CONFIG_FILEBEAT = (f'{FILEBEAT}', f'Configure Zeek log forwarding via {FILEBEAT}') MSG_CONFIG_METRICBEAT = (f'{METRICBEAT}', f'Configure resource metrics forwarding via {METRICBEAT}') MSG_CONFIG_AUDITBEAT = (f'{AUDITBEAT}', f'Configure audit log forwarding via {AUDITBEAT}') - MSG_CONFIG_SYSLOGBEAT = (f'{SYSLOGBEAT}', f'Configure syslog forwarding via {FILEBEAT}') MSG_CONFIG_HEATBEAT = (f'{HEATBEAT}', f'Configure hardware metrics (temperature, etc.) forwarding via protologbeat') MSG_CONFIG_MISCBEAT = (f'{MISCBEAT}', f'Configure miscellaneous log forwarding via protologbeat') MSG_OVERWRITE_CONFIG = '{} is already configured, overwrite current settings?' @@ -807,7 +803,6 @@ def main(): Constants.MSG_CONFIG_FILEBEAT, Constants.MSG_CONFIG_METRICBEAT, Constants.MSG_CONFIG_AUDITBEAT, - Constants.MSG_CONFIG_SYSLOGBEAT, Constants.MSG_CONFIG_HEATBEAT, Constants.MSG_CONFIG_MISCBEAT, ], @@ -900,7 +895,6 @@ def main(): (fwd_mode == Constants.FILEBEAT) or (fwd_mode == Constants.METRICBEAT) or (fwd_mode == Constants.AUDITBEAT) - or (fwd_mode == Constants.SYSLOGBEAT) or (fwd_mode == Constants.HEATBEAT) or (fwd_mode == Constants.MISCBEAT) ): From d8b82b85006a0da58f380dc3cbdcc6de747d89a4 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 10 Jun 2022 08:04:34 -0600 Subject: [PATCH 054/122] allow non-root fluent-bit to access audit.log for audit auditing --- .../config/hooks/normal/0991-security-performance.hook.chroot | 1 + .../interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot index d3977cc27..a4af28bd8 100755 --- a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot +++ b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot @@ -120,6 +120,7 @@ EOF # tweak some auditd settings sed -r -i "s/((disk_full_action|disk_error_action)\s*=\s*).*/\1 SYSLOG/" /etc/audit/auditd.conf +sed -r -i "s/(log_group\s*=\s*).*/\1 sensor/" /etc/audit/auditd.conf sed -r -i "s/(network_failure_action\s*=\s*).*/\1 syslog/" /etc/audit/audisp-remote.conf # tweak some apparmor settings (allow clamd to scan) diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf index 4591b949c..69bc82870 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf @@ -1,5 +1,6 @@ [program:fluentbit-syslog] command=/opt/fluent-bit/bin/fluent-bit + -R /etc/fluent-bit/parsers.conf -i syslog -p Mode=udp -p Listen=127.0.0.1 From 5da3e1cc2fb4fa8502be01495acfc920b59c20c9 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 10 Jun 2022 10:34:56 -0600 Subject: [PATCH 055/122] more work in progress in beats -> fluentbit (removing auditbeat) --- README.md | 4 +- .../beats/auditbeat-file-integrity.json | 233 ----- .../composable/component/auditd.json | 935 ------------------ .../composable/component/miscbeat.json | 51 +- .../templates/malcolm_beats_template.json | 1 - logstash/pipelines/beats/11_beats_logs.conf | 125 ++- logstash/pipelines/beats/98_finalize.conf | 1 - scripts/beats/.gitignore | 3 - scripts/beats/README.md | 183 ---- scripts/beats/beat_common.py | 759 -------------- scripts/beats/beat_config.py | 92 -- scripts/beats/beat_run.py | 80 -- scripts/beats/linux_vm_example/Vagrantfile | 89 -- scripts/beats/linux_vm_example/audit.rules | 146 --- scripts/beats/linux_vm_example/auditbeat.yml | 154 --- scripts/beats/linux_vm_example/filebeat.yml | 14 - scripts/beats/linux_vm_example/metricbeat.yml | 44 - scripts/beats/linux_vm_example/packetbeat.yml | 87 -- ..._Windows_Forwarder_Download_and_Config.ps1 | 193 ---- scripts/beats/windows_vm_example/Vagrantfile | 94 -- .../beats/windows_vm_example/auditbeat.yml | 79 -- .../beats/windows_vm_example/metricbeat.yml | 65 -- .../beats/windows_vm_example/packetbeat.yml | 90 -- .../beats/windows_vm_example/winlogbeat.yml | 43 - sensor-iso/README.md | 19 +- .../normal/0910-sensor-build.hook.chroot | 8 +- .../0991-security-performance.hook.chroot | 8 + .../sensor_ctl/auditbeat/auditbeat.yml | 311 ------ .../auditbeat/sensor_auditbeat_local.sh | 19 - .../interface/sensor_ctl/control_vars.conf | 7 +- .../sensor_ctl/supervisor.d/beats.conf | 11 +- .../supervisor.d/fluentbit-auditlog.conf | 19 + .../supervisor.d/fluentbit-kmsg.conf | 13 + .../supervisor.d/fluentbit-metrics.conf | 20 +- .../supervisor.d/fluentbit-netif.template | 3 +- .../supervisor.d/fluentbit-syslog.conf | 1 + .../sensor_ctl/supervisor.d/suricata.conf | 4 +- shared/bin/configure-capture.py | 8 +- shared/bin/sensor-init.sh | 4 + 39 files changed, 194 insertions(+), 3826 deletions(-) delete mode 100644 dashboards/dashboards/beats/auditbeat-file-integrity.json delete mode 100644 dashboards/templates/composable/component/auditd.json delete mode 100644 scripts/beats/.gitignore delete mode 100644 scripts/beats/README.md delete mode 100644 scripts/beats/beat_common.py delete mode 100755 scripts/beats/beat_config.py delete mode 100755 scripts/beats/beat_run.py delete mode 100644 scripts/beats/linux_vm_example/Vagrantfile delete mode 100644 scripts/beats/linux_vm_example/audit.rules delete mode 100644 scripts/beats/linux_vm_example/auditbeat.yml delete mode 100644 scripts/beats/linux_vm_example/filebeat.yml delete mode 100644 scripts/beats/linux_vm_example/metricbeat.yml delete mode 100644 scripts/beats/linux_vm_example/packetbeat.yml delete mode 100644 scripts/beats/windows_vm_example/Malcolm_Windows_Forwarder_Download_and_Config.ps1 delete mode 100644 scripts/beats/windows_vm_example/Vagrantfile delete mode 100644 scripts/beats/windows_vm_example/auditbeat.yml delete mode 100644 scripts/beats/windows_vm_example/metricbeat.yml delete mode 100644 scripts/beats/windows_vm_example/packetbeat.yml delete mode 100644 scripts/beats/windows_vm_example/winlogbeat.yml delete mode 100644 sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml delete mode 100755 sensor-iso/interface/sensor_ctl/auditbeat/sensor_auditbeat_local.sh create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-auditlog.conf create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-kmsg.conf diff --git a/README.md b/README.md index dcaa6420c..6fb979df9 100644 --- a/README.md +++ b/README.md @@ -3513,7 +3513,7 @@ The Malcolm aggregator base operating system claims the following exceptions to | 14 | [SV-86705r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72081) | The operating system must shut down upon audit processing failure, unless availability is an overriding concern. If availability is a concern, the system must alert the designated staff (System Administrator [SA] and Information System Security Officer [ISSO] at a minimum) in the event of an audit processing failure. | As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. | | 15 | [SV-86713r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72089) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer ISSO (at a minimum) when allocated audit record storage volume reaches 75% of the repository maximum audit record storage capacity. | same as above | | 16 | [SV-86715r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72093) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer (ISSO) (at a minimum) when the threshold for the repository maximum audit record storage capacity is reached. | same as above | -| 17 | [SV-86597r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71973) | A file integrity tool must verify the baseline operating system configuration at least weekly. | This functionality is not configured by default, but it could be configured post-install using [Auditbeat](https://www.elastic.co/products/beats/auditbeat) or `aide` | +| 17 | [SV-86597r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71973) | A file integrity tool must verify the baseline operating system configuration at least weekly. | This functionality is not configured by default, but it could be configured post-install using `aide` | | 18 | [SV-86697r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72073) | The file integrity tool must use FIPS 140-2 approved cryptographic hashes for validating file contents and directories. | same as above | | 19 | [SV-86707r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72083) | The operating system must off-load audit records onto a different system or media from the system being audited. | same as above | | 20 | [SV-86709r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72085) | The operating system must encrypt the transfer of audit records off-loaded onto a different system or media from the system being audited. | same as above | @@ -3574,7 +3574,7 @@ The Malcolm aggregator base operating system claims exceptions from the recommen **7.2.4 Log Suspicious Packets**, **7.2.7 Enable RFC-recommended Source Route Validation**, **7.4.1 Install TCP Wrappers** - As Malcolm may operate as a network traffic capture appliance sniffing packets on a network interface configured in promiscuous mode, these recommendations do not apply. -**8.4.1 Install aide package** and **8.4.2 Implement Periodic Execution of File Integrity** - This functionality is not configured by default, but it could be configured post-install using [Auditbeat](https://www.elastic.co/products/beats/auditbeat) or `aide`. +**8.4.1 Install aide package** and **8.4.2 Implement Periodic Execution of File Integrity** - This functionality is not configured by default, but it could be configured post-install using `aide`. **8.1.1.2 Disable System on Audit Log Full**, **8.1.1.3 Keep All Auditing Information**, **8.1.1.5 Ensure set remote_server for audit service**, **8.1.1.6 Ensure enable_krb5 set to yes for remote audit service**, **8.1.1.7 Ensure set action for audit storage volume is fulled**, **8.1.1.9 Set space left for auditd service**, a few other audit-related items under section **8.1**, **8.2.5 Configure rsyslog to Send Logs to a Remote Log Host** - As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. `auditd` is set up to syslog when its local storage capacity is reached. diff --git a/dashboards/dashboards/beats/auditbeat-file-integrity.json b/dashboards/dashboards/beats/auditbeat-file-integrity.json deleted file mode 100644 index eca3453b3..000000000 --- a/dashboards/dashboards/beats/auditbeat-file-integrity.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Actions", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Actions\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 5, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"extendRange\": false, \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": true, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": true, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"24\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" - }, - "id": "AV0tVcg6g1PYniApZa-v-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Events Over Time", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Events Over Time\", \"type\": \"histogram\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"date_histogram\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"min_doc_count\": 1, \"customInterval\": \"2h\", \"interval\": \"auto\", \"field\": \"@timestamp\", \"extended_bounds\": {}}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 10, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"categoryAxes\": [{\"position\": \"bottom\", \"title\": {\"text\": \"@timestamp per 5 minutes\"}, \"style\": {}, \"scale\": {\"type\": \"linear\"}, \"type\": \"category\", \"id\": \"CategoryAxis-1\", \"show\": true, \"labels\": {\"truncate\": 100, \"show\": true}}], \"seriesParams\": [{\"drawLinesBetweenPoints\": true, \"data\": {\"id\": \"1\", \"label\": \"Count\"}, \"show\": \"true\", \"mode\": \"stacked\", \"showCircles\": true, \"type\": \"histogram\", \"valueAxis\": \"ValueAxis-1\"}], \"addLegend\": true, \"times\": [], \"addTimeMarker\": false, \"type\": \"histogram\", \"legendPosition\": \"bottom\", \"grid\": {\"categoryLines\": false, \"style\": {\"color\": \"#eee\"}}, \"addTooltip\": true, \"valueAxes\": [{\"position\": \"left\", \"title\": {\"text\": \"Count\"}, \"style\": {}, \"name\": \"LeftAxis-1\", \"show\": true, \"type\": \"value\", \"id\": \"ValueAxis-1\", \"scale\": {\"defaultYExtents\": true, \"mode\": \"normal\", \"type\": \"linear\"}, \"labels\": {\"rotate\": 0, \"filter\": false, \"truncate\": 100, \"show\": true}}]}}" - }, - "id": "AV0tV05vg1PYniApZbA2-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Top Owners", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Top Owners\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.owner\", \"size\": 5, \"customLabel\": \"Owner\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "AV0tWL-Yg1PYniApZbCs-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Top Groups", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Top Groups\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.group\", \"size\": 5, \"customLabel\": \"Group\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "AV0tWSdXg1PYniApZbDU-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:updated OR event.action:attributes_modified\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Top Updated", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Top Updated\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "AV0tW0djg1PYniApZbGL-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"lucene\", \"query\": \"file.mode:/0..[2367]/ NOT file.type:symlink\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - World Writable File Count", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - World Writable File Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"file.inode\", \"customLabel\": \"World Writable Files\"}, \"enabled\": true}], \"params\": {\"type\": \"metric\", \"addTooltip\": true, \"addLegend\": false, \"metric\": {\"metricColorMode\": \"None\", \"colorSchema\": \"Green to Red\", \"invertColors\": false, \"useRange\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"23\", \"bgColor\": false, \"subText\": \"\"}, \"percentageMode\": false, \"labels\": {\"color\": \"black\", \"show\": false}}}}" - }, - "id": "AV0tY6jwg1PYniApZbRY-ecs", - "type": "visualization", - "updated_at": "2018-01-22T17:48:29.232Z", - "version": 7 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"meta\": {\"value\": \"file\", \"params\": {\"type\": \"phrase\", \"query\": \"file\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"file.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"file.type\": {\"type\": \"phrase\", \"query\": \"file\"}}}}], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Most Changed File by Count", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Most Changed File by Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most changed file by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 1, \"customLabel\": \"File\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" - }, - "id": "AV0tav8Ag1PYniApZbbK-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Most Common Mode by Count", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Most Common Mode by Count\", \"type\": \"metric\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Most common mode by count\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"group\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.mode\", \"size\": 1, \"customLabel\": \"Mode\"}, \"enabled\": true}], \"params\": {\"type\": \"gauge\", \"addTooltip\": true, \"addLegend\": false, \"gauge\": {\"autoExtend\": false, \"gaugeColorMode\": \"None\", \"invertColors\": false, \"colorsRange\": [{\"from\": 0, \"to\": 100}], \"type\": \"simple\", \"backStyle\": \"Full\", \"percentageMode\": false, \"scale\": {\"color\": \"#333\", \"width\": 2, \"show\": false, \"labels\": false}, \"colorSchema\": \"Green to Red\", \"verticalSplit\": false, \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"orientation\": \"vertical\", \"style\": {\"bgFill\": \"#000\", \"labelColor\": false, \"fontSize\": \"20\", \"bgColor\": false, \"subText\": \"\"}, \"labels\": {\"color\": \"black\", \"show\": true}}}}" - }, - "id": "AV0tbcUdg1PYniApZbe1-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - File Event Summary by Host", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - File Event Summary by Host\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"customLabel\": \"Total Events\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"host.name\", \"size\": 50, \"customLabel\": \"Host\"}, \"enabled\": true}, {\"type\": \"top_hits\", \"schema\": \"metric\", \"id\": \"5\", \"params\": {\"sortOrder\": \"desc\", \"aggregate\": \"concat\", \"sortField\": \"@timestamp\", \"size\": 1, \"field\": \"@timestamp\", \"customLabel\": \"Last Report\"}, \"enabled\": true}], \"params\": {\"showTotal\": true, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" - }, - "id": "AV0tc_xZg1PYniApZbnL-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:deleted\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Top Deleted", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Top Deleted\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "AV0tes4Eg1PYniApZbwV-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"event.action:created\"}}" - }, - "savedSearchId": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "title": "Auditbeat File Integrity - Top Created", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"Auditbeat File Integrity - Top Created\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"file.path\", \"size\": 10, \"customLabel\": \"Path\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": false, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "AV0te0TCg1PYniApZbw9-ecs", - "type": "visualization", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "columns": [ - "file.path", - "event.action" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"file_integrity\", \"params\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"file_integrity\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Auditbeat File Integrity - File Integrity Events", - "version": 1 - }, - "id": "a380a060-cb44-11e7-9835-2f31fe08873b-ecs", - "type": "search", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - }, - { - "attributes": { - "description": "Monitor file integrity events for Malcolm sensors", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"AV0tVcg6g1PYniApZa-v-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 2, \"i\": \"1\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tV05vg1PYniApZbA2-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"2\", \"gridData\": {\"w\": 7, \"i\": \"2\", \"h\": 6, \"x\": 2, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tWL-Yg1PYniApZbCs-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"3\", \"gridData\": {\"w\": 3, \"i\": \"3\", \"h\": 3, \"x\": 9, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"AV0tWSdXg1PYniApZbDU-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 3, \"i\": \"4\", \"h\": 3, \"x\": 9, \"y\": 3}}, {\"type\": \"visualization\", \"id\": \"AV0tW0djg1PYniApZbGL-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 4, \"i\": \"5\", \"h\": 3, \"x\": 4, \"y\": 8}}, {\"type\": \"visualization\", \"id\": \"AV0tY6jwg1PYniApZbRY-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"6\", \"gridData\": {\"w\": 4, \"i\": \"6\", \"h\": 2, \"x\": 0, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tav8Ag1PYniApZbbK-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"7\", \"gridData\": {\"w\": 4, \"i\": \"7\", \"h\": 2, \"x\": 4, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tbcUdg1PYniApZbe1-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"8\", \"gridData\": {\"w\": 4, \"i\": \"8\", \"h\": 2, \"x\": 8, \"y\": 6}}, {\"type\": \"visualization\", \"id\": \"AV0tc_xZg1PYniApZbnL-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"9\", \"gridData\": {\"w\": 6, \"i\": \"9\", \"h\": 5, \"x\": 0, \"y\": 11}}, {\"type\": \"visualization\", \"id\": \"AV0tes4Eg1PYniApZbwV-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"10\", \"gridData\": {\"w\": 4, \"i\": \"10\", \"h\": 3, \"x\": 8, \"y\": 8}}, {\"type\": \"visualization\", \"id\": \"AV0te0TCg1PYniApZbw9-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"11\", \"gridData\": {\"w\": 4, \"i\": \"11\", \"h\": 3, \"x\": 0, \"y\": 8}}, {\"panelIndex\": \"12\", \"version\": \"6.2.4\", \"sort\": [\"@timestamp\", \"desc\"], \"gridData\": {\"w\": 6, \"i\": \"12\", \"h\": 5, \"x\": 6, \"y\": 11}, \"type\": \"search\", \"id\": \"a380a060-cb44-11e7-9835-2f31fe08873b-ecs\", \"columns\": [\"file.path\", \"event.action\"]}]", - "timeRestore": false, - "title": "Malcolm Sensor Auditbeat File Integrity - Overview", - "version": 1 - }, - "id": "AV0tXkjYg1PYniApZbKP-ecs", - "type": "dashboard", - "updated_at": "2018-01-22T15:54:25.278Z", - "version": 6 - } - ], - "version": "6.1.2" -} \ No newline at end of file diff --git a/dashboards/templates/composable/component/auditd.json b/dashboards/templates/composable/component/auditd.json deleted file mode 100644 index 50d58eb15..000000000 --- a/dashboards/templates/composable/component/auditd.json +++ /dev/null @@ -1,935 +0,0 @@ -{ - "template": { - "mappings": { - "properties": { - "auditd": { - "properties": { - "data": { - "properties": { - "a0": { - "ignore_above": 1024, - "type": "keyword" - }, - "a1": { - "ignore_above": 1024, - "type": "keyword" - }, - "a2": { - "ignore_above": 1024, - "type": "keyword" - }, - "a3": { - "ignore_above": 1024, - "type": "keyword" - }, - "a[0-3]": { - "ignore_above": 1024, - "type": "keyword" - }, - "acct": { - "ignore_above": 1024, - "type": "keyword" - }, - "acl": { - "ignore_above": 1024, - "type": "keyword" - }, - "action": { - "ignore_above": 1024, - "type": "keyword" - }, - "added": { - "ignore_above": 1024, - "type": "keyword" - }, - "addr": { - "ignore_above": 1024, - "type": "keyword" - }, - "apparmor": { - "ignore_above": 1024, - "type": "keyword" - }, - "arch": { - "ignore_above": 1024, - "type": "keyword" - }, - "argc": { - "ignore_above": 1024, - "type": "keyword" - }, - "audit_backlog_limit": { - "ignore_above": 1024, - "type": "keyword" - }, - "audit_backlog_wait_time": { - "ignore_above": 1024, - "type": "keyword" - }, - "audit_enabled": { - "ignore_above": 1024, - "type": "keyword" - }, - "audit_failure": { - "ignore_above": 1024, - "type": "keyword" - }, - "banners": { - "ignore_above": 1024, - "type": "keyword" - }, - "bool": { - "ignore_above": 1024, - "type": "keyword" - }, - "bus": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_fe": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_fi": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_fp": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_fver": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_pe": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_pi": { - "ignore_above": 1024, - "type": "keyword" - }, - "cap_pp": { - "ignore_above": 1024, - "type": "keyword" - }, - "capability": { - "ignore_above": 1024, - "type": "keyword" - }, - "cgroup": { - "ignore_above": 1024, - "type": "keyword" - }, - "changed": { - "ignore_above": 1024, - "type": "keyword" - }, - "cipher": { - "ignore_above": 1024, - "type": "keyword" - }, - "class": { - "ignore_above": 1024, - "type": "keyword" - }, - "cmd": { - "ignore_above": 1024, - "type": "keyword" - }, - "code": { - "ignore_above": 1024, - "type": "keyword" - }, - "compat": { - "ignore_above": 1024, - "type": "keyword" - }, - "daddr": { - "ignore_above": 1024, - "type": "keyword" - }, - "data": { - "ignore_above": 1024, - "type": "keyword" - }, - "default-context": { - "ignore_above": 1024, - "type": "keyword" - }, - "device": { - "ignore_above": 1024, - "type": "keyword" - }, - "dir": { - "ignore_above": 1024, - "type": "keyword" - }, - "direction": { - "ignore_above": 1024, - "type": "keyword" - }, - "dmac": { - "ignore_above": 1024, - "type": "keyword" - }, - "dport": { - "ignore_above": 1024, - "type": "keyword" - }, - "enforcing": { - "ignore_above": 1024, - "type": "keyword" - }, - "entries": { - "ignore_above": 1024, - "type": "keyword" - }, - "exit": { - "ignore_above": 1024, - "type": "keyword" - }, - "fam": { - "ignore_above": 1024, - "type": "keyword" - }, - "family": { - "ignore_above": 1024, - "type": "keyword" - }, - "fd": { - "ignore_above": 1024, - "type": "keyword" - }, - "fe": { - "ignore_above": 1024, - "type": "keyword" - }, - "feature": { - "ignore_above": 1024, - "type": "keyword" - }, - "fi": { - "ignore_above": 1024, - "type": "keyword" - }, - "file": { - "ignore_above": 1024, - "type": "keyword" - }, - "flags": { - "ignore_above": 1024, - "type": "keyword" - }, - "format": { - "ignore_above": 1024, - "type": "keyword" - }, - "fp": { - "ignore_above": 1024, - "type": "keyword" - }, - "fver": { - "ignore_above": 1024, - "type": "keyword" - }, - "grantors": { - "ignore_above": 1024, - "type": "keyword" - }, - "grp": { - "ignore_above": 1024, - "type": "keyword" - }, - "hook": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "icmp_type": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "igid": { - "ignore_above": 1024, - "type": "keyword" - }, - "img-ctx": { - "ignore_above": 1024, - "type": "keyword" - }, - "inif": { - "ignore_above": 1024, - "type": "keyword" - }, - "ino": { - "ignore_above": 1024, - "type": "keyword" - }, - "inode_gid": { - "ignore_above": 1024, - "type": "keyword" - }, - "inode_uid": { - "ignore_above": 1024, - "type": "keyword" - }, - "invalid_context": { - "ignore_above": 1024, - "type": "keyword" - }, - "ioctlcmd": { - "ignore_above": 1024, - "type": "keyword" - }, - "ip": { - "ignore_above": 1024, - "type": "keyword" - }, - "ipid": { - "ignore_above": 1024, - "type": "keyword" - }, - "ipx-net": { - "ignore_above": 1024, - "type": "keyword" - }, - "items": { - "ignore_above": 1024, - "type": "keyword" - }, - "iuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "kernel": { - "ignore_above": 1024, - "type": "keyword" - }, - "kind": { - "ignore_above": 1024, - "type": "keyword" - }, - "ksize": { - "ignore_above": 1024, - "type": "keyword" - }, - "laddr": { - "ignore_above": 1024, - "type": "keyword" - }, - "len": { - "ignore_above": 1024, - "type": "keyword" - }, - "list": { - "ignore_above": 1024, - "type": "keyword" - }, - "lport": { - "ignore_above": 1024, - "type": "keyword" - }, - "mac": { - "ignore_above": 1024, - "type": "keyword" - }, - "macproto": { - "ignore_above": 1024, - "type": "keyword" - }, - "maj": { - "ignore_above": 1024, - "type": "keyword" - }, - "major": { - "ignore_above": 1024, - "type": "keyword" - }, - "minor": { - "ignore_above": 1024, - "type": "keyword" - }, - "model": { - "ignore_above": 1024, - "type": "keyword" - }, - "msg": { - "ignore_above": 1024, - "type": "keyword" - }, - "nargs": { - "ignore_above": 1024, - "type": "keyword" - }, - "net": { - "ignore_above": 1024, - "type": "keyword" - }, - "new": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-chardev": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-disk": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-enabled": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-fs": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-level": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-log_passwd": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-mem": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-net": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-range": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-rng": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-role": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-seuser": { - "ignore_above": 1024, - "type": "keyword" - }, - "new-vcpu": { - "ignore_above": 1024, - "type": "keyword" - }, - "new_gid": { - "ignore_above": 1024, - "type": "keyword" - }, - "new_lock": { - "ignore_above": 1024, - "type": "keyword" - }, - "new_pe": { - "ignore_above": 1024, - "type": "keyword" - }, - "new_pi": { - "ignore_above": 1024, - "type": "keyword" - }, - "new_pp": { - "ignore_above": 1024, - "type": "keyword" - }, - "nlnk-fam": { - "ignore_above": 1024, - "type": "keyword" - }, - "nlnk-grp": { - "ignore_above": 1024, - "type": "keyword" - }, - "nlnk-pid": { - "ignore_above": 1024, - "type": "keyword" - }, - "oauid": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_gid": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_uid": { - "ignore_above": 1024, - "type": "keyword" - }, - "ocomm": { - "ignore_above": 1024, - "type": "keyword" - }, - "oflag": { - "ignore_above": 1024, - "type": "keyword" - }, - "old": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-auid": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-chardev": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-disk": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-enabled": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-fs": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-level": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-log_passwd": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-mem": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-net": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-range": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-rng": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-role": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-ses": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-seuser": { - "ignore_above": 1024, - "type": "keyword" - }, - "old-vcpu": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_enforcing": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_lock": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_pe": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_pi": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_pp": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_prom": { - "ignore_above": 1024, - "type": "keyword" - }, - "old_val": { - "ignore_above": 1024, - "type": "keyword" - }, - "op": { - "ignore_above": 1024, - "type": "keyword" - }, - "opid": { - "ignore_above": 1024, - "type": "keyword" - }, - "oses": { - "ignore_above": 1024, - "type": "keyword" - }, - "outif": { - "ignore_above": 1024, - "type": "keyword" - }, - "parent": { - "ignore_above": 1024, - "type": "keyword" - }, - "per": { - "ignore_above": 1024, - "type": "keyword" - }, - "perm": { - "ignore_above": 1024, - "type": "keyword" - }, - "perm_mask": { - "ignore_above": 1024, - "type": "keyword" - }, - "permissive": { - "ignore_above": 1024, - "type": "keyword" - }, - "pfs": { - "ignore_above": 1024, - "type": "keyword" - }, - "printer": { - "ignore_above": 1024, - "type": "keyword" - }, - "prom": { - "ignore_above": 1024, - "type": "keyword" - }, - "proto": { - "ignore_above": 1024, - "type": "keyword" - }, - "qbytes": { - "ignore_above": 1024, - "type": "keyword" - }, - "range": { - "ignore_above": 1024, - "type": "keyword" - }, - "reason": { - "ignore_above": 1024, - "type": "keyword" - }, - "removed": { - "ignore_above": 1024, - "type": "keyword" - }, - "res": { - "ignore_above": 1024, - "type": "keyword" - }, - "resrc": { - "ignore_above": 1024, - "type": "keyword" - }, - "rport": { - "ignore_above": 1024, - "type": "keyword" - }, - "sauid": { - "ignore_above": 1024, - "type": "keyword" - }, - "scontext": { - "ignore_above": 1024, - "type": "keyword" - }, - "selected-context": { - "ignore_above": 1024, - "type": "keyword" - }, - "seperm": { - "ignore_above": 1024, - "type": "keyword" - }, - "seperms": { - "ignore_above": 1024, - "type": "keyword" - }, - "seqno": { - "ignore_above": 1024, - "type": "keyword" - }, - "seresult": { - "ignore_above": 1024, - "type": "keyword" - }, - "ses": { - "ignore_above": 1024, - "type": "keyword" - }, - "seuser": { - "ignore_above": 1024, - "type": "keyword" - }, - "sig": { - "ignore_above": 1024, - "type": "keyword" - }, - "sigev_signo": { - "ignore_above": 1024, - "type": "keyword" - }, - "smac": { - "ignore_above": 1024, - "type": "keyword" - }, - "socket": { - "properties": { - "addr": { - "ignore_above": 1024, - "type": "keyword" - }, - "family": { - "ignore_above": 1024, - "type": "keyword" - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "port": { - "ignore_above": 1024, - "type": "keyword" - }, - "saddr": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "spid": { - "ignore_above": 1024, - "type": "keyword" - }, - "sport": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - }, - "subj": { - "ignore_above": 1024, - "type": "keyword" - }, - "success": { - "ignore_above": 1024, - "type": "keyword" - }, - "syscall": { - "ignore_above": 1024, - "type": "keyword" - }, - "table": { - "ignore_above": 1024, - "type": "keyword" - }, - "tclass": { - "ignore_above": 1024, - "type": "keyword" - }, - "tcontext": { - "ignore_above": 1024, - "type": "keyword" - }, - "terminal": { - "ignore_above": 1024, - "type": "keyword" - }, - "tty": { - "ignore_above": 1024, - "type": "keyword" - }, - "unit": { - "ignore_above": 1024, - "type": "keyword" - }, - "uri": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "val": { - "ignore_above": 1024, - "type": "keyword" - }, - "ver": { - "ignore_above": 1024, - "type": "keyword" - }, - "virt": { - "ignore_above": 1024, - "type": "keyword" - }, - "vm": { - "ignore_above": 1024, - "type": "keyword" - }, - "vm-ctx": { - "ignore_above": 1024, - "type": "keyword" - }, - "vm-pid": { - "ignore_above": 1024, - "type": "keyword" - }, - "watch": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "message_type": { - "ignore_above": 1024, - "type": "keyword" - }, - "paths": { - "properties": { - "dev": { - "ignore_above": 1024, - "type": "keyword" - }, - "inode": { - "ignore_above": 1024, - "type": "keyword" - }, - "item": { - "ignore_above": 1024, - "type": "keyword" - }, - "mode": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "nametype": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_level": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_role": { - "ignore_above": 1024, - "type": "keyword" - }, - "obj_user": { - "ignore_above": 1024, - "type": "keyword" - }, - "objtype": { - "ignore_above": 1024, - "type": "keyword" - }, - "ogid": { - "ignore_above": 1024, - "type": "keyword" - }, - "ouid": { - "ignore_above": 1024, - "type": "keyword" - }, - "rdev": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "result": { - "ignore_above": 1024, - "type": "keyword" - }, - "sequence": { - "type": "long" - }, - "session": { - "ignore_above": 1024, - "type": "keyword" - }, - "summary": { - "properties": { - "actor": { - "properties": { - "primary": { - "ignore_above": 1024, - "type": "keyword" - }, - "secondary": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "how": { - "ignore_above": 1024, - "type": "keyword" - }, - "object": { - "properties": { - "primary": { - "ignore_above": 1024, - "type": "keyword" - }, - "secondary": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } - } - } -} diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index bde855a4e..65b407758 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -4,22 +4,43 @@ "properties": { "miscbeat": { "properties": { - "cpu_p": { "type": "float" }, - "date": { "type": "date" }, "exec": { "type": "keyword", "ignore_above": 1024 }, - "Mem.free": { "type": "long" }, - "Mem.total": { "type": "long" }, - "Mem.used": { "type": "long" }, - "Mem.used_p": { "type": "float" }, - "message": { "type": "keyword", "ignore_above": 1024 }, - "module": { "type": "keyword" }, - "read_size": { "type": "long" }, - "Swap.free": { "type": "long" }, - "Swap.total": { "type": "long" }, - "Swap.used": { "type": "long" }, - "system_p": { "type": "float" }, - "user_p": { "type": "float" }, - "write_size": { "type": "long" } + "cpu": { + "properties": { + "cpu_p": { "type": "float" }, + "system_p": { "type": "float" }, + "user_p": { "type": "float" } + } + }, + "mem": { + "properties": { + "Mem.free": { "type": "long" }, + "Mem.total": { "type": "long" }, + "Mem.used": { "type": "long" }, + "Swap.free": { "type": "long" }, + "Swap.total": { "type": "long" }, + "Swap.used": { "type": "long" }, + "Mem.used_p": { "type": "float" } + } + }, + "disk": { + "properties": { + "read_size": { "type": "long" }, + "write_size": { "type": "long" } + } + }, + "netif": { + "properties": { + } + }, + "syslog": { + "properties": { + } + }, + "auditlog": { + "properties": { + } + } } } } diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 4dbcda810..38e55d04c 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -21,7 +21,6 @@ "ecs_url", "ecs_user", "ecs_user_agent", - "custom_auditd", "custom_heatbeat", "custom_miscbeat", "custom_system" diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 82bebbd77..463a67d7a 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -1,9 +1,17 @@ +######################## # parsing of logs/metrics specific to the operation of +# Malcolm and Hedgehog Linux itself (i.e., not captured +# network traffic metadata, but operational metadata) +# +# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. +####################### + filter { if ([agent][type] == "filebeat") and ([event][module] == "nginx") { + ############################################################################################################################# + # nginx access and error logs - # event.hash will be done based on event.original in 98_finalize.conf - + # parse log fields if ([event][dataset] == "nginx.access") { grok { id => "grok_beat_nginx_access" @@ -21,6 +29,7 @@ filter { } } + # save nginx log timestamp over @timestamp if ([timestamp]) { date { id => "date_beats_nginx_timestamp" @@ -30,32 +39,13 @@ filter { } } + # set agent.type to "nginx" mutate { id => "mutate_replace_agent_type_beats_filebeat_nginx" replace => { "[agent][type]" => "nginx" } } - } else if ([agent][type] == "auditbeat") { - - if (![event][hash]) { - fingerprint { - id => "fingerprint_malcolm_beats_auditbeat" - source => [ "[host][name]", - "[event][module]", - "[event][kind]", - "[event][category]", - "[event][action]", - "[auditd][session]", - "[auditd][sequence]", - "[process][pid]", - "[@timestamp]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true - } - } - } else if ([agent][type] == "metricbeat") { + ############################################################################################################################# + # metricbeat statistics (todo: soon to be replaced by fluentbit) if (![event][hash]) { fingerprint { @@ -76,6 +66,8 @@ filter { } } else if ("_malcolm_heatbeat" in [tags]) { + ############################################################################################################################# + # sensor temperature statistics (todo: investigate use of "sensors" to see if fluentbit's "therm" module is better or not) if (![event][hash]) { fingerprint { @@ -97,13 +89,17 @@ filter { } } else if ("_malcolm_miscbeat" in [tags]) { + ############################################################################################################################# + # misc. sensor metrics and logs from fluentbit received by protologbeat TCP + # set event.module to whatever we set "module" to when running fluentbit if ([miscbeat][module]) { mutate { id => "mutate_replace_event_module_miscbeat_module" replace => { "[event][module]" => "%{[miscbeat][module]}" } remove_field => [ "[miscbeat][module]" ] } } + # convert fluentbit's date field and save it to @timestamp if ([miscbeat][date]) { date { id => "date_beats_miscbeat_date" @@ -113,20 +109,50 @@ filter { } } - if ([event][module] == "syslog") { + if ([miscbeat][kmsg]) { + #------------------------------------------------- + # kmsg - https://docs.fluentbit.io/manual/pipeline/inputs/kernel-logs + mutate { id => "mutate_rename_miscbeat_kmsg" + rename => { "[miscbeat][kmsg][msg]" => "[event][original]" } } + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_kmsg" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][kmsg][sequence]", + "[miscbeat][kmsg][priority]", + "[event][original]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + } # if ([miscbeat][kmsg]) + + if ([miscbeat][syslog]) { + #------------------------------------------------- + # syslog - https://docs.fluentbit.io/manual/pipeline/inputs/syslog + # time gets parsed into the miscbeat.date field, this is redundant mutate { id => "mutate_miscbeat_remove_syslog_time" - remove_field => [ "[miscbeat][time]" ] } + remove_field => [ "[miscbeat][syslog][time]" ] } - # rename fields according to ECS + # rename syslog fields according to ECS + # https://www.elastic.co/guide/en/ecs/current/ecs-log.html#field-log-syslog mutate { id => "mutate_rename_miscbeat_syslog" - rename => { "[miscbeat][ident]" => "[log][syslog][appname]" } - rename => { "[miscbeat][pid]" => "[log][syslog][procid]" } - rename => { "[miscbeat][pri]" => "[log][syslog][priority]" } - rename => { "[miscbeat][message]" => "[event][original]" } - rename => { "[miscbeat][host]" => "[log][syslog][hostname]" } + rename => { "[miscbeat][syslog][ident]" => "[log][syslog][appname]" } + rename => { "[miscbeat][syslog][pid]" => "[log][syslog][procid]" } + rename => { "[miscbeat][syslog][pri]" => "[log][syslog][priority]" } + rename => { "[miscbeat][syslog][message]" => "[event][original]" } + rename => { "[miscbeat][syslog][host]" => "[log][syslog][hostname]" } } + # convert syslog "priority" number to "severity" and "facility" and map to human-readable names if ([log][syslog][priority]) { ruby { id => "ruby_log_syslog_priority_convert" @@ -154,23 +180,26 @@ filter { } } - } - - if (![event][hash]) { - fingerprint { - id => "fingerprint_malcolm_beats_miscbeat" - source => [ "[host][name]", - "[agent][type]", - "[event][module]", - "[@timestamp]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_syslog" + source => [ "[host][name]", + "[event][module]", + "[log][syslog][severity][code]", + "[log][syslog][facility][code]", + "[log][syslog][appname]", + "[event][original]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } } - } - } # event.module (nginx/auditd/etc.) + } # if ([miscbeat][syslog]) + + } # event type (nginx, heatbeat, metricbeat, miscbeat, etc) } \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 95817b9ca..bc47c3594 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -77,7 +77,6 @@ filter { mutate { id => "mutate_beats_tags_remove" remove_tag => [ "beats_input_codec_plain_applied", "beats_input_raw_event", - "_malcolm_auditbeat", "_malcolm_heatbeat", "_malcolm_metricbeat", "_malcolm_miscbeat", diff --git a/scripts/beats/.gitignore b/scripts/beats/.gitignore deleted file mode 100644 index 3b77c9e2e..000000000 --- a/scripts/beats/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.vagrant -data -logs diff --git a/scripts/beats/README.md b/scripts/beats/README.md deleted file mode 100644 index 296029a66..000000000 --- a/scripts/beats/README.md +++ /dev/null @@ -1,183 +0,0 @@ -NOTE: Now that Malcolm uses OpenSearch instead of ElasticSearch, the information in this document is out-of-date. A similar outcome can be achieved by forwarding to Logstash (which Malcolm still uses, for now). - -# Using Beats to forward host logs to Malcolm - -Because Malcolm uses components of the open source data analysis platform [Elastic Stack](https://www.elastic.co/elastic-stack), it can accept various host logs sent from [Beats](https://www.elastic.co/beats/#the-beats-family), Elastic Stack's lightweight data shippers. These Beats generally include prebuilt Kibana dashboards for each of their respective data sets. - -## Examples - -Some examples include: - -* [Auditbeat](https://www.elastic.co/beats/auditbeat) - - [`auditd` logs](https://www.elastic.co/guide/en/beats/auditbeat/master/auditbeat-module-auditd.html) on Linux hosts - - [file integrity monitoring](https://www.elastic.co/guide/en/beats/auditbeat/master/auditbeat-module-file_integrity.html) on Linux, macOS (Darwin) and Windows hosts - - [system state](https://www.elastic.co/guide/en/beats/auditbeat/master/auditbeat-module-system.html) including host, process, login, package, socket and user information on Linux, with some data sets supported on macOS and Windows hosts (apparently not available with the [Open Source Elastic license](https://www.elastic.co/subscriptions)) -* [Filebeat](https://www.elastic.co/beats/filebeat) - - [system logs](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html) (syslog and authentication logs) on Linux hosts - - log output from [many products](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html) across Beats-supported platforms - - arbitrary textual [log files](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html) -* [Metricbeat](https://www.elastic.co/beats/metricbeat) - - [system](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) resource utilization and process information - - metrics from [many products](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html) across Beats-supported platforms -* [Packetbeat](https://www.elastic.co/beats/packetbeat) - - host-based packet inspection for [many protocols](https://www.elastic.co/guide/en/beats/packetbeat/current/configuration-protocols.html) (supports `libpcap` on Linux, [macOS](https://formulae.brew.sh/formula/libpcap) and [Windows](https://nmap.org/npcap/); and `af_packet` on Linux) -* [Winlogbeat](https://www.elastic.co/downloads/beats/winlogbeat) -* [Custom](https://www.elastic.co/guide/en/beats/devguide/current/index.html) Beats -* [Community-contributed](https://www.elastic.co/guide/en/beats/devguide/current/community-beats.html) Beats - -## Convenience configuration scripts and sample configurations - -Two scripts are provided here for your convenience in configuring and running Beats to forward log data to Malcolm: [beat_config.py](./beat_config.py) and [beat_run.py](./beat_run.py). These Python scripts should run on Linux, macOS and Windows hosts with either Python 2 or Python 3. - -Sample configurations are also provided for several beats for [Linux](./linux_vm_example) and [Windows](./windows_vm_example) hosts, as well as `Vagrantfile`s for setting up and running [VirtualBox](https://www.virtualbox.org/) VMs under [Vagrant](https://www.vagrantup.com/intro). - -For further information, downloads, documentation or support for Beats, see the [Beats Platform Reference](https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html) or the [Beats category](https://discuss.elastic.co/c/elastic-stack/beats) on the Elastic forums. - -### Example: Windows configuration and run - -``` -PS C:\Program Files\winlogbeat> dir - - Directory: C:\Program Files\winlogbeat - -Mode LastWriteTime Length Name ----- ------------- ------ ---- -d----- 7/27/2020 8:49 AM kibana -d----- 7/27/2020 8:49 AM module --a---- 3/26/2020 5:33 AM 41 .build_hash.txt --a---- 7/27/2020 8:50 AM 25799 beat_common.py --a---- 7/27/2020 8:50 AM 2525 beat_config.py --a---- 7/27/2020 8:50 AM 2244 beat_run.py --a---- 3/26/2020 5:32 AM 163122 fields.yml --a---- 7/27/2020 8:49 AM 878 install-service-winlogbeat.ps1 --a---- 3/26/2020 4:44 AM 13675 LICENSE.txt --a---- 3/26/2020 4:44 AM 328580 NOTICE.txt --a---- 3/26/2020 5:33 AM 825 README.md --a---- 3/26/2020 5:33 AM 254 uninstall-service-winlogbeat.ps1 --a---- 3/26/2020 5:33 AM 47818752 winlogbeat.exe --a---- 3/26/2020 5:32 AM 47900 winlogbeat.reference.yml --a---- 7/27/2020 8:50 AM 1349 winlogbeat.yml - - -PS C:\Program Files\winlogbeat> .\beat_config.py -c .\winlogbeat.yml -b winlogbeat - -Append connectivity boilerplate to .\winlogbeat.yml? (y/N): y - -Created winlogbeat keystore - -Configure winlogbeat Elasticsearch connectivity? (Y/n): y - -Enter Elasticsearch connection protocol (http or https) [https]: https - -Enter Elasticsearch SSL verification (none (for self-signed certificates) or full) [none]: none - -Enter Elasticsearch connection host: 172.15.0.41:9200 - -Configure winlogbeat Kibana connectivity? (Y/n): y - -Enter Kibana connection protocol (http or https) [https]: https - -Enter Kibana SSL verification (none (for self-signed certificates) or full) [none]: none - -Enter Kibana connection host: 172.15.0.41:5601 - -Configure winlogbeat Kibana dashboards? (Y/n): y - -Enter directory containing Kibana dashboards [C:\Program Files\winlogbeat\kibana]: C:\Program Files\winlogbeat\kibana - -Enter HTTP/HTTPS server username: sensor -Enter password for sensor: -Enter password for sensor (again): - -Generated keystore for winlogbeat -BEAT_DASHBOARDS_SSL_VERIFY -BEAT_OS_HOST -BEAT_OS_PROTOCOL -BEAT_OS_SSL_VERIFY -BEAT_DASHBOARDS_HOST -BEAT_HTTP_PASSWORD -BEAT_HTTP_USERNAME -BEAT_DASHBOARDS_ENABLED -BEAT_DASHBOARDS_PATH -BEAT_DASHBOARDS_PROTOCOL - -PS C:\Program Files\winlogbeat> .\beat_run.py -c .\winlogbeat.yml -b winlogbeat - -2020-07-27T09:00:17.472-0700 INFO instance/beat.go:622 Home path: [C:\Program Files\winlogbeat] Config path: [C:\Program Files\winlogbeat] Data path: [C:\Program Files\winlogbeat] Logs path: [C:\Program Files\winlogbeat\logs] -2020-07-27T09:00:17.474-0700 INFO instance/beat.go:630 Beat ID: c38487f0-ea87-477b-aa93-376eb40949f4 -… -^C -KeyboardInterrupt -2020-07-27T09:00:24.783-0700 INFO instance/beat.go:445 winlogbeat stopped. -``` - -### Example: Linux configuration and run - -``` -root@vagrant:/opt/filebeat# ls -l -total 4 --rw------- 1 root root 431 Jul 27 16:08 filebeat.yml - -root@vagrant:/opt/filebeat# beat_config.py -c ./filebeat.yml -b filebeat - -Append connectivity boilerplate to ./filebeat.yml? (y/N): y - -Create symlink to module path /usr/share/filebeat/module as /opt/filebeat/module? (Y/n): y - -Created filebeat keystore - -Configure filebeat Elasticsearch connectivity? (Y/n): y - -Enter Elasticsearch connection protocol (http or https) [https]: https - -Enter Elasticsearch SSL verification (none (for self-signed certificates) or full) [none]: none - -Enter Elasticsearch connection host: 172.15.0.41:9200 - -Configure filebeat Kibana connectivity? (Y/n): y - -Enter Kibana connection protocol (http or https) [https]: https - -Enter Kibana SSL verification (none (for self-signed certificates) or full) [none]: none - -Enter Kibana connection host: 172.15.0.41:5601 - -Configure filebeat Kibana dashboards? (Y/n): y - -Enter directory containing Kibana dashboards [/usr/share/filebeat/kibana]: /usr/share/filebeat/kibana - -Enter HTTP/HTTPS server username: sensor -Enter password for sensor: -Enter password for sensor (again): - -Generated keystore for filebeat -BEAT_DASHBOARDS_PROTOCOL -BEAT_DASHBOARDS_SSL_VERIFY -BEAT_OS_PROTOCOL -BEAT_OS_SSL_VERIFY -BEAT_DASHBOARDS_ENABLED -BEAT_DASHBOARDS_PATH -BEAT_OS_HOST -BEAT_HTTP_PASSWORD -BEAT_HTTP_USERNAME -BEAT_DASHBOARDS_HOST - -root@vagrant:/opt/filebeat# beat_run.py -c ./filebeat.yml -b filebeat - -2020-07-27T16:12:43.270Z INFO instance/beat.go:622 Home path: [/opt/filebeat] Config path: [/opt/filebeat] Data path: [/opt/filebeat/data] Logs path: [/opt/filebeat/logs] -2020-07-27T16:12:43.270Z INFO instance/beat.go:630 Beat ID: 759019e0-705c-4a16-87a2-52e9a5f6e799 -… -^C -KeyboardInterrupt -2020-07-27T16:13:10.816Z INFO beater/filebeat.go:443 Stopping filebeat -``` - -# Copyright - -[Malcolm](https://github.com/idaholab/Malcolm) is Copyright 2022 Battelle Energy Alliance, LLC, and is developed and released through the cooperation of the Cybersecurity and Infrastructure Security Agency of the U.S. Department of Homeland Security. - -See [`License.txt`](https://raw.githubusercontent.com/idaholab/Malcolm/main/License.txt) for the terms of its release. - -### Contact information of author(s): - -[malcolm@inl.gov](mailto:malcolm@inl.gov?subject=Malcolm) diff --git a/scripts/beats/beat_common.py b/scripts/beats/beat_common.py deleted file mode 100644 index 6e8e22cf6..000000000 --- a/scripts/beats/beat_common.py +++ /dev/null @@ -1,759 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -from __future__ import print_function - -import getpass -import inspect -import os -import platform -import re -import sys -import time - -from collections import defaultdict - -from subprocess import PIPE, STDOUT, Popen, CalledProcessError - -################################################################################################### -ScriptPath = os.path.dirname(os.path.realpath(__file__)) - -################################################################################################### -# python 2/3 portability -PY3 = sys.version_info.major >= 3 - -# bind raw_input to input in older versions of python -try: - input = raw_input -except NameError: - pass - -try: - FileNotFoundError -except NameError: - FileNotFoundError = IOError - -################################################################################################### -PLATFORM_WINDOWS = "Windows" -PLATFORM_MAC = "Darwin" -PLATFORM_LINUX = "Linux" -PLATFORM_LINUX_CENTOS = 'centos' -PLATFORM_LINUX_DEBIAN = 'debian' -PLATFORM_LINUX_FEDORA = 'fedora' -PLATFORM_LINUX_UBUNTU = 'ubuntu' - -OPERATION_RUN = 'run' -OPERATION_CONFIGURE = 'config' - -BEAT_OS_HOST = "BEAT_OS_HOST" -BEAT_OS_PROTOCOL = "BEAT_OS_PROTOCOL" -BEAT_OS_SSL_VERIFY = "BEAT_OS_SSL_VERIFY" -BEAT_HTTP_PASSWORD = "BEAT_HTTP_PASSWORD" -BEAT_HTTP_USERNAME = "BEAT_HTTP_USERNAME" -BEAT_DASHBOARDS_ENABLED = "BEAT_DASHBOARDS_ENABLED" -BEAT_DASHBOARDS_PATH = "BEAT_DASHBOARDS_PATH" -BEAT_DASHBOARDS_HOST = "BEAT_DASHBOARDS_HOST" -BEAT_DASHBOARDS_PROTOCOL = "BEAT_DASHBOARDS_PROTOCOL" -BEAT_DASHBOARDS_SSL_VERIFY = "BEAT_DASHBOARDS_SSL_VERIFY" - -BEAT_YML_TEMPLATE = """ -#================================ General ====================================== -fields_under_root: true - -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" - -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 - -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" - -#============================== Kibana ===================================== -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false -""" - -################################################################################################### -# print to stderr -def eprint(*args, **kwargs): - print(*args, file=sys.stderr, **kwargs) - - -################################################################################################### -# get interactive user response to Y/N question -def YesOrNo(question, default=None, forceInteraction=False, acceptDefault=False): - - if default == True: - questionStr = "\n{} (Y/n): ".format(question) - elif default == False: - questionStr = "\n{} (y/N): ".format(question) - else: - questionStr = "\n{} (y/n): ".format(question) - - if acceptDefault and (default is not None) and (not forceInteraction): - reply = '' - else: - while True: - reply = str(input(questionStr)).lower().strip() - if (len(reply) > 0) or (default is not None): - break - - if len(reply) == 0: - reply = 'y' if default else 'n' - - if reply[0] == 'y': - return True - elif reply[0] == 'n': - return False - else: - return YesOrNo(question, default=default) - - -################################################################################################### -# get interactive user response -def AskForString(question, default=None, forceInteraction=False, acceptDefault=False): - - if acceptDefault and (default is not None) and (not forceInteraction): - reply = default - else: - reply = str(input('\n{}: '.format(question))).strip() - - return reply - - -################################################################################################### -# get interactive password (without echoing) -def AskForPassword(prompt): - reply = getpass.getpass(prompt=prompt) - return reply - - -################################################################################################### -# convenient boolean argument parsing -def str2bool(v): - if v.lower() in ('yes', 'true', 't', 'y', '1'): - return True - elif v.lower() in ('no', 'false', 'f', 'n', '0'): - return False - else: - raise ValueError('Boolean value expected') - - -################################################################################################### -# determine if a program/script exists and is executable in the system path -def Which(cmd, debug=False): - result = any(os.access(os.path.join(path, cmd), os.X_OK) for path in os.environ["PATH"].split(os.pathsep)) - if (not result) and (platform.system() == PLATFORM_WINDOWS): - result = os.access(os.path.join(os.getcwd(), cmd), os.X_OK) - if debug: - eprint("Which {} returned {}".format(cmd, result)) - return result - - -################################################################################################### -# run command with arguments and return its exit code, stdout, and stderr -def check_output_input(*popenargs, **kwargs): - - if 'stdout' in kwargs: - raise ValueError('stdout argument not allowed, it will be overridden') - - if 'stderr' in kwargs: - raise ValueError('stderr argument not allowed, it will be overridden') - - if 'input' in kwargs and kwargs['input']: - if 'stdin' in kwargs: - raise ValueError('stdin and input arguments may not both be used') - inputdata = kwargs['input'] - kwargs['stdin'] = PIPE - else: - inputdata = None - kwargs.pop('input', None) - - process = Popen(*popenargs, stdout=PIPE, stderr=PIPE, **kwargs) - try: - output, errput = process.communicate(inputdata) - except: - process.kill() - process.wait() - raise - - retcode = process.poll() - - return retcode, output, errput - - -################################################################################################### -# run command with arguments and return its exit code, stdout, and stderr -def run_process( - command, stdout=True, stderr=True, stdin=None, retry=0, retrySleepSec=5, cwd=None, env=None, debug=False -): - - retcode = -1 - output = [] - - try: - # run the command - retcode, cmdout, cmderr = check_output_input( - command, input=stdin.encode() if (PY3 and stdin) else stdin, cwd=cwd, env=env - ) - - # split the output on newlines to return a list - if PY3: - if stderr and (len(cmderr) > 0): - output.extend(cmderr.decode(sys.getdefaultencoding()).split('\n')) - if stdout and (len(cmdout) > 0): - output.extend(cmdout.decode(sys.getdefaultencoding()).split('\n')) - else: - if stderr and (len(cmderr) > 0): - output.extend(cmderr.split('\n')) - if stdout and (len(cmdout) > 0): - output.extend(cmdout.split('\n')) - - except (FileNotFoundError, OSError, IOError) as e: - if stderr: - output.append("Command {} not found or unable to execute".format(command)) - - if debug: - eprint( - "{}{} returned {}: {}".format( - command, "({})".format(stdin[:80] + bool(stdin[80:]) * '...' if stdin else ""), retcode, output - ) - ) - - if (retcode != 0) and retry and (retry > 0): - # sleep then retry - time.sleep(retrySleepSec) - return run_process(command, stdout, stderr, stdin, retry - 1, retrySleepSec, cwd, env, debug) - else: - return retcode, output - - -################################################################################################### -class Beatbox(object): - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def __init__(self, debug=False, ymlFileSpec=None, beatName=None, acceptDefaults=False): - self.debug = debug - self.acceptDefaults = acceptDefaults - self.platform = platform.system() - self.ymlFileSpec = ymlFileSpec - self.ymlFilePath = os.path.dirname(ymlFileSpec) - self.beatName = beatName - self.beatExe = beatName - self.beatInstallDir = None - self.defaultKibanaDashboardDir = None - self.keystoreItems = defaultdict(str) - for initItem in [ - BEAT_OS_HOST, - BEAT_OS_PROTOCOL, - BEAT_OS_SSL_VERIFY, - BEAT_HTTP_PASSWORD, - BEAT_HTTP_USERNAME, - BEAT_DASHBOARDS_ENABLED, - BEAT_DASHBOARDS_PATH, - BEAT_DASHBOARDS_HOST, - BEAT_DASHBOARDS_PROTOCOL, - BEAT_DASHBOARDS_SSL_VERIFY, - ]: - self.keystoreItems[initItem] = '' - self.keystorePath = None - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def __del__(self): - # nothing for now - pass - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def run_process(self, command, stdout=True, stderr=True, stdin=None, retry=0, retrySleepSec=5): - return run_process( - command, - stdout=stdout, - stderr=stderr, - stdin=stdin, - retry=retry, - retrySleepSec=retrySleepSec, - debug=self.debug, - ) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def build_beat_command(self, command): - if not Which(self.beatExe, debug=self.debug): - raise Exception("Beat executable {} does not exist".format(self.beatExe)) - - if not os.path.isfile(self.ymlFileSpec): - raise Exception("Beat configuration {} does not exist".format(self.ymlFileSpec)) - - # convert paths to absolutes - ymlFileSpec = os.path.abspath(self.ymlFileSpec) - ymlFilePath = os.path.dirname(ymlFileSpec) - - beatCmd = [ - self.beatExe, - '--path.home', - ymlFilePath, - '--path.config', - ymlFilePath, - '--path.data', - ymlFilePath if (self.platform == PLATFORM_WINDOWS) else os.path.join(ymlFilePath, 'data'), - '--path.logs', - os.path.join(ymlFilePath, 'logs'), - '-c', - ymlFileSpec, - '-E', - "keystore.path='{}'".format(self.keystorePath), - ] - - return beatCmd + command if isinstance(command, list) else beatCmd + [command] - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def run_beat_command(self, command, stdout=True, stderr=True, stdin=None, retry=0, retrySleepSec=5): - return self.run_process( - self.build_beat_command(command), - stdout=stdout, - stderr=stderr, - stdin=stdin, - retry=retry, - retrySleepSec=retrySleepSec, - ) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_beat_yml(self): - if self.debug: - eprint("{}: {}".format(self.__class__.__name__, inspect.currentframe().f_code.co_name)) - - if self.ymlFileSpec is not None: - - if os.path.isfile(self.ymlFileSpec): - # if it doesn't look like connectivity stuff (at last BEAT_OS_PROTOCOL) is in the YML file, offer to append it - if ( - len( - list( - filter( - lambda x: BEAT_OS_PROTOCOL in x, [line.rstrip('\n') for line in open(self.ymlFileSpec)] - ) - ) - ) - == 0 - ) and YesOrNo( - "Append connectivity boilerplate to {}?".format(self.ymlFileSpec), - default=False, - acceptDefault=self.acceptDefaults, - ): - with open(self.ymlFileSpec, 'a') as ymlFile: - ymlFile.write(BEAT_YML_TEMPLATE) - - else: - # generate a boilerplate spec file (output configured, no modules) if the YML file doesn't exist - with open(self.ymlFileSpec, 'w') as ymlFile: - ymlFile.write(BEAT_YML_TEMPLATE) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_keystore(self): - if self.debug: - eprint("{}: {}".format(self.__class__.__name__, inspect.currentframe().f_code.co_name)) - - # check if keystore already exists - err, out = self.run_beat_command(['keystore', 'list']) - if (err == 0) and (len(out) > 0): - if not YesOrNo( - "{} keystore already exists, overwrite?".format(self.beatName), - default=False, - acceptDefault=self.acceptDefaults, - ): - raise Exception("Configuration cancelled by user") - - # create keystore - err, out = self.run_beat_command(['keystore', 'create', '--force']) - if err == 0: - eprint('\n'.join(out)) - else: - raise Exception("Keystore creation failed: {}".format(out)) - - # prompt for and store configuration items - for destination in ['Elasticsearch', 'Kibana']: - - if YesOrNo( - "Configure {} {} connectivity?".format(self.beatName, destination), - default=True, - acceptDefault=self.acceptDefaults, - ): - - # protocol - tmpVal, tmpDefault = '', 'https' - while tmpVal not in ['http', 'https']: - tmpVal = AskForString( - "Enter {} connection protocol (http or https) [{}]".format(destination, tmpDefault), - default=tmpDefault, - acceptDefault=self.acceptDefaults, - ).lower() - if len(tmpVal) == 0: - tmpVal = tmpDefault - self.keystoreItems[ - BEAT_OS_PROTOCOL.replace('_OS_', '_KIBANA_' if (destination == 'Kibana') else '_OS_') - ] = tmpVal - - # SSL verification - tmpVal, tmpDefault = '', 'none' - while tmpVal not in ['none', 'full']: - tmpVal = AskForString( - "Enter {} SSL verification (none (for self-signed certificates) or full) [{}]".format( - destination, tmpDefault - ), - default=tmpDefault, - acceptDefault=self.acceptDefaults, - ).lower() - if len(tmpVal) == 0: - tmpVal = tmpDefault - self.keystoreItems[ - BEAT_OS_SSL_VERIFY.replace('_OS_', '_KIBANA_' if (destination == 'Kibana') else '_OS_') - ] = tmpVal - - # host - tmpVal, tmpDefault = '', '' - while len(tmpVal) == 0: - tmpVal = AskForString( - "Enter {} connection host".format(destination), - default=tmpDefault, - acceptDefault=self.acceptDefaults, - ) - self.keystoreItems[ - BEAT_OS_HOST.replace('_OS_', '_KIBANA_' if (destination == 'Kibana') else '_OS_') - ] = tmpVal - - if BEAT_DASHBOARDS_HOST in self.keystoreItems: - - # configure kibana dashboards - if YesOrNo( - "Configure {} Kibana dashboards?".format(self.beatName), default=True, acceptDefault=self.acceptDefaults - ): - self.keystoreItems[BEAT_DASHBOARDS_ENABLED] = 'true' - - # kibana dashboards - tmpVal, tmpDefault = '', self.defaultKibanaDashboardDir - while len(tmpVal) == 0: - tmpVal = AskForString( - "Enter directory containing Kibana dashboards [{}]".format(tmpDefault), - default=tmpDefault, - acceptDefault=self.acceptDefaults, - ) - if len(tmpVal) == 0: - tmpVal = tmpDefault - self.keystoreItems[BEAT_DASHBOARDS_PATH] = tmpVal - - # username - tmpVal, tmpDefault = '', '' - while len(tmpVal) == 0: - tmpVal = AskForString( - "Enter HTTP/HTTPS server username", default=tmpDefault, acceptDefault=self.acceptDefaults - ) - self.keystoreItems[BEAT_HTTP_USERNAME] = tmpVal - - # password - tmpVal, tmpValConfirm = '', 'xxxx' - while (len(tmpVal) == 0) and (tmpVal != tmpValConfirm): - tmpVal = AskForPassword("Enter password for {}: ".format(self.keystoreItems[BEAT_HTTP_USERNAME])) - tmpValConfirm = AskForPassword( - "Enter password for {} (again): ".format(self.keystoreItems[BEAT_HTTP_USERNAME]) - ) - if tmpVal != tmpValConfirm: - eprint('Passwords do not match') - tmpVal, tmpValConfirm = '', 'xxxx' - self.keystoreItems[BEAT_HTTP_PASSWORD] = tmpVal - - # write values to keystore - for key, value in self.keystoreItems.items(): - err, out = self.run_beat_command(['keystore', 'add', key, '--stdin', '--force'], stdin=value) - if err != 0: - raise Exception("Failed to add {} to {} keystore: {}".format(key, self.beatName, out)) - - # list keystore - err, out = self.run_beat_command(['keystore', 'list']) - if err == 0: - eprint('Generated keystore for {}'.format(self.beatName)) - eprint('\n'.join(out)) - else: - raise Exception("Failed to enumerate keystore: {}".format(out)) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def beat_run(self): - if self.debug: - eprint("{}: {}".format(self.__class__.__name__, inspect.currentframe().f_code.co_name)) - - process = Popen(self.build_beat_command(['run', '-e']), stdout=PIPE) - while True: - output = process.stdout.readline() - if (len(output) == 0) and (process.poll() is not None): - break - if output: - print(output.decode().strip()) - else: - time.sleep(0.5) - process.poll() - - -################################################################################################### -class LinuxBeatbox(Beatbox): - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def __init__(self, debug=False, ymlFileSpec=None, beatName=None): - if PY3: - super().__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - else: - super(LinuxBeatbox, self).__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - - if not Which(self.beatExe, debug=self.debug): - self.beatExe = self.beatExe.lower() if (self.beatExe is not None) else self.beatName.lower() - - self.beatInstallDir = "/usr/share/{}".format(self.beatName) - self.defaultKibanaDashboardDir = os.path.join(self.beatInstallDir, 'kibana') - self.keystorePath = os.path.join( - os.path.join(os.path.dirname(os.path.abspath(self.ymlFileSpec)), 'data'), - "{}.keystore".format(self.beatName), - ) - - self.distro = None - self.codename = None - self.release = None - - # determine the distro (e.g., ubuntu) and code name (e.g., bionic) if applicable - - # check /etc/os-release values first - if os.path.isfile('/etc/os-release'): - osInfo = dict() - - with open("/etc/os-release", 'r') as f: - for line in f: - try: - k, v = line.rstrip().split("=") - osInfo[k] = v.strip('"') - except: - pass - - if ('NAME' in osInfo) and (len(osInfo['NAME']) > 0): - distro = osInfo['NAME'].lower().split()[0] - - if ('VERSION_CODENAME' in osInfo) and (len(osInfo['VERSION_CODENAME']) > 0): - codename = osInfo['VERSION_CODENAME'].lower().split()[0] - - if ('VERSION_ID' in osInfo) and (len(osInfo['VERSION_ID']) > 0): - release = osInfo['VERSION_ID'].lower().split()[0] - - # try lsb_release next - if self.distro is None: - err, out = self.run_process(['lsb_release', '-is'], stderr=False) - if (err == 0) and (len(out) > 0): - self.distro = out[0].lower() - - if self.codename is None: - err, out = self.run_process(['lsb_release', '-cs'], stderr=False) - if (err == 0) and (len(out) > 0): - self.codename = out[0].lower() - - if self.release is None: - err, out = self.run_process(['lsb_release', '-rs'], stderr=False) - if (err == 0) and (len(out) > 0): - self.release = out[0].lower() - - # try release-specific files - if self.distro is None: - if os.path.isfile('/etc/centos-release'): - distroFile = '/etc/centos-release' - if os.path.isfile('/etc/redhat-release'): - distroFile = '/etc/redhat-release' - elif os.path.isfile('/etc/issue'): - distroFile = '/etc/issue' - else: - distroFile = None - if distroFile is not None: - with open(distroFile, 'r') as f: - distroVals = f.read().lower().split() - distroNums = [x for x in distroVals if x[0].isdigit()] - self.distro = distroVals[0] - if (self.release is None) and (len(distroNums) > 0): - self.release = distroNums[0] - - if self.distro is None: - self.distro = "linux" - - if self.debug: - eprint( - "distro: {}{}{}".format( - self.distro, - " {}".format(self.codename) if self.codename else "", - " {}".format(self.release) if self.release else "", - ) - ) - - if not self.codename: - self.codename = self.distro - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_beat_yml(self): - if PY3: - super().configure_beat_yml() - else: - super(LinuxBeatbox, self).configure_beat_yml() - - localModulePath = os.path.join(os.path.abspath(self.ymlFilePath), 'module') - installedModulePath = os.path.join(self.beatInstallDir, 'module') - if ( - (not os.path.exists(localModulePath)) - and (os.path.isdir(installedModulePath)) - and YesOrNo( - "Create symlink to module path {} as {}?".format(installedModulePath, localModulePath), - default=True, - acceptDefault=self.acceptDefaults, - ) - ): - os.symlink(installedModulePath, localModulePath) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_keystore(self): - if PY3: - super().configure_keystore() - else: - super(LinuxBeatbox, self).configure_keystore() - - pass - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def beat_run(self): - if PY3: - super().beat_run() - else: - super(LinuxBeatbox, self).beat_run() - - pass - - -################################################################################################### -class WindowsBeatbox(Beatbox): - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def __init__(self, debug=False, ymlFileSpec=None, beatName=None): - if PY3: - super().__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - else: - super(WindowsBeatbox, self).__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - - if not Which(self.beatExe, debug=self.debug): - self.beatExe = self.beatExe + '.exe' if (self.beatExe is not None) else self.beatName + '.exe' - - self.beatInstallDir = os.path.abspath(self.ymlFilePath) - self.defaultKibanaDashboardDir = os.path.join(self.beatInstallDir, 'kibana') - self.keystorePath = os.path.join( - os.path.dirname(os.path.abspath(self.ymlFileSpec)), "{}.keystore".format(self.beatName) - ) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_beat_yml(self): - if PY3: - super().configure_beat_yml() - else: - super(WindowsBeatbox, self).configure_beat_yml() - - pass - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_keystore(self): - if PY3: - super().configure_keystore() - else: - super(WindowsBeatbox, self).configure_keystore() - - pass - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def beat_run(self): - if PY3: - super().beat_run() - else: - super(WindowsBeatbox, self).beat_run() - - pass - - -################################################################################################### -class MacBeatbox(Beatbox): - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def __init__(self, debug=False, ymlFileSpec=None, beatName=None): - if PY3: - super().__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - else: - super(MacBeatbox, self).__init__(debug=debug, ymlFileSpec=ymlFileSpec, beatName=beatName) - - if not Which(self.beatExe, debug=self.debug): - self.beatExe = self.beatExe.lower() if (self.beatExe is not None) else self.beatName.lower() - - self.beatInstallDir = "/Library/Application Support/elastic/{}".format(self.beatName) - self.defaultKibanaDashboardDir = os.path.join(self.beatInstallDir, 'kibana') - self.keystorePath = os.path.join( - os.path.join(os.path.dirname(os.path.abspath(self.ymlFileSpec)), 'data'), - "{}.keystore".format(self.beatName), - ) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_beat_yml(self): - if PY3: - super().configure_beat_yml() - else: - super(MacBeatbox, self).configure_beat_yml() - - localModulePath = os.path.join(os.path.abspath(self.ymlFilePath), 'module') - installedModulePath = os.path.join(self.beatInstallDir, 'module') - if ( - (not os.path.exists(localModulePath)) - and (os.path.isdir(installedModulePath)) - and YesOrNo( - "Create symlink to module path {} as {}?".format(installedModulePath, localModulePath), - default=True, - acceptDefault=self.acceptDefaults, - ) - ): - os.symlink(installedModulePath, localModulePath) - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def configure_keystore(self): - if PY3: - super().configure_keystore() - else: - super(MacBeatbox, self).configure_keystore() - - pass - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - def beat_run(self): - if PY3: - super().beat_run() - else: - super(MacBeatbox, self).beat_run() - - pass diff --git a/scripts/beats/beat_config.py b/scripts/beats/beat_config.py deleted file mode 100755 index 111e5682b..000000000 --- a/scripts/beats/beat_config.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -from __future__ import print_function - -import argparse -import os -import platform -import sys -from beat_common import * - -################################################################################################### -ScriptName = os.path.basename(__file__) - -################################################################################################### -# main -def main(): - - # extract arguments from the command line - # print (sys.argv[1:]); - parser = argparse.ArgumentParser( - description='Beat configure script', add_help=False, usage='{} '.format(ScriptName) - ) - parser.add_argument( - '-v', '--verbose', dest='debug', type=str2bool, nargs='?', const=True, default=False, help="Verbose output" - ) - parser.add_argument( - '-b', '--beat', required=True, dest='beatName', metavar='', type=str, default=None, help='Beat name' - ) - parser.add_argument( - '-c', - '--config-file', - required=False, - dest='configFile', - metavar='', - type=str, - default=None, - help='Beat YML file to configure', - ) - parser.add_argument( - '-d', - '--defaults', - dest='acceptDefault', - type=str2bool, - nargs='?', - const=True, - default=False, - help="Accept defaults to prompts without user interaction", - ) - - try: - parser.error = parser.exit - args = parser.parse_args() - except SystemExit: - parser.print_help() - exit(2) - - if args.debug: - eprint(os.path.join(ScriptPath, ScriptName)) - eprint("Arguments: {}".format(sys.argv[1:])) - eprint("Arguments: {}".format(args)) - else: - sys.tracebacklimit = 0 - - args.beatName = args.beatName.lower() - if not args.beatName.endswith('beat'): - args.beatName = args.beatName + 'beat' - - if args.configFile is None: - args.configFile = args.beatName + '.yml' - - installerPlatform = platform.system() - if installerPlatform == PLATFORM_LINUX: - Beatbox = LinuxBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - elif installerPlatform == PLATFORM_MAC: - Beatbox = MacBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - elif installerPlatform == PLATFORM_WINDOWS: - Beatbox = WindowsBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - - success = False - if hasattr(Beatbox, 'configure_beat_yml'): - success = Beatbox.configure_beat_yml() - if hasattr(Beatbox, 'configure_keystore'): - success = Beatbox.configure_keystore() - - return success - - -if __name__ == '__main__': - main() diff --git a/scripts/beats/beat_run.py b/scripts/beats/beat_run.py deleted file mode 100755 index 92fe6734c..000000000 --- a/scripts/beats/beat_run.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -from __future__ import print_function - -import argparse -import os -import platform -import sys -from beat_common import * - -################################################################################################### -ScriptName = os.path.basename(__file__) - -################################################################################################### -# main -def main(): - - # extract arguments from the command line - # print (sys.argv[1:]); - parser = argparse.ArgumentParser( - description='Beat local execution script', add_help=False, usage='{} '.format(ScriptName) - ) - parser.add_argument( - '-v', '--verbose', dest='debug', type=str2bool, nargs='?', const=True, default=False, help="Verbose output" - ) - parser.add_argument( - '-b', '--beat', required=True, dest='beatName', metavar='', type=str, default=None, help='Beat name' - ) - parser.add_argument( - '-c', - '--config-file', - required=False, - dest='configFile', - metavar='', - type=str, - default=None, - help='Beat YML config file', - ) - - try: - parser.error = parser.exit - args = parser.parse_args() - except SystemExit: - parser.print_help() - exit(2) - - if args.debug: - eprint(os.path.join(ScriptPath, ScriptName)) - eprint("Arguments: {}".format(sys.argv[1:])) - eprint("Arguments: {}".format(args)) - else: - sys.tracebacklimit = 0 - - args.beatName = args.beatName.lower() - if not args.beatName.endswith('beat'): - args.beatName = args.beatName + 'beat' - - if args.configFile is None: - args.configFile = args.beatName + '.yml' - - installerPlatform = platform.system() - if installerPlatform == PLATFORM_LINUX: - Beatbox = LinuxBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - elif installerPlatform == PLATFORM_MAC: - Beatbox = MacBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - elif installerPlatform == PLATFORM_WINDOWS: - Beatbox = WindowsBeatbox(debug=args.debug, ymlFileSpec=args.configFile, beatName=args.beatName) - - success = False - if hasattr(Beatbox, 'beat_run'): - success = Beatbox.beat_run() - - return success - - -if __name__ == '__main__': - main() diff --git a/scripts/beats/linux_vm_example/Vagrantfile b/scripts/beats/linux_vm_example/Vagrantfile deleted file mode 100644 index 49f3a2ec8..000000000 --- a/scripts/beats/linux_vm_example/Vagrantfile +++ /dev/null @@ -1,89 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -unless Vagrant.has_plugin?("vagrant-reload") - raise 'vagrant-reload plugin is not installed!' -end - -# hack: https://github.com/hashicorp/vagrant/issues/8878#issuecomment-345112810 -class VagrantPlugins::ProviderVirtualBox::Action::Network - def dhcp_server_matches_config?(dhcp_server, config) - true - end -end - -Vagrant.configure("2") do |config| - - config.vm.box = "bento/ubuntu-20.04" - - config.vm.network "private_network", type: "dhcp" - - config.vm.synced_folder ".", "/vagrant", disabled: true - - if Vagrant.has_plugin?("vagrant-vbguest") - config.vbguest.auto_update = false - end - - config.vm.provider "virtualbox" do |vb| - vb.customize ["modifyvm", :id, "--nictype1", "virtio" ] - vb.customize ["modifyvm", :id, "--nicpromisc1", "allow-all"] - vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] - vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] - vb.customize ["modifyvm", :id, "--memory", 2048] - vb.customize ["modifyvm", :id, "--cpus", 2] - vb.customize ["modifyvm", :id, "--vram", 32] - vb.customize ["modifyvm", :id, "--ioapic", "on"] - vb.customize ["modifyvm", :id, "--nestedpaging", "on"] - vb.customize ["modifyvm", :id, "--pae", "on"] - vb.customize ["modifyvm", :id, "--hwvirtex", "on"] - vb.customize ["modifyvm", :id, "--nested-hw-virt", "on"] - end - - config.vm.provision "shell", inline: <<-STEP1 - export DEBIAN_FRONTEND=noninteractive - export BEAT_VERSION=7.6.2 - apt-get update - apt-get install -y auditd gnupg2 curl ca-certificates libcap2-bin libpcap0.8 python3-minimal python-is-python3 - curl -sSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" >> /etc/apt/sources.list - apt-get update - for BEAT in auditbeat filebeat packetbeat metricbeat; do - apt-get install -y $BEAT-oss=$BEAT_VERSION - done; - STEP1 - - config.vm.provision "file", source: "./audit.rules", destination: "/tmp/audit.rules" - - config.vm.provision "file", source: "../beat_run.py", destination: "/tmp/beat_run.py" - config.vm.provision "file", source: "../beat_config.py", destination: "/tmp/beat_config.py" - config.vm.provision "file", source: "../beat_common.py", destination: "/tmp/beat_common.py" - ["auditbeat","filebeat","packetbeat","metricbeat"].to_enum.with_index(1).each do |beat, i| - config.vm.provision "file", source: "./#{beat}.yml", destination: "/tmp/#{beat}.yml" - end - - config.vm.provision "shell", inline: <<-STEP2 - export DEBIAN_FRONTEND=noninteractive - - mv /tmp/beat*.py /usr/local/bin/ - chown root:root /usr/local/bin/beat*.py - chmod 755 /usr/local/bin/beat_config.py /usr/local/bin/beat_run.py - chmod 644 /usr/local/bin/beat_common.py - - filebeat modules enable system - - mv /tmp/audit.rules /etc/audit/rules.d/audit.rules - find /etc/audit -type d -exec chmod 750 "{}" \\; - find /etc/audit -type f -exec chmod 640 "{}" \\; - - for BEAT in auditbeat filebeat packetbeat metricbeat; do - mkdir -p /opt/$BEAT - mv /tmp/$BEAT.yml /opt/$BEAT/ - chown -R root:root /opt/$BEAT - chmod 700 /opt/$BEAT - chmod 600 /opt/$BEAT/* - done; - STEP2 - - config.vm.provision :reload - -end diff --git a/scripts/beats/linux_vm_example/audit.rules b/scripts/beats/linux_vm_example/audit.rules deleted file mode 100644 index 004f048a3..000000000 --- a/scripts/beats/linux_vm_example/audit.rules +++ /dev/null @@ -1,146 +0,0 @@ -## First rule - delete all --D - -## Increase the buffers to survive stress events. -## Make this bigger for busy systems --b 8192 - -## This determine how long to wait in burst of events ---backlog_wait_time 0 - -## Set failure mode to syslog --f 1 - -# exclusions - --a always,exclude -F msgtype=AVC --a always,exclude -F msgtype=CRYPTO_KEY_USER --a always,exclude -F msgtype=CWD --a always,exclude -F msgtype=EOE - -# commands - --a always,exit -F path=/bin/fusermount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/bin/mount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/bin/pmount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/bin/pumount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/bin/su -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/bin/umount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/etc/audisp/audisp-remote.conf -F perm=wa -k config_file_change --a always,exit -F path=/etc/audit/auditd.conf -F perm=wa -k config_file_change --a always,exit -F path=/etc/default/grub -F perm=wa -k config_file_change --a always,exit -F path=/etc/fstab -F perm=wa -k config_file_change --a always,exit -F path=/etc/hosts.deny -F perm=wa -k config_file_change --a always,exit -F path=/etc/login.defs -F perm=wa -k config_file_change --a always,exit -F path=/etc/profile -F perm=wa -k config_file_change --a always,exit -F path=/etc/sysctl.conf -F perm=wa -k config_file_change --a always,exit -F path=/sbin/apparmor_parser -F perm=x -F auid>=1000 -F auid!=4294967295 -k MAC-policy --a always,exit -F path=/sbin/pam_tally -F perm=wxa -F auid>=1000 -F auid!=4294967295 -k privileged-pam --a always,exit -F path=/sbin/pam_tally2 -F perm=wxa -F auid>=1000 -F auid!=4294967295 -k privileged-pam --a always,exit -F path=/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-passwd --a always,exit -F path=/sbin/unix_update -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-unix-update --a always,exit -F path=/usr/bin/bsd-write -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/chacl -F perm=x -F auid>=1000 -F auid!=4294967295 -k perm_chng --a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-passwd --a always,exit -F path=/usr/bin/chcon -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-cron --a always,exit -F path=/usr/bin/dotlock.mailutils -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/expiry -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/fusermount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-passwd --a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/ntfs-3g -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-passwd --a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/pmount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/pumount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/setfacl -F perm=x -F auid>=1000 -F auid!=4294967295 -k perm_chng --a always,exit -F path=/usr/bin/ssh-agent -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-ssh --a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/sudoedit -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-priv_change --a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/lib/dbus-1.0/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/lib/eject/dmcrypt-get-device -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/lib/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-ssh --a always,exit -F path=/usr/lib/policykit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/lib/x86_64-linux-gnu/utempter/utempter -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/lib/xorg/Xorg.wrap -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/addgroup -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/adduser -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/exim4 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/groupadd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/mount.cifs -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/netfilter-persistent -F perm=x -F auid>=1000 -F auid!=4294967295 -k nft_persistent_use --a always,exit -F path=/usr/sbin/nft -F perm=x -F auid>=1000 -F auid!=4294967295 -k nft_cmd_use --a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-pam --a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-postfix --a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-postfix --a always,exit -F path=/usr/sbin/semanage -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/setsebool -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/useradd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/userhelper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged --a always,exit -F path=/usr/sbin/usermod -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged-usermod --a always,exit -F path=/usr/sbin/visudo -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged - -# privileged files - --w /bin/kmod -p x -k modules --w /etc/apparmor.d/ -p wa -k MAC-policy --w /etc/apparmor/ -p wa -k MAC-policy --w /etc/group -p wa -k identity --w /etc/gshadow -p wa -k identity --w /etc/hosts -p wa -k system-locale --w /etc/issue -p wa -k system-locale --w /etc/issue.net -p wa -k system-locale --w /etc/localtime -p wa -k time-change --w /etc/network -p wa -k system-locale --w /etc/nftables.conf -p wa -k nft_config_file_change --w /etc/opasswd -p wa -k usergroup_modification --w /etc/passwd -p wa -k identity --w /etc/security/opasswd -p wa -k identity --w /etc/shadow -p wa -k identity --w /etc/sudoers -p wa -k sudoers --w /etc/sudoers.d/ -p wa -k sudoers --w /sbin/insmod -p x -k modules --w /sbin/modprobe -p x -k modules --w /sbin/rmmod -p x -k modules --w /var/log/btmp -p wa -k session --w /var/log/faillog -p wa -k logins --w /var/log/lastlog -p wa -k logins --w /var/log/sudo.log -p wa -k sudoaction --w /var/log/tallylog -p wa -k logins --w /var/log/wtmp -p wa -k session --w /var/run/faillock -p wa -k logins --w /var/run/utmp -p wa -k session - -# syscalls - --a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change --a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod --a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod --a always,exit -F arch=b64 -S clock_settime -k time-change --a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access --a always,exit -F arch=b64 -S open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access --a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access --a always,exit -F arch=b64 -S open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access --a always,exit -F arch=b64 -S execve -C gid!=egid -F key=execpriv --a always,exit -F arch=b64 -S execve -C uid!=euid -F key=execpriv --a always,exit -F arch=b64 -S init_module -S delete_module -S create_module -S finit_module -k modules --a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts --a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod --a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -S rmdir -F auid>=1000 -F auid!=4294967295 -k delete --a always,exit -F dir=/etc/audit/rules.d/ -F perm=wa -k config_file_change --a always,exit -F dir=/etc/pam.d/ -F perm=wa -k config_file_change --a always,exit -F dir=/etc/profile.d/ -F perm=wa -k config_file_change --a always,exit -F dir=/etc/security/ -F perm=wa -k config_file_change --a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale - -# Make the configuration immutable -- reboot is required to change audit rules --e 2 diff --git a/scripts/beats/linux_vm_example/auditbeat.yml b/scripts/beats/linux_vm_example/auditbeat.yml deleted file mode 100644 index 4e556cfde..000000000 --- a/scripts/beats/linux_vm_example/auditbeat.yml +++ /dev/null @@ -1,154 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-reference-yml.html - -# ============================================================================== - -auditbeat.modules: - -#------------------------------- auditd Module ------------------------------- - -- module: auditd - socket_type: multicast - resolve_ids: true - failure_mode: log - backlog_limit: 16384 - rate_limit: 0 - include_raw_message: false - include_warnings: false - backpressure_strategy: auto - # audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ] - # no rules specified, auditd will run and manage rules - # see https://www.elastic.co/guide/en/beats/auditbeat/master/auditbeat-module-auditd.html - - # don't forward some things that are always going to be happening to cut down on noise - # and some other approved common stuff that would clutter the logs - processors: - - drop_event: - when: - and: - - equals: - auditd.message_type: 'syscall' - - equals: - auditd.summary.object.type: 'file' - - or: - - and: - - or: - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - regexp: - auditd.summary.object.primary: '^/(proc/|etc/localtime|usr/lib/x86_64-linux-gnu/gconv/gconv-modules\.cache)' - - or: - - equals: - auditd.summary.how: '/usr/share/auditbeat/bin/auditbeat' - - and: - - or: - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - not: - has_fields: ['auditd.summary.object.primary'] - - and: - - equals: - auditd.data.syscall: 'open' - - regexp: - auditd.summary.object.primary: '^/.+/__pycache__/$' - - equals: - auditd.summary.how: 'python3.8' - - -- module: file_integrity - paths: - - /bin - - /etc - - /sbin - - /usr/bin - - /usr/local/bin - - /usr/sbin - recursive: true - -# TODO: system module is apparently only available in the non-OSS basic license :-( - -# - module: system -# datasets: -# - host # General host information, e.g. uptime, IPs -# - user # User information -# - login # Logins/logouts -# - package # dpkg/rpm package manager logs -# period: 1m -# state.period: 12h -# user.detect_password_changes: true - -# - module: system -# datasets: -# - process # Started and stopped processes -# - socket # Opened and closed sockets -# period: 1s - -# # drop noise -# processors: -# - drop_event: -# when: -# or: -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: '127.0.0.1' -# - equals: -# source.ip: '127.0.0.1' -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: "${BEAT_OS_HOST}" -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: "${BEAT_DASHBOARDS_HOST}" -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'process' -# - or: -# - equals: -# process.executable: '/bin/sleep' -# - equals: -# process.executable: '/usr/bin/sort' -# - equals: -# process.executable: '/usr/bin/tail' -# - equals: -# process.executable: '/usr/bin/clear' -# - equals: -# process.executable: '/usr/bin/head' -# - equals: -# process.executable: '/bin/date' -# - equals: -# process.executable: '/bin/ls' -# - equals: -# process.executable: '/usr/bin/stat' -# - equals: -# process.executable: '/usr/bin/cut' -# - equals: -# process.executable: '/usr/bin/xargs' -# - equals: -# process.executable: '/usr/bin/tr' -# - equals: -# process.executable: '/bin/grep' -# - equals: -# process.executable: '/bin/sed' -# - equals: -# process.executable: '/bin/df' -# - equals: -# process.executable: '/usr/bin/du' -# - equals: -# process.executable: '/usr/bin/gawk' diff --git a/scripts/beats/linux_vm_example/filebeat.yml b/scripts/beats/linux_vm_example/filebeat.yml deleted file mode 100644 index 1260e4996..000000000 --- a/scripts/beats/linux_vm_example/filebeat.yml +++ /dev/null @@ -1,14 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html -# https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-reference-yml.html - -# ============================================================================== - -filebeat.modules: - -#------------------------------- System Module ------------------------------- - -- module: system - syslog: - enabled: true - auth: - enabled: true diff --git a/scripts/beats/linux_vm_example/metricbeat.yml b/scripts/beats/linux_vm_example/metricbeat.yml deleted file mode 100644 index bae2cf14b..000000000 --- a/scripts/beats/linux_vm_example/metricbeat.yml +++ /dev/null @@ -1,44 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-reference-yml.html - -# ============================================================================== - -metricbeat.config.modules: - path: ${path.config}/conf.d/*.yml - reload.period: 10s - reload.enabled: false - -metricbeat.max_start_delay: 10s - -metricbeat.modules: - -#------------------------------- System Module ------------------------------- - -- module: system - period: 30s - metricsets: - - cpu # CPU usage - - load # CPU load averages - - memory # Memory usage - - network # Network IO - - process # Per process metrics - - process_summary # Process summary - - uptime # System Uptime - - diskio # Disk IO - enabled: true - processes: ['.*'] - process.include_top_n: - enabled: true - by_cpu: 10 - by_memory: 10 - - cpu.metrics: ["percentages"] - core.metrics: ["percentages"] - -- module: system - period: 1m - metricsets: - - filesystem # File system usage for each mountpoint - - fsstat # File system summary metrics - processors: - - drop_event.when.regexp: - system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib|boot)($|/)' diff --git a/scripts/beats/linux_vm_example/packetbeat.yml b/scripts/beats/linux_vm_example/packetbeat.yml deleted file mode 100644 index 599ab721b..000000000 --- a/scripts/beats/linux_vm_example/packetbeat.yml +++ /dev/null @@ -1,87 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-reference-yml.html - -# ============================================================================== - -#------------------------------- network device ------------------------------ - -packetbeat.interfaces.device: any -packetbeat.interfaces.type: pcap -packetbeat.interfaces.snaplen: 65535 - -#------------------------------- flows --------------------------------------- - -packetbeat.flows: - enabled: true - timeout: 30s - period: 10s - -#------------------------------- transaction protocols ----------------------- - -packetbeat.protocols: -- type: icmp - enabled: true - -- type: amqp - enabled: true - ports: [5672] - -- type: cassandra - enabled: true - ports: [9042] - -- type: dhcpv4 - enabled: true - ports: [67, 68] - -- type: dns - enabled: true - ports: [53] - include_authorities: true - include_additionals: true - -- type: http - enabled: true - ports: [80, 8080, 8000, 5000, 8002] - -- type: memcache - enabled: true - ports: [11211] - -- type: mysql - enabled: true - ports: [3306,3307] - -- type: pgsql - enabled: true - ports: [5432] - -- type: redis - enabled: true - ports: [6379] - -- type: thrift - enabled: true - ports: [9090] - -- type: mongodb - enabled: true - ports: [27017] - -- type: nfs - enabled: true - ports: [2049] - -- type: tls - enabled: true - ports: - - 443 # HTTPS - - 993 # IMAPS - - 995 # POP3S - - 5223 # XMPP over SSL - - 8883 # Secure MQTT - - 9243 # Elasticsearch - -#------------------------------- monitored processes ------------------------- - -packetbeat.procs.enabled: true -packetbeat.ignore_outgoing: false diff --git a/scripts/beats/windows_vm_example/Malcolm_Windows_Forwarder_Download_and_Config.ps1 b/scripts/beats/windows_vm_example/Malcolm_Windows_Forwarder_Download_and_Config.ps1 deleted file mode 100644 index c8065b933..000000000 --- a/scripts/beats/windows_vm_example/Malcolm_Windows_Forwarder_Download_and_Config.ps1 +++ /dev/null @@ -1,193 +0,0 @@ -# configure a windows host to forward auditbeat and winlogbeat logs -# to Malcolm (see https://github.com/idaholab/Malcolm/tree/main/scripts/beats) - -$beatversion = "7.6.2" - -################################################################################ -# Uninstall-Beat -# -# - Remove previous traces of this beat -# -function Uninstall-Beat { - param( [string]$beat ) - - try { - & "C:\\Program Files\\$beat\\uninstall-service-$beat.ps1" - } - catch { - } - remove-item "C:\\Program Files\\$beat" -Recurse -erroraction 'silentlycontinue'; - -} - -################################################################################ -# Download-Beat -# -# - Download $beat-$beatversion-windows-x86_64.zip from artifacts.elastic.co -# - Unzip to C:\Program Files\beat -# - Download sample config for $beat from idaholab/Malcolm to C:\Program Files\beat -# -function Download-Beat { - param( [string]$beat ) - - Invoke-WebRequest -Uri https://artifacts.elastic.co/downloads/beats/$beat/$beat-oss-$beatversion-windows-x86_64.zip -OutFile $beat-$beatversion-windows-x86_64.zip -UseBasicParsing - Expand-Archive -LiteralPath $beat-$beatversion-windows-x86_64.zip -DestinationPath 'C:\\Program Files' - Remove-Item $beat-$beatversion-windows-x86_64.zip - Rename-Item "C:\\Program Files\\$beat-$beatversion-windows-x86_64" "C:\\Program Files\\$beat" - ((Get-Content -path "C:\\Program Files\\$beat\\install-service-$beat.ps1" -Raw) -replace 'ProgramData','Program Files') | Set-Content -Path "C:\\Program Files\\$beat\\install-service-$beat.ps1" - ((Get-Content -path "C:\\Program Files\\$beat\\install-service-$beat.ps1" -Raw) -replace ' -path',' --path') | Set-Content -Path "C:\\Program Files\\$beat\\install-service-$beat.ps1" - - Invoke-WebRequest -UseBasicParsing -OutFile "C:\\Program Files\\$beat\\$beat.yml" -Uri https://raw.githubusercontent.com/idaholab/Malcolm/main/scripts/beats/windows_vm_example/$beat.yml - (Get-Content "C:\\Program Files\\$beat\\$beat.yml") | Set-Content "C:\\Program Files\\$beat\\$beat.yml" -} - -################################################################################ -# Connectivity boilerplate to add to the sample .yml files downloaded from -# idaholab/Malcolm -# -$beat_boilerplate = @' - -#================================ General ====================================== -fields_under_root: true - -#================================ Outputs ====================================== - -#-------------------------- Elasticsearch output ------------------------------- -output.elasticsearch: - enabled: true - hosts: ["${BEAT_OS_HOST}"] - protocol: "${BEAT_OS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_OS_SSL_VERIFY}" - -setup.template.enabled: true -setup.template.overwrite: false -setup.template.settings: - index.number_of_shards: 1 - index.number_of_replicas: 0 - -#============================== Dashboards ===================================== -# setup.dashboards.enabled: "${BEAT_DASHBOARDS_ENABLED}" -# "setup.dashboards.enabled: false" now because Beats won't import dashboards -# into OpenSearch dashboards (see opensearch-project/OpenSearch-Dashboards#656 -# and opensearch-project/OpenSearch-Dashboards#831). setup.template.enabled -# seems to be okay, however. -setup.dashboards.enabled: false -setup.dashboards.directory: "${BEAT_DASHBOARDS_PATH}" - -#============================== Kibana ===================================== -setup.kibana: - host: "${BEAT_DASHBOARDS_HOST}" - protocol: "${BEAT_DASHBOARDS_PROTOCOL}" - username: "${BEAT_HTTP_USERNAME}" - password: "${BEAT_HTTP_PASSWORD}" - ssl.verification_mode: "${BEAT_DASHBOARDS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false -'@ - -################################################################################ -# Run-Beat-Command -# -# - Run C:\Program Files\$beat\$beat.exe with correct defaults for config paths -# - specify beat, command array and (optionally) stdin string -# -function Run-Beat-Command { - param( [string]$beat, [array]$command, [string]$stdin) - - $exe = "C:\\Program Files\\$beat\\$beat.exe" - $exe_config = '--path.home', "C:\\Program Files\\$beat", '--path.config', "C:\\Program Files\\$beat", '--path.data', "C:\\Program Files\\$beat", '--path.logs', "C:\\Program Files\\$beat\\logs", '-c', "C:\\Program Files\\$beat\\$beat.yml", '-E', "keystore.path='C:\\Program Files\\$beat\\$beat.keystore'" - - if (!$stdin) { - & $exe $exe_config $command - } else { - $stdin.Trim() | & $exe $exe_config $command - } - -} - -################################################################################ -# Configure config .yml and keystore for beat in "C:\\Program Files\\$beat" -# -function Configure-Beat { - param( [string]$beat ) - - cd "C:\\Program Files\\$beat" - - Run-Beat-Command $beat @("keystore","create","--force") $null - - Add-Content -Path "C:\\Program Files\\$beat\\$beat.yml" -Value $beat_boilerplate - - do { - $es_host = Read-Host "Specify the Elasticsearch IP:port (e.g., 192.168.0.123:9200)" - $es_host = $es_host.Trim() - } while (!$es_host) - - do { - $kb_host = Read-Host "Specify the Kibana IP:port (e.g., 192.168.0.123:5601)" - $kb_host = $kb_host.Trim() - } while (!$kb_host) - - do { - $es_user = Read-Host "Specify the Elasticsearch/Kibana username" - $es_user = $es_user.Trim() - } while (!$es_user) - - do { - $es_pass = Read-Host "Specify the Elasticsearch/Kibana password" -AsSecureString - $es_pass_confirm = Read-Host "Specify the Elasticsearch/Kibana password (again)" -AsSecureString - $pwd1_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($es_pass)) - $pwd2_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($es_pass_confirm)) - } while ($pwd1_text -ne $pwd2_text) - $es_pass = ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($es_pass))).Trim() - - Run-Beat-Command $beat @("keystore","add","BEAT_OS_PROTOCOL","--stdin","--force") "https" - Run-Beat-Command $beat @("keystore","add","BEAT_DASHBOARDS_PROTOCOL","--stdin","--force") "https" - Run-Beat-Command $beat @("keystore","add","BEAT_OS_SSL_VERIFY","--stdin","--force") "none" - Run-Beat-Command $beat @("keystore","add","BEAT_DASHBOARDS_SSL_VERIFY","--stdin","--force") "none" - Run-Beat-Command $beat @("keystore","add","BEAT_DASHBOARDS_ENABLED","--stdin","--force") "true" - Run-Beat-Command $beat @("keystore","add","BEAT_DASHBOARDS_PATH","--stdin","--force") "C:\\Program Files\\$beat\\kibana" - Run-Beat-Command $beat @("keystore","add","BEAT_OS_HOST","--stdin","--force") "$es_host" - Run-Beat-Command $beat @("keystore","add","BEAT_DASHBOARDS_HOST","--stdin","--force") "$kb_host" - Run-Beat-Command $beat @("keystore","add","BEAT_HTTP_USERNAME","--stdin","--force") "$es_user" - Run-Beat-Command $beat @("keystore","add","BEAT_HTTP_PASSWORD","--stdin","--force") "$es_pass" - - Run-Beat-Command $beat @("keystore","list") $null - - $confirmation = Read-Host "Install $beat as a system service (y/n)" - if ($confirmation -eq 'y') { - & "C:\\Program Files\\$beat\\install-service-$beat.ps1" - } -} - -################################################################################ -# Main -# -function Main { - param( [array]$beats) - $tempdir = New-TemporaryFile - remove-item $tempdir; - new-item -type directory -path $tempdir; - cd $tempdir; - - foreach ($beat in $beats) { - cd $tempdir; - - Uninstall-Beat $beat - Download-Beat $beat - Configure-Beat $beat - } - - cd $Env:Temp; - remove-item $tempdir -Recurse; -} - -################################################################################ -# -if ($args.count -eq 0) { - Main @("auditbeat","winlogbeat") -} else { - Main $args -} diff --git a/scripts/beats/windows_vm_example/Vagrantfile b/scripts/beats/windows_vm_example/Vagrantfile deleted file mode 100644 index c04ab35ea..000000000 --- a/scripts/beats/windows_vm_example/Vagrantfile +++ /dev/null @@ -1,94 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -unless Vagrant.has_plugin?("vagrant-reload") - raise 'vagrant-reload plugin is not installed!' -end - -# hack: https://github.com/hashicorp/vagrant/issues/8878#issuecomment-345112810 -class VagrantPlugins::ProviderVirtualBox::Action::Network - def dhcp_server_matches_config?(dhcp_server, config) - true - end -end - -Vagrant.configure("2") do |config| - - config.vm.box = "StefanScherer/windows_10" - - config.vm.network "private_network", type: "dhcp" - - config.vm.synced_folder ".", "c:/vagrant_shared", disabled: true - - if Vagrant.has_plugin?("vagrant-vbguest") - config.vbguest.auto_update = false - end - - config.vm.communicator = "winrm" - - config.winrm.username = "vagrant" - config.winrm.password = "vagrant" - - config.vm.guest = :windows - config.windows.halt_timeout = 15 - - # port forward WinRM and RDP - config.vm.network :forwarded_port, guest: 3389, host: 3389, id: "rdp", auto_correct: true - config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true - - config.vm.provider :virtualbox do |vb, override| - vb.gui = true - vb.customize ["modifyvm", :id, "--memory", 4096] - vb.customize ["modifyvm", :id, "--cpus", 2] - vb.customize ["modifyvm", :id, "--vram", 256] - vb.customize ["modifyvm", :id, "--ioapic", "on"] - vb.customize ["modifyvm", :id, "--nestedpaging", "on"] - vb.customize ["modifyvm", :id, "--pae", "on"] - vb.customize ["modifyvm", :id, "--hwvirtex", "on"] - vb.customize ["modifyvm", :id, "--nested-hw-virt", "on"] - vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"] - vb.customize ["modifyvm", :id, "--accelerate2dvideo", "on"] - vb.customize ["modifyvm", :id, "--accelerate3d", "on"] - vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"] - vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ] - vb.customize ["modifyvm", :id, "--usb", "on"] - vb.customize ["modifyvm", :id, "--usbehci", "on"] - vb.customize ["modifyvm", :id, "--audio", "pulse", "--audiocontroller", "hda"] - end - - config.vm.provision "shell", inline: <<-STEP1 - New-Item -Path 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows' -Name CloudContent | Out-Null - New-ItemProperty -Path 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent' -Name 'DisableWindowsConsumerFeatures' -PropertyType DWORD -Value '1' -Force | Out-Null - New-Item -Path 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\' -Name 'Windows Search' | Out-Null - New-ItemProperty -Path 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Windows Search' -Name 'AllowCortana' -PropertyType DWORD -Value '0' -Force | Out-Null - Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\SQMClient\\Windows' CEIPEnable 0 | Out-Null - schtasks /Change /TN 'Microsoft\\Windows\\Customer Experience Improvement Program\\UsbCeip' /Disable | Out-Null - - taskkill /f /im OneDrive.exe - C:/Windows/SysWOW64/OneDriveSetup.exe /uninstall - STEP1 - config.vm.provision :reload - - config.vm.provision "shell", inline: <<-STEP2 - Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) - choco install -y chocolateygui 7zip.install conemu firefox hackfont putty.install python sublimetext3 sysinternals - - $beats = @("auditbeat","winlogbeat","packetbeat","metricbeat") - foreach ($beat in $beats) { - Invoke-WebRequest -Uri https://artifacts.elastic.co/downloads/beats/$beat/$beat-oss-7.6.2-windows-x86_64.zip -OutFile $beat-7.6.2-windows-x86_64.zip -UseBasicParsing - Expand-Archive -LiteralPath $beat-7.6.2-windows-x86_64.zip -DestinationPath 'C:\\Program Files' - Remove-Item $beat-7.6.2-windows-x86_64.zip - Rename-Item "C:\\Program Files\\$beat-7.6.2-windows-x86_64" "C:\\Program Files\\$beat" - ((Get-Content -path "C:\\Program Files\\$beat\\install-service-$beat.ps1" -Raw) -replace 'ProgramData','Program Files') | Set-Content -Path "C:\\Program Files\\$beat\\install-service-$beat.ps1" - ((Get-Content -path "C:\\Program Files\\$beat\\install-service-$beat.ps1" -Raw) -replace ' -path',' --path') | Set-Content -Path "C:\\Program Files\\$beat\\install-service-$beat.ps1" - } - STEP2 - - ["auditbeat","winlogbeat","packetbeat","metricbeat"].to_enum.with_index(1).each do |beat, i| - config.vm.provision "file", source: "./#{beat}.yml", destination: "C:\\Program Files\\#{beat}\\#{beat}.yml" - config.vm.provision "file", source: "../beat_run.py", destination: "C:\\Program Files\\#{beat}\\beat_run.py" - config.vm.provision "file", source: "../beat_config.py", destination: "C:\\Program Files\\#{beat}\\beat_config.py" - config.vm.provision "file", source: "../beat_common.py", destination: "C:\\Program Files\\#{beat}\\beat_common.py" - end -end - diff --git a/scripts/beats/windows_vm_example/auditbeat.yml b/scripts/beats/windows_vm_example/auditbeat.yml deleted file mode 100644 index 7581e24db..000000000 --- a/scripts/beats/windows_vm_example/auditbeat.yml +++ /dev/null @@ -1,79 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-reference-yml.html - -# Thanks to "The Windows File Auditing Logging Cheat Sheet" at -# https://www.malwarearchaeology.com/cheat-sheets - -# ============================================================================== - -auditbeat.modules: - -#------------------------------- file_integrity Module ----------------------- - -- module: file_integrity - paths: - - C:/Program Files - - C:/Program Files/Internet Explorer - - C:/Program Files/Common Files - - C:/Program Files (x86) - - C:/Program Files (x86) /Common Files - - C:/ProgramData - - C:/Windows - - C:/Windows/System32 - - C:/Windows/System32/Drivers - - C:/Windows/System32/Drivers/etc - - C:/Windows/System32/Sysprep - - C:/Windows/System32/wbem - - C:/Windows/System32/WindowsPowerShell/v1.0 - - C:/Windows/Web - - C:/Windows/SysWOW64 - - C:/Windows/SysWOW64/Drivers - - C:/Windows/SysWOW64/wbem - - C:/Windows/SysWOW64/WindowsPowerShell/v1.0 - recursive: false - -- module: file_integrity - paths: - - C:/Boot - - C:/Perflogs - - C:/Users/All Users/Microsoft/Windows/Start Menu/Programs/Startup - - C:/Users/Public - # todo: wildcards handled? - # - C:/Users/*/AppData/Local - # - C:/Users/*/AppData/Local/Temp - # - C:/Users/*/AppData/LocalLow - # - C:/Users/*/AppData/Roaming - - C:/Windows/Scripts - - C:/Windows/System - - C:/Windows/System32/GroupPolicy/Machine/Scripts/Startup - - C:/Windows/System32/GroupPolicy/Machine/Scripts/Shutdown - - C:/Windows/System32/GroupPolicy/User/Scripts/Logon - - C:/Windows/System32/GroupPolicy/User/Scripts/Logoff - - C:/Windows/System32/Repl - recursive: true - - # examples for exclusions if things are noisy - # exclude_files: - # - '(?i)\.blf$' - # - '(?i)\.dat$' - # - '(?i)\.lnk$' - # - '(?i)\.log\w*$' - # - '(?i)\.mum$' - # - '(?i)\.regtrans-ms$' - # - '(?i)\.swp$' - # - '(?i)\.tmp$' - # - '(?i)beat\.(lock|yml(\.new)?|db)$' - # - '(?i)\\(assembly|CatRoot|CbsTemp|databases?|Deleted|diagnostics?|Log(File)?s?|Notifications?|Packages?|Prefetch|schemas?|servicing|Sessions?|SleepStudy|SoftwareDistribution|Tasks?|Temp|tracing|wbem|WinMetadata|WinSAT|WinSxS)\\?' - # - '(?i)cache' - -# TODO: system module is apparently only available in the non-OSS basic license :-( - -# - module: system -# datasets: -# - host # General host information, e.g. uptime, IPs -# period: 1m -# state.period: 1h - -# - module: system -# datasets: -# - process # Started and stopped processes -# period: 1s diff --git a/scripts/beats/windows_vm_example/metricbeat.yml b/scripts/beats/windows_vm_example/metricbeat.yml deleted file mode 100644 index d0f054791..000000000 --- a/scripts/beats/windows_vm_example/metricbeat.yml +++ /dev/null @@ -1,65 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-reference-yml.html - -# ============================================================================== - -metricbeat.config.modules: - path: ${path.config}/conf.d/*.yml - reload.period: 10s - reload.enabled: false - -metricbeat.max_start_delay: 10s - -metricbeat.modules: - -#------------------------------- System Module ------------------------------- - -- module: system - period: 30s - metricsets: - - cpu # CPU usage - - memory # Memory usage - - network # Network IO - - process # Per process metrics - - process_summary # Process summary - - uptime # System Uptime - - diskio # Disk IO - enabled: true - processes: ['.*'] - process.include_top_n: - enabled: true - by_cpu: 10 - by_memory: 10 - - cpu.metrics: ["percentages"] - core.metrics: ["percentages"] - -- module: system - period: 1m - metricsets: - - filesystem # File system usage for each mountpoint - - fsstat # File system summary metrics - enabled: true - -- module: windows - metricsets: ["perfmon"] - enabled: true - period: 10s - perfmon.ignore_non_existent_counters: false - perfmon.group_measurements_by_instance: true - perfmon.queries: - - object: "Process" - instance: ["svchost*", "conhost*"] - counters: - - name: "% Processor Time" - field: time.processor.pct - format: "float" - perfmon.counters: - - instance_label: processor.name - instance_name: total - measurement_label: processor.time.total.pct - query: '\Processor Information(_Total)\% Processor Time' - -- module: windows - metricsets: ["service"] - enabled: true - period: 60s \ No newline at end of file diff --git a/scripts/beats/windows_vm_example/packetbeat.yml b/scripts/beats/windows_vm_example/packetbeat.yml deleted file mode 100644 index 9d24474a0..000000000 --- a/scripts/beats/windows_vm_example/packetbeat.yml +++ /dev/null @@ -1,90 +0,0 @@ -# See https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-reference-yml.html - -# ============================================================================== - -# packetbeat.exe requires Npcap (https://nmap.org/npcap/#download) to be installed - - -#------------------------------- network device ------------------------------ - -packetbeat.interfaces.device: 0 -packetbeat.interfaces.type: pcap -packetbeat.interfaces.snaplen: 65535 - -#------------------------------- flows --------------------------------------- - -packetbeat.flows: - enabled: true - timeout: 30s - period: 10s - -#------------------------------- transaction protocols ----------------------- - -packetbeat.protocols: -- type: icmp - enabled: true - -- type: amqp - enabled: true - ports: [5672] - -- type: cassandra - enabled: true - ports: [9042] - -- type: dhcpv4 - enabled: true - ports: [67, 68] - -- type: dns - enabled: true - ports: [53] - include_authorities: true - include_additionals: true - -- type: http - enabled: true - ports: [80, 8080, 8000, 5000, 8002] - -- type: memcache - enabled: true - ports: [11211] - -- type: mysql - enabled: true - ports: [3306,3307] - -- type: pgsql - enabled: true - ports: [5432] - -- type: redis - enabled: true - ports: [6379] - -- type: thrift - enabled: true - ports: [9090] - -- type: mongodb - enabled: true - ports: [27017] - -- type: nfs - enabled: true - ports: [2049] - -- type: tls - enabled: true - ports: - - 443 # HTTPS - - 993 # IMAPS - - 995 # POP3S - - 5223 # XMPP over SSL - - 8883 # Secure MQTT - - 9243 # Elasticsearch - -#------------------------------- monitored processes ------------------------- - -packetbeat.procs.enabled: true -packetbeat.ignore_outgoing: false diff --git a/scripts/beats/windows_vm_example/winlogbeat.yml b/scripts/beats/windows_vm_example/winlogbeat.yml deleted file mode 100644 index c58d66874..000000000 --- a/scripts/beats/windows_vm_example/winlogbeat.yml +++ /dev/null @@ -1,43 +0,0 @@ -# see https://www.elastic.co/guide/en/beats/winlogbeat/master/winlogbeat-reference-yml.html - -# also see some of these excellent cheat sheets for Windows logging: -# https://www.malwarearchaeology.com/cheat-sheets - -# ============================================================================== - -#------------------------------- event logs ---------------------------------- - -winlogbeat.event_logs: - - name: AMSI/Operational - - name: Application - ignore_older: 72h - - name: ForwardedEvents - tags: ["forwarded"] - - name: Internet Explorer - - name: Microsoft-Windows-LSA/Operational - - name: Microsoft-Windows-PowerShell/Admin - - name: Microsoft-Windows-PowerShell/Operational - - name: Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational - - name: Microsoft-Windows-Windows Defender/Operational - - name: Microsoft-Windows-Windows Defender/WHC - - name: Microsoft-Windows-Windows Firewall With Advanced Security/Firewall - - name: Microsoft-Windows-WMI-Activity/Operational - - name: OpenSSH/Admin - - name: OpenSSH/Operational - - # TODO: the Security and Sysmon modules are apparently only available in the non-OSS basic license :-( - - # - name: Security - # processors: - # - script: - # lang: javascript - # id: security - # file: ${path.home}/module/security/config/winlogbeat-security.js - # - name: System - # - name: Windows PowerShell - # - name: Microsoft-Windows-Sysmon/Operational - # processors: - # - script: - # lang: javascript - # id: sysmon - # file: ${path.home}/module/sysmon/config/winlogbeat-sysmon.js diff --git a/sensor-iso/README.md b/sensor-iso/README.md index eee546b7d..2373c3dc2 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -1,4 +1,4 @@ -TODO: update for beats replaced by fluentd +TODO: update for beats replaced by fluentd. make sure you include wording about STIG # Hedgehog Linux ## Network Traffic Capture Appliance @@ -33,7 +33,6 @@ Hedgehog Linux is a Debian-based operating system built to * [filebeat](#filebeat): Zeek and Suricata log forwarding * [arkime-capture](#arkime-capture): Arkime session forwarding * [metricbeat](#metricbeat): resource statistics forwarding - * [auditbeat](#auditbeat): audit log forwarding * [heatbeat](#heatbeat): temperature forwarding + [Autostart services](#ConfigAutostart) + [Zeek Intelligence Framework](#ZeekIntel) @@ -292,12 +291,6 @@ Next, select the OpenSearch connection transport protocol, either **HTTPS** or * The remainder of the configuration for metricbeat will proceed as described in the [filebeat](#filebeat) steps outlined above. -### auditbeat: audit log forwarding - -The sensor uses [auditbeat](https://www.elastic.co/products/beats/auditbeat) to forward auditd logs, process and socket statistics, and sensor system file integrity information to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. - -The sensor implements STIG (Security Technical Implementation Guidelines) rules according to DISA RHEL 7 STIG V1 R1, ported to a Debian 9 base platform. Enabling audit log forwarding via auditbeat is required to satisfy the requirements regarding forwarding audit logs to a remote log server as defined in that specification. - ### heatbeat: temperature forwarding The sensor employs a custom agent using the beats protocol to forward hardware metrics such as CPU and storage device temperatures, system voltages, and fan speeds (when applicable) to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. @@ -308,7 +301,8 @@ Once the forwarders have been configured, the final step is to **Configure Autos Despite configuring capture and/or forwarder services as described in previous sections, only services enabled in the autostart configuration will run when the sensor starts up. The available autostart processes are as follows (recommended services are in **bold text**): -* **AUTOSTART_AUDITBEAT** – [auditbeat](#auditbeat) audit log forwarder +TODO: update this: + * **AUTOSTART_CLAMAV_UPDATES** – Virus database update service for ClamAV (requires sensor to be connected to the internet) * **AUTOSTART_FILEBEAT** – [filebeat](#filebeat) Zeek log forwarder * **AUTOSTART_HEATBEAT** – [sensor hardware](#heatbeat) (eg., CPU and storage device temperature) metrics forwarder @@ -339,6 +333,8 @@ After you have completed configuring the sensor it is recommended that you reboo This will cause the sensor services controller to stop, wait a few seconds, and restart. You can check the status of the sensor's processes by choosing **Sensor Status** from the sensor's kiosk mode, double-clicking the **Sensor Service Status** desktop icon, or running `/opt/sensor/sensor_ctl/status` from the command line: +* TODO: update this + ``` $ /opt/sensor/sensor_ctl/status beats:auditbeat RUNNING pid 14470, uptime 8 days, 20:22:32 @@ -492,6 +488,9 @@ Hedgehog Linux claims the following exceptions to STIG compliance: Please review the notes for these additional rules. While not claiming an exception, they may be implemented or checked in a different way than outlined by the RHEL STIG as Hedgehog Linux is not built on RHEL or for other reasons. +* TODO: auditbeat has been removed in favor of fluentbit, check what needs to be added here + + | # | ID | Title | Note | | --- | --- | --- | --- | | 1 | [SV-86585r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71961) | Systems with a Basic Input/Output System (BIOS) must require authentication upon booting into single-user and maintenance modes. | Although the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) does not detect it, booting into recovery mode *does* in fact require the root password. | @@ -551,7 +550,7 @@ Please review the notes for these additional guidelines. While not claiming an e **7.4.4 Create /etc/hosts.deny**, **7.7.1 Ensure Firewall is active**, **7.7.4.1 Ensure default deny firewall policy**, **7.7.4.3 Ensure default deny firewall policy**, **7.7.4.4 Ensure outbound and established connections are configured** - Hedgehog Linux **is** configured with an appropriately locked-down software firewall (managed by "Uncomplicated Firewall" `ufw`). However, the methods outlined in the CIS benchmark recommendations do not account for this configuration. -**8.1.1.2 Disable System on Audit Log Full**, **8.1.1.3 Keep All Auditing Information**, **8.1.1.5 Ensure set remote server for audit service**, **8.1.1.6 Ensure enable_krb5 set to yes for remote audit service**, **8.1.1.7 Ensure set action for audit storage volume is fulled**, **8.1.1.9 Set space left for auditd service**, a few other audit-related items under section **8.1**, **8.2.5 Configure rsyslog to Send Logs to a Remote Log Host** - As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. Because Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications about its status are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. [Auditbeat](https://www.elastic.co/products/beats/auditbeat) offloads audit records to an OpenSearch database on another system, though this is not detected by the [CIS benchmark compliance scripts](https://github.com/hardenedlinux/harbian-audit/tree/master/bin/hardening). Local logs are generated when the network connection is broken, and it resumes automatically. Syslog messages are also similarly forwarded. +**8.1.1.2 Disable System on Audit Log Full**, **8.1.1.3 Keep All Auditing Information**, **8.1.1.5 Ensure set remote server for audit service**, **8.1.1.6 Ensure enable_krb5 set to yes for remote audit service**, **8.1.1.7 Ensure set action for audit storage volume is fulled**, **8.1.1.9 Set space left for auditd service**, a few other audit-related items under section **8.1**, **8.2.5 Configure rsyslog to Send Logs to a Remote Log Host** - As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. Because Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications about its status are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. [Fluent Bit](https://fluentbit.io) offloads audit records to an OpenSearch database on another system, though this is not detected by the [CIS benchmark compliance scripts](https://github.com/hardenedlinux/harbian-audit/tree/master/bin/hardening). Local logs are generated when the network connection is broken, and it resumes automatically. Syslog messages are also similarly forwarded. **8.4.1 Install aide package** and **8.4.2 Implement Periodic Execution of File Integrity** - [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` utility. diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index f2b57d3a3..a377fbc41 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -111,7 +111,7 @@ EOF # set up default zeek local policy cp -f /usr/local/etc/zeek/*.zeek /usr/local/etc/zeek/*.txt "${ZEEK_DIR}"/share/zeek/site/ -mkdir -p /opt/sensor/sensor_ctl/zeek/intel/STIX /opt/sensor/sensor_ctl/zeek/intel/MISP +mkdir -p /opt/sensor/sensor_ctl/zeek/intel/STIX /opt/sensor/sensor_ctl/zeek/intel/MISP /opt/sensor/sensor_ctl/fluentbit touch /opt/sensor/sensor_ctl/zeek/intel/__load__.zeek [[ -f /usr/local/bin/zeek_intel_setup.sh ]] && mv /usr/local/bin/zeek_intel_setup.sh "${ZEEK_DIR}"/bin/ [[ -f /usr/local/bin/zeek_intel_from_threat_feed.py ]] && mv /usr/local/bin/zeek*threat*.py "${ZEEK_DIR}"/bin/ @@ -205,8 +205,8 @@ freshclam --stdout --quiet --no-warnings ### -# install filebeat/metricbeat/auditbeat -for BEAT in filebeat metricbeat auditbeat; do +# install filebeat/metricbeat +for BEAT in filebeat metricbeat; do BEATS_URL="$(echo "$BEATS_DEB_URL_TEMPLATE" | sed "s/$BEATS_DEB_URL_TEMPLATE_REPLACER/$BEAT/g")" BEATS_DEB="$BEAT-$BEATS_VER-amd64.deb" pushd /tmp && \ @@ -232,8 +232,6 @@ chown root:netdev /usr/bin/tcpdump && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/tcpdump chown root:netdev /usr/bin/suricata && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /usr/bin/suricata -chown root:netdev /usr/share/auditbeat/bin/auditbeat && \ - setcap 'CAP_AUDIT_READ+eip' /usr/share/auditbeat/bin/auditbeat chown root:netdev /opt/arkime/bin/capture && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /opt/arkime/bin/capture diff --git a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot index a4af28bd8..893732cb5 100755 --- a/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot +++ b/sensor-iso/config/hooks/normal/0991-security-performance.hook.chroot @@ -142,6 +142,14 @@ sed -i "s/#[[:space:]]*HTP_DAEMON=.*/HTP_DAEMON=no/" /etc/default/htpdate # disable default fluentbit configuration systemctl disable fluent-bit || true +# add fluentbit logfmt parser +cat << 'EOF' >> /etc/fluent-bit/parsers.conf + +[PARSER] + Name logfmt + Format logfmt +EOF + # remove identifying operating system information truncate -s 0 /etc/motd sed -i "s/Debian/Hedgehog/g" /etc/issue diff --git a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml b/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml deleted file mode 100644 index 8b8a1cca7..000000000 --- a/sensor-iso/interface/sensor_ctl/auditbeat/auditbeat.yml +++ /dev/null @@ -1,311 +0,0 @@ -#========================== Modules configuration ============================= -auditbeat.modules: - -- module: auditd - socket_type: multicast - resolve_ids: true - failure_mode: log - backlog_limit: 16384 - rate_limit: 0 - include_raw_message: false - include_warnings: false - backpressure_strategy: auto - # audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ] - # no rules specified, auditd will run and manage rules - # see https://www.elastic.co/guide/en/beats/auditbeat/master/auditbeat-module-auditd.html - - # don't forward some things that are always going to be happening - # (/proc/ accesses by beats and browser for the kiosk) to cut down on noise - # and some other approved common stuff that would clutter the logs - processors: - - drop_event: - when: - or: - - and: - - equals: - auditd.data.syscall: 'setsockopt' - - equals: - auditd.summary.object.type: 'network-device' - - or: - - equals: - auditd.summary.how: '/usr/bin/tcpdump' - - equals: - auditd.summary.how: '/opt/zeek/bin/zeek' - - equals: - auditd.summary.how: '/usr/sbin/netsniff-ng' - - equals: - auditd.summary.how: '/opt/arkime/bin/capture' - - and: - - equals: - auditd.message_type: 'syscall' - - equals: - auditd.summary.object.type: 'file' - - or: - - and: - - or: - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - regexp: - auditd.summary.object.primary: '^/(proc/|etc/localtime|usr/lib/x86_64-linux-gnu/gconv/gconv-modules\.cache)' - - or: - - equals: - auditd.summary.how: '/usr/share/auditbeat/bin/auditbeat' - - equals: - auditd.summary.how: '/usr/share/metricbeat/bin/metricbeat' - - equals: - auditd.summary.how: '/opt/firefox/firefox-bin' - - equals: - auditd.summary.how: '/opt/firefox/firefox' - - equals: - auditd.summary.how: '/usr/bin/tcpdump' - - equals: - auditd.summary.how: '/opt/zeek/bin/zeek' - - equals: - auditd.summary.how: '/usr/sbin/netsniff-ng' - - equals: - auditd.summary.how: '/opt/arkime/bin/capture' - - and: - - or: - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - not: - has_fields: ['auditd.summary.object.primary'] - - or: - - equals: - auditd.summary.how: 'supervisorctl' - - equals: - auditd.summary.how: '/usr/share/metricbeat/bin/metricbeat' - - and: - - equals: - auditd.data.syscall: 'open' - - regexp: - auditd.summary.object.primary: '^/dev/' - - equals: - auditd.summary.how: '/usr/sbin/hddtemp' - - and: - - equals: - auditd.data.syscall: 'open' - - regexp: - auditd.summary.object.primary: '^/.+/__pycache__/$' - - regexp: - auditd.summary.how: '^python3' - - and: - - or: - - equals: - auditd.summary.how: 'bash' - - equals: - auditd.summary.how: '/bin/bash' - - equals: - auditd.summary.actor.primary: 'sensor' - - equals: - auditd.data.syscall: 'chown' - - equals: - auditd.summary.object.primary: '/home/sensor/.bash_history' - - and: - - equals: - auditd.summary.how: '/opt/firefox/firefox-bin' - - equals: - auditd.summary.actor.primary: 'sensor' - - or: - - equals: - auditd.data.syscall: 'chmod' - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - equals: - auditd.data.syscall: 'rename' - - equals: - auditd.data.syscall: 'renameat' - - equals: - auditd.data.syscall: 'rmdir' - - equals: - auditd.data.syscall: 'unlink' - - or: - - regexp: - auditd.summary.object.primary: '^/home/sensor/\.(cache/)?mozilla/firefox/' - - regexp: - auditd.summary.object.primary: '^/home/sensor/\.config/mimeapps\.' - - regexp: - auditd.summary.object.primary: '^/tmp/(Temp-|firefox)' - - equals: - auditd.summary.object.primary: '/opt/firefox/fonts/' - - and: - - or: - - equals: - auditd.data.syscall: 'open' - - equals: - auditd.data.syscall: 'openat' - - equals: - auditd.data.syscall: 'unlink' - - equals: - auditd.data.syscall: 'rename' - - equals: - auditd.data.syscall: 'renameat' - - regexp: - auditd.summary.object.primary: '^/(capture/|usr/lib/python)' - - or: - - equals: - auditd.summary.how: 'zeekctl' - - equals: - auditd.summary.how: 'supervisorctl' - - and: - - equals: - auditd.summary.object.primary: '/opt/sensor/sensor_ctl/filebeat/data/registry/filebeat/data.json' - - equals: - auditd.summary.how: '/usr/share/filebeat/bin/filebeat' - # I don't like filtering this, but see https://github.com/zeek/zeek/issues/259#issuecomment-564735946 - # zeekctl is doing this, but there's nothing to indicate that's what it is. - # For now I've tried to narrow it as much as possible, because it's *so* much noise - - and: - - or: - - equals: - auditd.data.syscall: 'unlink' - - equals: - auditd.data.syscall: 'openat' - - equals: - auditd.result: 'fail' - - equals: - auditd.summary.how: 'python' - - regexp: - auditd.summary.object.primary: '^/usr/lib/python' - - -- module: file_integrity - paths: - - /bin - - /opt/zeek - - /sbin - - /usr/bin - - /usr/local/bin - - /usr/sbin - -# system module is experimental: https://www.elastic.co/blog/introducing-auditbeat-system-module -# ALSO system module is ONLY available with non-OSS license - -# - module: system -# datasets: -# - host # General host information, e.g. uptime, IPs -# - user # User information -# period: 1m -# user.detect_password_changes: true - -# - module: system -# datasets: -# - process # Started and stopped processes -# - socket # Opened and closed sockets -# period: 1s - -# # drop noise -# processors: -# - drop_event: -# when: -# or: -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: '127.0.0.1' -# - equals: -# source.ip: '127.0.0.1' -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: "${BEAT_OS_HOST}" -# - equals: -# destination.port: "${BEAT_OS_PORT}" -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'socket' -# - equals: -# destination.ip: "${BEAT_DASHBOARDS_HOST}" -# - equals: -# destination.port: "${BEAT_DASHBOARDS_PORT}" -# - and: -# - equals: -# event.module: 'system' -# - equals: -# event.dataset: 'process' -# - or: -# - equals: -# process.executable: '/bin/sleep' -# - equals: -# process.executable: '/usr/bin/sort' -# - equals: -# process.executable: '/usr/bin/tail' -# - equals: -# process.executable: '/usr/bin/clear' -# - equals: -# process.executable: '/usr/bin/head' -# - equals: -# process.executable: '/bin/date' -# - equals: -# process.executable: '/bin/ls' -# - equals: -# process.executable: '/usr/bin/stat' -# - equals: -# process.executable: '/usr/bin/cut' -# - equals: -# process.executable: '/usr/bin/xargs' -# - equals: -# process.executable: '/usr/bin/tr' -# - equals: -# process.executable: '/bin/grep' -# - equals: -# process.executable: '/bin/sed' -# - equals: -# process.executable: '/bin/df' -# - equals: -# process.executable: '/usr/bin/du' -# - equals: -# process.executable: '/usr/bin/gawk' -# - and: -# - equals: -# process.executable: '/bin/bash' -# - contains: -# process.args: '/usr/local/bin/prune_files.sh' -# - and: -# - equals: -# process.executable: '/usr/bin/find' -# - contains: -# process.args: '-xdev' -# - contains: -# process.args: '-mindepth' -# - contains: -# process.args: '-maxdepth' -# - contains: -# process.args: '-printf' - -#================================ General ====================================== -fields_under_root: true - -processors: - - add_tags: - tags: [_malcolm_beats, _malcolm_auditbeat] - -#================================ Outputs ====================================== - -#-------------------------- Logstash Output ------------------------------------ -output.logstash: - hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] - ssl.enabled: ${BEAT_LS_SSL:false} - ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] - ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" - ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" - ssl.supported_protocols: "TLSv1.2" - ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false - diff --git a/sensor-iso/interface/sensor_ctl/auditbeat/sensor_auditbeat_local.sh b/sensor-iso/interface/sensor_ctl/auditbeat/sensor_auditbeat_local.sh deleted file mode 100755 index d27510de4..000000000 --- a/sensor-iso/interface/sensor_ctl/auditbeat/sensor_auditbeat_local.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -# force-navigate to script directory (containing config file) -[[ "$(uname -s)" = 'Darwin' ]] && REALPATH=grealpath || REALPATH=realpath -[[ "$(uname -s)" = 'Darwin' ]] && DIRNAME=gdirname || DIRNAME=dirname -if ! (type "$REALPATH" && type "$DIRNAME") > /dev/null; then - echo "$(basename "${BASH_SOURCE[0]}") requires $REALPATH and $DIRNAME" - exit 1 -fi -SCRIPT_PATH="$($DIRNAME $($REALPATH -e "${BASH_SOURCE[0]}"))" -pushd "$SCRIPT_PATH" >/dev/null 2>&1 - -mkdir -p "$SCRIPT_PATH/data" - -auditbeat --path.home "$SCRIPT_PATH" --path.config "$SCRIPT_PATH" --path.data "$SCRIPT_PATH/data" -c "$SCRIPT_PATH/auditbeat.yml" -e - -popd >/dev/null 2>&1 diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 0c0571882..1eb356980 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -20,7 +20,7 @@ export HEATBEAT_PORT=9515 export HEATBEAT_INTERVAL=10 export MISCBEAT_PORT=9516 -export FLUENTBIT_METRIC_INTERVAL=30 +export FLUENTBIT_METRICS_INTERVAL=30 export ZEEK_LOG_PATH=/home/sensor/bro_logs export ZEEK_MAX_DISK_FILL=90 @@ -107,10 +107,11 @@ export ZEEK_FILE_SCAN_YARA=false export ZEEK_FILE_SCAN_CAPA=false export AUTOSTART_ARKIME=false -export AUTOSTART_AUDITBEAT=false export AUTOSTART_CLAMAV_UPDATES=false export AUTOSTART_FILEBEAT=false -export AUTOSTART_FLUENTBIT_METRIC=false +export AUTOSTART_FLUENTBIT_AUDITLOG=false +export AUTOSTART_FLUENTBIT_KMSG=false +export AUTOSTART_FLUENTBIT_METRICS=false export AUTOSTART_FLUENTBIT_NETIF=false export AUTOSTART_FLUENTBIT_SYSLOG=false export AUTOSTART_HEATBEAT=false diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf index 808634ef4..f0174412a 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf @@ -1,5 +1,5 @@ [group:beats] -programs=filebeat,metricbeat,auditbeat,heatbeat,sensors +programs=filebeat,metricbeat,miscbeat,heatbeat,sensors [program:filebeat] environment=ZEEK_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/logs/current,SURICATA_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/suricata @@ -20,15 +20,6 @@ killasgroup=true autostart=%(ENV_AUTOSTART_METRICBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/metricbeat -[program:auditbeat] -command=bash -l %(ENV_SUPERVISOR_PATH)s/auditbeat/sensor_auditbeat_local.sh -startsecs=5 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_AUDITBEAT)s -directory=%(ENV_SUPERVISOR_PATH)s/auditbeat - [program:miscbeat] command=bash -l %(ENV_SUPERVISOR_PATH)s/miscbeat/sensor_miscbeat_local.sh startsecs=5 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-auditlog.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-auditlog.conf new file mode 100644 index 000000000..5e7c5d4b2 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-auditlog.conf @@ -0,0 +1,19 @@ +[program:fluentbit-auditlog] +command=/opt/fluent-bit/bin/fluent-bit + -R /etc/fluent-bit/parsers.conf + -i tail + -p path=/var/log/audit/audit.log + -p parser=logfmt + -p Skip_Long_Lines=On + -p Skip_Empty_Lines=On + -p DB="%(ENV_SUPERVISOR_PATH)s/fluentbit/auditlog.db" + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F nest -p Operation=nest -p Nested_under=auditlog -p WildCard='*' -m '*' + -F record_modifier -p "Record=module auditlog" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_AUDITLOG)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-kmsg.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-kmsg.conf new file mode 100644 index 000000000..8f098c0c8 --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-kmsg.conf @@ -0,0 +1,13 @@ +[program:fluentbit-kmsg] +command=/opt/fluent-bit/bin/fluent-bit + -i kmsg + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F nest -p Operation=nest -p Nested_under=kmsg -p WildCard='*' -m '*' + -F record_modifier -p "Record=module kmsg" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_KMSG)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf index b5e50787c..00b6109c7 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf @@ -5,59 +5,63 @@ programs=cpu,disk,mem,mem_p [program:cpu] command=/opt/fluent-bit/bin/fluent-bit -i cpu - -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines + -F nest -p Operation=nest -p Nested_under=cpu -p WildCard='*' -m '*' -F record_modifier -p "Record=module cpu" -m '*' -f 1 startsecs=20 startretries=3 stopasgroup=true killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s [program:disk] command=/opt/fluent-bit/bin/fluent-bit -i disk - -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines + -F nest -p Operation=nest -p Nested_under=disk -p WildCard='*' -m '*' -F record_modifier -p "Record=module disk" -m '*' -f 1 startsecs=20 startretries=3 stopasgroup=true killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s [program:mem] command=/opt/fluent-bit/bin/fluent-bit -i mem - -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines + -F nest -p Operation=nest -p Nested_under=mem -p WildCard='*' -m '*' -F record_modifier -p "Record=module mem" -m '*' -f 1 startsecs=20 startretries=3 stopasgroup=true killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s [program:mem_p] command=/opt/fluent-bit/bin/fluent-bit -i exec -p "command= /usr/local/bin/memory_usage_percentage.sh" - -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines -F modify -p "Hard_rename=exec Mem.used_p" -m '*' + -F nest -p Operation=nest -p Nested_under=mem -p WildCard='*' -m '*' -F record_modifier -p "Record=module mem" -m '*' -f 1 startsecs=20 startretries=3 stopasgroup=true killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_METRIC)s +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s # netif is managed in a template per-interface (fluentbit-netif.template) \ No newline at end of file diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template index 5ed4f90a6..db732e7b0 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template @@ -2,9 +2,10 @@ command=/opt/fluent-bit/bin/fluent-bit -i netif -p interface=$IFACE - -p Interval_Sec=%(ENV_FLUENTBIT_METRIC_INTERVAL)s + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines + -F nest -p Operation=nest -p Nested_under=netif -p WildCard='*' -m '*' -F record_modifier -p "Record=module netif" -m '*' -f 1 startsecs=20 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf index 69bc82870..487f24366 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-syslog.conf @@ -10,6 +10,7 @@ command=/opt/fluent-bit/bin/fluent-bit -p Buffer_Max_Size=64000 -o tcp://localhost:%(ENV_MISCBEAT_PORT)s -p format=json_lines + -F nest -p Operation=nest -p Nested_under=syslog -p WildCard='*' -m '*' -F record_modifier -p "Record=module syslog" -m '*' -f 1 startsecs=20 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/suricata.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/suricata.conf index 67d15e07d..460026948 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/suricata.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/suricata.conf @@ -1,9 +1,9 @@ [program:suricata] command=/usr/bin/suricata -v - -c /opt/sensor/sensor_ctl/suricata/suricata.yaml + -c "%(ENV_SUPERVISOR_PATH)s/suricata/suricata.yaml" -l "%(ENV_ZEEK_LOG_PATH)s/suricata" - --pidfile /opt/sensor/sensor_ctl/suricata/suricata.pid + --pidfile "%(ENV_SUPERVISOR_PATH)s/suricata/suricata.pid" --af-packet user=sensor autostart=%(ENV_AUTOSTART_SURICATA)s diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index f8b9ee246..953a083aa 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -55,7 +55,6 @@ class Constants: FILEBEAT = 'filebeat' METRICBEAT = 'metricbeat' - AUDITBEAT = 'auditbeat' HEATBEAT = 'heatbeat' # protologbeat to log temperature and other misc. stuff MISCBEAT = 'miscbeat' # protologbeat to log from fluent-bit as we investigate that tool ARKIMECAP = 'arkime-capture' @@ -63,7 +62,6 @@ class Constants: BEAT_DIR = { FILEBEAT: f'/opt/sensor/sensor_ctl/{FILEBEAT}', METRICBEAT: f'/opt/sensor/sensor_ctl/{METRICBEAT}', - AUDITBEAT: f'/opt/sensor/sensor_ctl/{AUDITBEAT}', HEATBEAT: f'/opt/sensor/sensor_ctl/{HEATBEAT}', MISCBEAT: f'/opt/sensor/sensor_ctl/{MISCBEAT}', } @@ -71,12 +69,11 @@ class Constants: BEAT_CMD = { FILEBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[FILEBEAT]}" --path.config "{BEAT_DIR[FILEBEAT]}" --path.data "{BEAT_DIR[FILEBEAT]}/data" --path.logs "{BEAT_DIR[FILEBEAT]}/logs" -c "{BEAT_DIR[FILEBEAT]}/{FILEBEAT}.yml"', METRICBEAT: f'{METRICBEAT} --path.home "{BEAT_DIR[METRICBEAT]}" --path.config "{BEAT_DIR[METRICBEAT]}" --path.data "{BEAT_DIR[METRICBEAT]}/data" --path.logs "{BEAT_DIR[METRICBEAT]}/logs" -c "{BEAT_DIR[METRICBEAT]}/{METRICBEAT}.yml"', - AUDITBEAT: f'{AUDITBEAT} --path.home "{BEAT_DIR[AUDITBEAT]}" --path.config "{BEAT_DIR[AUDITBEAT]}" --path.data "{BEAT_DIR[AUDITBEAT]}/data" --path.logs "{BEAT_DIR[AUDITBEAT]}/logs" -c "{BEAT_DIR[AUDITBEAT]}/{AUDITBEAT}.yml"', HEATBEAT: f'protologbeat --path.home "{BEAT_DIR[HEATBEAT]}" --path.config "{BEAT_DIR[HEATBEAT]}" --path.data "{BEAT_DIR[HEATBEAT]}/data" --path.logs "{BEAT_DIR[HEATBEAT]}/logs" -c "{BEAT_DIR[HEATBEAT]}/protologbeat.yml"', MISCBEAT: f'protologbeat --path.home "{BEAT_DIR[MISCBEAT]}" --path.config "{BEAT_DIR[MISCBEAT]}" --path.data "{BEAT_DIR[MISCBEAT]}/data" --path.logs "{BEAT_DIR[MISCBEAT]}/logs" -c "{BEAT_DIR[MISCBEAT]}/protologbeat.yml"', } - # specific to beats forwarded to logstash (eg., filebeat, metricbeat, auditbeat, etc.) + # specific to beats forwarded to logstash (eg., filebeat, metricbeat, etc.) BEAT_LS_HOST = 'BEAT_LS_HOST' BEAT_LS_PORT = 'BEAT_LS_PORT' BEAT_LS_SSL = 'BEAT_LS_SSL' @@ -120,7 +117,6 @@ class Constants: MSG_CONFIG_ARKIME = (f'{ARKIMECAP}', f'Configure Arkime session forwarding via {ARKIMECAP}') MSG_CONFIG_FILEBEAT = (f'{FILEBEAT}', f'Configure Zeek log forwarding via {FILEBEAT}') MSG_CONFIG_METRICBEAT = (f'{METRICBEAT}', f'Configure resource metrics forwarding via {METRICBEAT}') - MSG_CONFIG_AUDITBEAT = (f'{AUDITBEAT}', f'Configure audit log forwarding via {AUDITBEAT}') MSG_CONFIG_HEATBEAT = (f'{HEATBEAT}', f'Configure hardware metrics (temperature, etc.) forwarding via protologbeat') MSG_CONFIG_MISCBEAT = (f'{MISCBEAT}', f'Configure miscellaneous log forwarding via protologbeat') MSG_OVERWRITE_CONFIG = '{} is already configured, overwrite current settings?' @@ -802,7 +798,6 @@ def main(): Constants.MSG_CONFIG_ARKIME, Constants.MSG_CONFIG_FILEBEAT, Constants.MSG_CONFIG_METRICBEAT, - Constants.MSG_CONFIG_AUDITBEAT, Constants.MSG_CONFIG_HEATBEAT, Constants.MSG_CONFIG_MISCBEAT, ], @@ -894,7 +889,6 @@ def main(): elif ( (fwd_mode == Constants.FILEBEAT) or (fwd_mode == Constants.METRICBEAT) - or (fwd_mode == Constants.AUDITBEAT) or (fwd_mode == Constants.HEATBEAT) or (fwd_mode == Constants.MISCBEAT) ): diff --git a/shared/bin/sensor-init.sh b/shared/bin/sensor-init.sh index 201ccc063..457106f11 100755 --- a/shared/bin/sensor-init.sh +++ b/shared/bin/sensor-init.sh @@ -45,6 +45,10 @@ if [[ -r "$SCRIPT_PATH"/common-init.sh ]]; then fi + dpkg -s fluent-bit >/dev/null 2>&1 && \ + [[ -d /opt/sensor/sensor_ctl/ ]] && \ + mkdir -p /opt/sensor/sensor_ctl/fluentbit + # zeekctl won't like being run by a non-root user unless the whole stupid thing is owned by the non-root user if [[ -d /opt/zeek.orig ]]; then # as such, we're going to reset zeek to a "clean" state after each reboot. the config files will get From 653950a738ef0663c041710d5dba5cb570846419 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 10 Jun 2022 12:17:40 -0600 Subject: [PATCH 056/122] audit logs via fluentbit dashboard --- .../7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json | 278 ++++++++++++++++++ .../dashboards/beats/Filebeat-auditd.json | 123 -------- .../beats/auditbeat-kernel-executions.json | 99 ------- .../beats/auditbeat-kernel-overview.json | 86 ------ .../beats/auditbeat-kernel-sockets.json | 188 ------------ .../db0312a0-e842-11ec-88e0-67bf497b7120.json | 0 .../composable/component/miscbeat.json | 77 +++++ logstash/pipelines/beats/11_beats_logs.conf | 50 ++++ logstash/ruby/compact_event.rb | 4 +- 9 files changed, 407 insertions(+), 498 deletions(-) create mode 100644 dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json delete mode 100644 dashboards/dashboards/beats/Filebeat-auditd.json delete mode 100644 dashboards/dashboards/beats/auditbeat-kernel-executions.json delete mode 100644 dashboards/dashboards/beats/auditbeat-kernel-overview.json delete mode 100644 dashboards/dashboards/beats/auditbeat-kernel-sockets.json mode change 100755 => 100644 dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json diff --git a/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json b/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json new file mode 100644 index 000000000..b7805985f --- /dev/null +++ b/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json @@ -0,0 +1,278 @@ +{ + "version": "2.0.0", + "objects": [ + { + "id": "7a7e0a60-e8e8-11ec-b9d4-4569bb965430", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:15:34.515Z", + "version": "WzkyNSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs", + "hits": 0, + "description": "", + "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":13,\"h\":16,\"i\":\"fa287c8f-3598-4790-b4bc-c4eb9720312a\"},\"panelIndex\":\"fa287c8f-3598-4790-b4bc-c4eb9720312a\",\"embeddableConfig\":{\"table\":null,\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":13,\"y\":0,\"w\":9,\"h\":16,\"i\":\"6314eaf8-023d-49dd-974e-bb745958db0b\"},\"panelIndex\":\"6314eaf8-023d-49dd-974e-bb745958db0b\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":22,\"y\":0,\"w\":26,\"h\":16,\"i\":\"40d3f96f-00e8-4137-b76c-b29002d572a4\"},\"panelIndex\":\"40d3f96f-00e8-4137-b76c-b29002d572a4\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":16,\"w\":34,\"h\":32,\"i\":\"48c93940-44c6-4ae1-94f9-c1030b6ff349\"},\"panelIndex\":\"48c93940-44c6-4ae1-94f9-c1030b6ff349\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":34,\"y\":16,\"w\":14,\"h\":16,\"i\":\"5d0e478d-9e6a-4024-9a4b-f96daa6c41a5\"},\"panelIndex\":\"5d0e478d-9e6a-4024-9a4b-f96daa6c41a5\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":34,\"y\":32,\"w\":14,\"h\":16,\"i\":\"c93ce18b-3f75-4096-b3c3-7c4ee1129d6d\"},\"panelIndex\":\"c93ce18b-3f75-4096-b3c3-7c4ee1129d6d\",\"embeddableConfig\":{},\"panelRefName\":\"panel_5\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":48,\"w\":48,\"h\":25,\"i\":\"7bc79245-f1e3-47fd-a7de-d58a97ee8161\"},\"panelIndex\":\"7bc79245-f1e3-47fd-a7de-d58a97ee8161\",\"embeddableConfig\":{},\"panelRefName\":\"panel_6\"}]", + "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + } + }, + "references": [ + { + "name": "panel_0", + "type": "visualization", + "id": "5240ca70-e8e7-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_1", + "type": "visualization", + "id": "6a601060-e8e8-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_2", + "type": "visualization", + "id": "103beef0-e8e9-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_3", + "type": "visualization", + "id": "a2ca0240-e8e7-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_4", + "type": "visualization", + "id": "c97e4db0-e8e7-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_5", + "type": "visualization", + "id": "f9b1a0e0-e8e7-11ec-b9d4-4569bb965430" + }, + { + "name": "panel_6", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "5240ca70-e8e7-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:01:15.671Z", + "version": "WzkxOCwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Host", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Host\",\"type\":\"table\",\"aggs\":[{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"Last Audit Log\"},\"schema\":\"metric\"},{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Host\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "6a601060-e8e8-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:09:05.638Z", + "version": "WzkyMiwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Account", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Account\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.acct\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"Effective Account\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.UID\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"-\",\"customLabel\":\"UID\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":2,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "103beef0-e8e9-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:13:43.902Z", + "version": "WzkyNCwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Logs Over Time by Type", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Logs Over Time by Type\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"split_color_mode\":\"opensearchDashboards\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"terms_field\":\"miscbeat.auditlog.type\",\"terms_size\":\"20\",\"hide_in_legend\":0,\"label\":\"\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"filter\":{\"query\":\"event.module:auditlog AND miscbeat.auditlog:*\",\"language\":\"kuery\"},\"legend_position\":\"right\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "a2ca0240-e8e7-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:03:30.788Z", + "version": "WzkxOSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Audit Log Type", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Audit Log Type\",\"type\":\"horizontal_bar\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.type\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":true,\"missingBucketLabel\":\"unknown\",\"customLabel\":\"Audit Log Type\"},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.type\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":1,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Audit Log Type\"},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":75,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "c97e4db0-e8e7-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:04:35.723Z", + "version": "WzkyMCwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Syscall", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Syscall\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.SYSCALL\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Syscall\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "f9b1a0e0-e8e7-11ec-b9d4-4569bb965430", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T18:05:56.590Z", + "version": "WzkyMSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Logs - Executable", + "visState": "{\"title\":\"Malcolm Sensor Audit Logs - Executable\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.auditlog.exe\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Executable\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "15ac5e30-e8e7-11ec-b9d4-4569bb965430", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-10T17:59:34.034Z", + "version": "WzkxNywxXQ==", + "attributes": { + "title": "Malcolm Sensor Audit Log - Logs", + "description": "", + "hits": 0, + "columns": [ + "host.name", + "miscbeat.auditlog.ses", + "miscbeat.auditlog.type", + "miscbeat.auditlog.SYSCALL", + "miscbeat.auditlog.UID", + "miscbeat.auditlog.acct", + "miscbeat.auditlog.exe", + "miscbeat.auditlog.success" + ], + "sort": [], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"kuery\",\"query\":\"event.module:auditlog AND miscbeat.auditlog:*\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "search": "7.9.3" + } + } + ] +} \ No newline at end of file diff --git a/dashboards/dashboards/beats/Filebeat-auditd.json b/dashboards/dashboards/beats/Filebeat-auditd.json deleted file mode 100644 index 4960f7d12..000000000 --- a/dashboards/dashboards/beats/Filebeat-auditd.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" - }, - "title": "auditd - Event Types Breakdown", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"pie\", \"listeners\": {}, \"params\": {\"legendPosition\": \"right\", \"isDonut\": true, \"addTooltip\": true, \"addLegend\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 50, \"order\": \"desc\", \"field\": \"event.action\"}}], \"title\": \"Audit Event Types\"}" - }, - "id": "6295bdd0-0a0e-11e7-825f-6748cda7d858-ecs", - "type": "visualization", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"service.type:auditd AND ((event.action:executed) OR (auditd.data.syscall:exec*))\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" - }, - "title": "auditd - Top Exec Commands", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"type\": \"table\", \"listeners\": {}, \"params\": {\"perPage\": 10, \"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"totalFunc\": \"sum\", \"showMeticsAtAllLevels\": false, \"showPartialRows\": false}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"bucket\", \"params\": {\"orderBy\": \"1\", \"size\": 100, \"customLabel\": \"Trigger\", \"order\": \"desc\", \"field\": \"auditd.summary.how\"}}], \"title\": \"Audit Top Exec Commands\"}" - }, - "id": "5ebdbe50-0a0f-11e7-825f-6748cda7d858-ecs", - "type": "visualization", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "auditd - Event Results", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"timelion\", \"params\": {\"expression\": \".es(q=\\\"service.type:auditd NOT event.outcome:failure\\\").label(\\\"Success\\\"), .es(q=\\\"event.outcome:failure\\\").label(\\\"Failure\\\").title(\\\"Audit Event Results\\\")\", \"interval\": \"auto\"}, \"aggs\": [], \"title\": \"auditd - Event Results\"}" - }, - "id": "2bb0fa70-0a11-11e7-9e84-43da493ad0c7-ecs", - "type": "visualization", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" - }, - "title": "auditd - Event Address Geo Location", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"tile_map\", \"listeners\": {}, \"params\": {\"heatNormalizeData\": true, \"mapType\": \"Scaled Circle Markers\", \"heatRadius\": 25, \"mapZoom\": 2, \"heatMinOpacity\": 0.1, \"addTooltip\": true, \"heatBlur\": 15, \"wms\": {\"options\": {\"layers\": \"0\", \"styles\": \"\", \"transparent\": true, \"format\": \"image/png\", \"version\": \"1.3.0\", \"attribution\": \"Maps provided by USGS\"}, \"enabled\": false, \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"}, \"heatMaxZoom\": 16, \"legendPosition\": \"bottomright\", \"mapCenter\": [15, 5], \"isDesaturated\": true}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"geohash_grid\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"autoPrecision\": true, \"precision\": 2, \"field\": \"source.geo.location\"}}], \"title\": \"Audit Event Address Geo Location\"}" - }, - "id": "d1726930-0a7f-11e7-8b04-eb22a5669f27-ecs", - "type": "visualization", - "version": 2 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"index\": \"malcolm_beats_*\"}" - }, - "title": "auditd - Event Account Tag Cloud", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"type\": \"tagcloud\", \"listeners\": {}, \"params\": {\"maxFontSize\": 42, \"hideLabel\": false, \"orientation\": \"single\", \"minFontSize\": 15, \"scale\": \"linear\"}, \"aggs\": [{\"type\": \"count\", \"enabled\": true, \"id\": \"1\", \"schema\": \"metric\", \"params\": {}}, {\"type\": \"terms\", \"enabled\": true, \"id\": \"2\", \"schema\": \"segment\", \"params\": {\"orderBy\": \"1\", \"size\": 15, \"order\": \"desc\", \"field\": \"user.name\"}}], \"title\": \"Audit Event Account Tag Cloud\"}" - }, - "id": "c5411910-0a87-11e7-8b04-eb22a5669f27-ecs", - "type": "visualization", - "version": 2 - }, - { - "attributes": { - "columns": [ - "event.action", - "auditd.summary.how", - "event.outcome", - "auditd.sequence", - "user.name" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"service.type:auditd\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"index\": \"malcolm_beats_*\", \"highlightAll\": true}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd - Audit Events", - "version": 1 - }, - "id": "4ac0a370-0a11-11e7-8b04-eb22a5669f27-ecs", - "type": "search", - "version": 2 - }, - { - "attributes": { - "description": "auditd events from Malcolm sensors", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": [], \"version\": true, \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 1, \"id\": \"6295bdd0-0a0e-11e7-825f-6748cda7d858-ecs\", \"col\": 1, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 2, \"id\": \"5ebdbe50-0a0f-11e7-825f-6748cda7d858-ecs\", \"col\": 9, \"row\": 1}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 3, \"id\": \"2bb0fa70-0a11-11e7-9e84-43da493ad0c7-ecs\", \"col\": 1, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 6, \"size_y\": 3, \"panelIndex\": 5, \"id\": \"d1726930-0a7f-11e7-8b04-eb22a5669f27-ecs\", \"col\": 7, \"row\": 5}, {\"type\": \"visualization\", \"size_x\": 4, \"size_y\": 4, \"panelIndex\": 6, \"id\": \"c5411910-0a87-11e7-8b04-eb22a5669f27-ecs\", \"col\": 5, \"row\": 1}, {\"type\": \"search\", \"columns\": [\"event.action\", \"auditd.summary.how\", \"event.outcome\", \"auditd.sequence\", \"user.name\"], \"size_x\": 12, \"size_y\": 3, \"panelIndex\": 7, \"sort\": [\"@timestamp\", \"desc\"], \"id\": \"4ac0a370-0a11-11e7-8b04-eb22a5669f27-ecs\", \"col\": 1, \"row\": 8}]", - "timeRestore": false, - "title": "Malcolm Sensor auditd Events", - "uiStateJSON": "{\"P-2\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"P-5\": {\"mapZoom\": 2, \"mapBounds\": {\"bottom_right\": {\"lat\": -43.580390855607845, \"lon\": 102.65625}, \"top_left\": {\"lat\": 43.58039085560784, \"lon\": -102.3046875}}, \"mapCollar\": {\"bottom_right\": {\"lat\": -87.16078, \"lon\": 180}, \"zoom\": 2, \"top_left\": {\"lat\": 87.16078, \"lon\": -180}}}}", - "version": 1 - }, - "id": "dfbb49f0-0a0f-11e7-8a62-2d05eaaac5cb-ecs", - "type": "dashboard", - "version": 4 - } - ], - "version": "6.0.0-beta1-SNAPSHOT" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/auditbeat-kernel-executions.json b/dashboards/dashboards/beats/auditbeat-kernel-executions.json deleted file mode 100644 index ed124a82c..000000000 --- a/dashboards/dashboards/beats/auditbeat-kernel-executions.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "Command executions", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", - "title": "auditd Executions - Error Codes", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Executions - Error Codes\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"exclude\": \"0\", \"size\": 10, \"field\": \"auditd.data.exit\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "20a8e8d0-c1c8-11e7-8995-936807a28b16-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:10:23.921Z", - "version": 4 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "title": "auditd Executions - Primary Username Tag Cloud", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Executions - Primary Username Tag Cloud\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"auditd.summary.actor.primary\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 18, \"orientation\": \"single\", \"scale\": \"linear\"}}" - }, - "id": "f81a6de0-c1c1-11e7-8995-936807a28b16-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:12:18.730Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", - "title": "auditd Executions - Exe Name Tag Cloud", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Executions - Exe Name Tag Cloud\", \"type\": \"tagcloud\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"size\": 10, \"field\": \"process.executable\", \"order\": \"desc\"}, \"enabled\": true}], \"params\": {\"maxFontSize\": 45, \"minFontSize\": 14, \"orientation\": \"single\", \"scale\": \"linear\"}}" - }, - "id": "2efac370-c1ca-11e7-8995-936807a28b16-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:57:41.411Z", - "version": 4 - }, - { - "attributes": { - "columns": [ - "host.name", - "process.args", - "auditd.summary.actor.primary", - "auditd.summary.actor.secondary", - "process.executable" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"executed\", \"params\": {\"type\": \"phrase\", \"query\": \"executed\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"executed\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd Executions - Process Executions", - "version": 1 - }, - "id": "d382f5b0-c1c6-11e7-8995-936807a28b16-ecs", - "type": "search", - "updated_at": "2018-01-16T22:26:35.050Z", - "version": 5 - }, - { - "attributes": { - "description": "auditd Overview of kernel executions on Malcolm sensors", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"20a8e8d0-c1c8-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 4, \"i\": \"1\", \"h\": 6, \"x\": 4, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"f81a6de0-c1c1-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"3\", \"gridData\": {\"w\": 4, \"i\": \"3\", \"h\": 6, \"x\": 8, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"2efac370-c1ca-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 4, \"i\": \"5\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"search\", \"id\": \"d382f5b0-c1c6-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"6\", \"gridData\": {\"w\": 12, \"i\": \"6\", \"h\": 6, \"x\": 0, \"y\": 3}}]", - "timeRestore": false, - "title": "Malcolm Sensor auditd Executions Overview", - "version": 1 - }, - "id": "7de391b0-c1ca-11e7-8995-936807a28b16-ecs", - "type": "dashboard", - "updated_at": "2018-01-16T22:58:11.243Z", - "version": 5 - } - ], - "version": "6.2.4" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/auditbeat-kernel-overview.json b/dashboards/dashboards/beats/auditbeat-kernel-overview.json deleted file mode 100644 index 9888fd3a9..000000000 --- a/dashboards/dashboards/beats/auditbeat-kernel-overview.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "auditd Kernel - Event Actions", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Kernel - Event Actions\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"5d20a650-c1bd-11e7-938f-ab0645b6c431\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"58c95a20-c1bd-11e7-938f-ab0645b6c431\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"event.module:auditd\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"6b9fb2d0-c1bc-11e7-938f-ab0645b6c431\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"event.action\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"Actions\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"5bfc71a0-c1bd-11e7-938f-ab0645b6c431\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" - }, - "id": "97680df0-c1c0-11e7-8995-936807a28b16-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:11:01.438Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "0f10c430-c1c3-11e7-8995-936807a28b16-ecs", - "title": "auditd Kernel - Event Categories", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Kernel - Event Categories\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.category\", \"size\": 5, \"customLabel\": \"Category\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"event.action\", \"size\": 20, \"customLabel\": \"Action\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"right\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "08679220-c25a-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:54:10.330Z", - "version": 4 - }, - { - "attributes": { - "columns": [ - "host.name", - "auditd.summary.actor.primary", - "auditd.summary.actor.secondary", - "event.action", - "auditd.summary.object.type", - "auditd.summary.object.primary", - "auditd.summary.object.secondary", - "auditd.summary.how", - "auditd.result" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd Kernel - Audit Event Table", - "version": 1 - }, - "id": "0f10c430-c1c3-11e7-8995-936807a28b16-ecs", - "type": "search", - "updated_at": "2018-01-16T22:51:24.572Z", - "version": 4 - }, - { - "attributes": { - "description": "Summary of Linux kernel audit events from Malcolm sensors", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"type\": \"visualization\", \"id\": \"97680df0-c1c0-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"1\", \"gridData\": {\"w\": 7, \"i\": \"1\", \"h\": 6, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"08679220-c25a-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 5, \"i\": \"4\", \"h\": 6, \"x\": 7, \"y\": 0}}, {\"type\": \"search\", \"id\": \"0f10c430-c1c3-11e7-8995-936807a28b16-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 12, \"i\": \"5\", \"h\": 6, \"x\": 0, \"y\": 3}}]", - "timeRestore": false, - "title": "Malcolm Sensor auditd Kernel Overview", - "version": 1 - }, - "id": "c0ac2c00-c1c0-11e7-8995-936807a28b16-ecs", - "type": "dashboard", - "updated_at": "2018-01-16T22:55:17.775Z", - "version": 5 - } - ], - "version": "6.2.4" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json b/dashboards/dashboards/beats/auditbeat-kernel-sockets.json deleted file mode 100644 index 8ab37ca3c..000000000 --- a/dashboards/dashboards/beats/auditbeat-kernel-sockets.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [{\"meta\": {\"apply\": true, \"params\": {\"type\": \"phrase\", \"query\": \"0\"}, \"value\": \"0\", \"alias\": null, \"disabled\": false, \"index\": \"malcolm_beats_*\", \"type\": \"phrase\", \"negate\": true, \"key\": \"auditd.summary.object.secondary\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.secondary\": {\"type\": \"phrase\", \"query\": \"0\"}}}}], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "b4c93470-c240-11e7-8692-232bd1143e8a-ecs", - "title": "auditd Sockets - Bind (non-ephemeral)", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"title\": \"auditd Sockets - Bind (non-ephemeral)\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.how\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"_term\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 10, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" - }, - "id": "faf882f0-c242-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:08:02.522Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "5438b030-c246-11e7-8692-232bd1143e8a-ecs", - "title": "auditd Sockets - Connect", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}", - "version": 1, - "visState": "{\"title\": \"auditd Sockets - Connect\", \"type\": \"table\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.primary\", \"size\": 10, \"customLabel\": \"Address\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"4\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.summary.object.secondary\", \"size\": 5, \"customLabel\": \"Port\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" - }, - "id": "ea483730-c246-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T23:24:16.851Z", - "version": 4 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "savedSearchId": "e8734160-c24c-11e7-8692-232bd1143e8a-ecs", - "title": "auditd Sockets - Accept / Recvfrom Unique Address Table", - "uiStateJSON": "{\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}, \"spy\": {\"mode\": {\"fill\": false, \"name\": null}}}", - "version": 1, - "visState": "{\"title\": \"auditd Sockets - Accept / Recvfrom Unique Address Table\", \"type\": \"table\", \"aggs\": [{\"type\": \"cardinality\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {\"field\": \"auditd.summary.object.primary\", \"customLabel\": \"Unique Addresses\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"process.executable\", \"size\": 50, \"customLabel\": \"Exe\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"bucket\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 5, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"showTotal\": false, \"sort\": {\"direction\": null, \"columnIndex\": null}, \"showPartialRows\": false, \"showMeticsAtAllLevels\": false, \"totalFunc\": \"sum\", \"perPage\": 10}}" - }, - "id": "ceb91de0-c250-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:16:51.535Z", - "version": 5 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "auditd Sockets - Syscalls Time Series", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Sockets - Syscalls Time Series\", \"type\": \"metrics\", \"aggs\": [], \"params\": {\"gauge_color_rules\": [{\"id\": \"6c891740-c252-11e7-8a68-93ffe9ec5950\"}], \"axis_position\": \"left\", \"axis_formatter\": \"number\", \"background_color_rules\": [{\"id\": \"95b603d0-c252-11e7-8a68-93ffe9ec5950\"}], \"gauge_width\": 10, \"index_pattern\": \"malcolm_beats_*\", \"filter\": \"auditd.summary.object.type:socket\", \"id\": \"61ca57f0-469d-11e7-af02-69e470af7417\", \"show_legend\": 1, \"legend_position\": \"left\", \"series\": [{\"axis_position\": \"right\", \"metrics\": [{\"type\": \"count\", \"id\": \"61ca57f2-469d-11e7-af02-69e470af7417\"}], \"formatter\": \"number\", \"seperate_axis\": 0, \"id\": \"61ca57f1-469d-11e7-af02-69e470af7417\", \"terms_field\": \"auditd.data.syscall\", \"chart_type\": \"line\", \"line_width\": 1, \"label\": \"syscall\", \"split_mode\": \"terms\", \"color\": \"#68BC00\", \"fill\": 0.5, \"point_size\": 1, \"stacked\": \"none\"}], \"gauge_style\": \"half\", \"time_field\": \"@timestamp\", \"bar_color_rules\": [{\"id\": \"2cebb0c0-c252-11e7-8a68-93ffe9ec5950\"}], \"show_grid\": 1, \"interval\": \"auto\", \"gauge_inner_width\": 10, \"type\": \"timeseries\"}}" - }, - "id": "b21e0c70-c252-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:13:38.857Z", - "version": 3 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\": [], \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "title": "auditd Sockets - Families", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\": \"auditd Sockets - Families\", \"type\": \"pie\", \"aggs\": [{\"type\": \"count\", \"schema\": \"metric\", \"id\": \"1\", \"params\": {}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"2\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.socket.family\", \"size\": 10, \"customLabel\": \"Socket Family\"}, \"enabled\": true}, {\"type\": \"terms\", \"schema\": \"segment\", \"id\": \"3\", \"params\": {\"orderBy\": \"1\", \"order\": \"desc\", \"field\": \"auditd.data.syscall\", \"size\": 10, \"customLabel\": \"Syscall\"}, \"enabled\": true}], \"params\": {\"type\": \"pie\", \"isDonut\": true, \"legendPosition\": \"left\", \"addTooltip\": true, \"addLegend\": true}}" - }, - "id": "a8e20450-c256-11e7-8692-232bd1143e8a-ecs", - "type": "visualization", - "updated_at": "2018-01-16T22:12:51.655Z", - "version": 3 - }, - { - "attributes": { - "columns": [ - "host.name", - "auditd.summary.how", - "auditd.summary.object.primary", - "auditd.summary.object.secondary", - "auditd.data.socket.family", - "auditd.result" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"bind\", \"params\": {\"type\": \"phrase\", \"query\": \"bind\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.data.syscall\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.syscall\": {\"type\": \"phrase\", \"query\": \"bind\"}}}}, {\"meta\": {\"value\": \"netlink\", \"params\": {\"type\": \"phrase\", \"query\": \"netlink\"}, \"negate\": true, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.data.socket.family\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.data.socket.family\": {\"type\": \"phrase\", \"query\": \"netlink\"}}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd Sockets - Binds", - "version": 1 - }, - "id": "b4c93470-c240-11e7-8692-232bd1143e8a-ecs", - "type": "search", - "updated_at": "2018-01-16T23:05:58.935Z", - "version": 5 - }, - { - "attributes": { - "columns": [ - "host.name", - "auditd.summary.how", - "auditd.summary.object.primary", - "auditd.summary.object.secondary", - "auditd.data.socket.family", - "auditd.result", - "auditd.data.exit" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"connected-to\", \"params\": {\"type\": \"phrase\", \"query\": \"connected-to\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.action\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.action\": {\"type\": \"phrase\", \"query\": \"connected-to\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd Sockets - Connects", - "version": 1 - }, - "id": "5438b030-c246-11e7-8692-232bd1143e8a-ecs", - "type": "search", - "updated_at": "2018-01-16T23:09:43.937Z", - "version": 5 - }, - { - "attributes": { - "columns": [ - "host.name", - "auditd.summary.how", - "auditd.summary.object.primary", - "auditd.summary.object.secondary", - "auditd.data.socket.family", - "event.action" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [{\"meta\": {\"value\": \"auditd\", \"params\": {\"type\": \"phrase\", \"query\": \"auditd\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"event.module\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"event.module\": {\"type\": \"phrase\", \"query\": \"auditd\"}}}}, {\"meta\": {\"value\": \"socket\", \"params\": {\"type\": \"phrase\", \"query\": \"socket\"}, \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"phrase\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.type\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"match\": {\"auditd.summary.object.type\": {\"type\": \"phrase\", \"query\": \"socket\"}}}}, {\"meta\": {\"value\": \"exists\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"exists\", \"index\": \"malcolm_beats_*\", \"key\": \"auditd.summary.object.primary\"}, \"exists\": {\"field\": \"auditd.summary.object.primary\"}, \"$state\": {\"store\": \"appState\"}}, {\"meta\": {\"value\": \"{\\\"terms\\\":{\\\"auditd.data.syscall\\\":[\\\"accept\\\",\\\"accept4\\\",\\\"recvfrom\\\",\\\"recvmsg\\\"]}}\", \"negate\": false, \"disabled\": false, \"alias\": null, \"type\": \"custom\", \"index\": \"malcolm_beats_*\", \"key\": \"query\"}, \"$state\": {\"store\": \"appState\"}, \"query\": {\"terms\": {\"auditd.data.syscall\": [\"accept\", \"accept4\", \"recvfrom\", \"recvmsg\"]}}}], \"version\": true, \"index\": \"malcolm_beats_*\", \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "auditd Sockets - Accept / Recvfrom", - "version": 1 - }, - "id": "e8734160-c24c-11e7-8692-232bd1143e8a-ecs", - "type": "search", - "updated_at": "2018-01-16T23:20:51.403Z", - "version": 4 - }, - { - "attributes": { - "description": "Summary of socket related syscall events from Malcolm sensors", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\": true, \"filter\": [], \"version\": true, \"query\": {\"language\": \"kuery\", \"query\": \"\"}}" - }, - "optionsJSON": "{\"darkTheme\": false, \"useMargins\": false}", - "panelsJSON": "[{\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"1\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"1\", \"h\": 4, \"x\": 6, \"y\": 3}, \"type\": \"visualization\", \"id\": \"faf882f0-c242-11e7-8692-232bd1143e8a-ecs\"}, {\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"2\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"2\", \"h\": 5, \"x\": 0, \"y\": 7}, \"type\": \"visualization\", \"id\": \"ea483730-c246-11e7-8692-232bd1143e8a-ecs\"}, {\"embeddableConfig\": {\"vis\": {\"params\": {\"sort\": {\"direction\": null, \"columnIndex\": null}}}}, \"panelIndex\": \"3\", \"version\": \"6.2.4\", \"gridData\": {\"w\": 6, \"i\": \"3\", \"h\": 5, \"x\": 6, \"y\": 7}, \"type\": \"visualization\", \"id\": \"ceb91de0-c250-11e7-8692-232bd1143e8a-ecs\"}, {\"type\": \"visualization\", \"id\": \"b21e0c70-c252-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"4\", \"gridData\": {\"w\": 12, \"i\": \"4\", \"h\": 3, \"x\": 0, \"y\": 0}}, {\"type\": \"visualization\", \"id\": \"a8e20450-c256-11e7-8692-232bd1143e8a-ecs\", \"version\": \"6.2.4\", \"panelIndex\": \"5\", \"gridData\": {\"w\": 6, \"i\": \"5\", \"h\": 4, \"x\": 0, \"y\": 3}}]", - "timeRestore": false, - "title": "Malcolm Sensor auditd Sockets Overview", - "version": 1 - }, - "id": "693a5f40-c243-11e7-8692-232bd1143e8a-ecs", - "type": "dashboard", - "updated_at": "2018-01-16T23:24:37.521Z", - "version": 4 - } - ], - "version": "6.2.4" -} \ No newline at end of file diff --git a/dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json b/dashboards/dashboards/beats/db0312a0-e842-11ec-88e0-67bf497b7120.json old mode 100755 new mode 100644 diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 65b407758..3912dc232 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -39,6 +39,83 @@ }, "auditlog": { "properties": { + "ARCH": { "type": "keyword"}, + "AUID": { "type": "keyword"}, + "EGID": { "type": "keyword"}, + "EUID": { "type": "keyword"}, + "FSGID": { "type": "keyword"}, + "FSUID": { "type": "keyword"}, + "GID": { "type": "keyword"}, + "OGID": { "type": "keyword"}, + "OLD-AUID": { "type": "keyword"}, + "OUID": { "type": "keyword"}, + "SADDR": { "type": "keyword"}, + "SGID": { "type": "keyword"}, + "SUID": { "type": "keyword"}, + "SYSCALL": { "type": "keyword"}, + "UID": { "type": "keyword"}, + "a0": { "type": "keyword"}, + "a1": { "type": "keyword"}, + "a2": { "type": "keyword"}, + "a3": { "type": "keyword"}, + "acct": { "type": "keyword"}, + "addr": { "type": "keyword"}, + "arch": { "type": "keyword"}, + "argc": { "type": "keyword"}, + "auid": { "type": "keyword"}, + "cap_fe": { "type": "keyword"}, + "cap_fi": { "type": "keyword"}, + "cap_fp": { "type": "keyword"}, + "cap_frootid": { "type": "keyword"}, + "cap_fver": { "type": "keyword"}, + "cmd": { "type": "keyword"}, + "comm": { "type": "keyword"}, + "dev": { "type": "keyword"}, + "egid": { "type": "keyword"}, + "entries": { "type": "keyword"}, + "euid": { "type": "keyword"}, + "exe": { "type": "keyword"}, + "exit": { "type": "keyword"}, + "family": { "type": "keyword"}, + "fsgid": { "type": "keyword"}, + "fsuid": { "type": "keyword"}, + "gid": { "type": "keyword"}, + "grantors": { "type": "keyword"}, + "hostname": { "type": "keyword"}, + "inode": { "type": "keyword"}, + "item": { "type": "keyword"}, + "items": { "type": "keyword"}, + "key": { "type": "keyword"}, + "mode": { "type": "keyword"}, + "msg": { "type": "keyword"}, + "name": { "type": "keyword"}, + "nametype": { "type": "keyword"}, + "nlnk-fam": { "type": "keyword"}, + "nlnk-pid": { "type": "keyword"}, + "ogid": { "type": "keyword"}, + "old-auid": { "type": "keyword"}, + "old-ses": { "type": "keyword"}, + "old_prom": { "type": "keyword"}, + "op": { "type": "keyword"}, + "ouid": { "type": "keyword"}, + "pid": { "type": "keyword"}, + "ppid": { "type": "keyword"}, + "proctitle": { "type": "keyword"}, + "prom": { "type": "keyword"}, + "rdev": { "type": "keyword"}, + "res": { "type": "keyword"}, + "saddr": { "type": "keyword"}, + "saddr_fam": { "type": "keyword"}, + "ses": { "type": "keyword"}, + "sgid": { "type": "keyword"}, + "success": { "type": "keyword"}, + "suid": { "type": "keyword"}, + "syscall": { "type": "keyword"}, + "table": { "type": "keyword"}, + "terminal": { "type": "keyword"}, + "tty": { "type": "keyword"}, + "type": { "type": "keyword"}, + "uid": { "type": "keyword"} } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 463a67d7a..7be6d07f9 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -7,6 +7,11 @@ filter { + if (![host][name]) and ([agent][hostname]) { + mutate { id => "mutate_beats_add_field_host_name_agent_hostname" + add_field => { "[host][name]" => "%{[agent][hostname]}" } } + } + if ([agent][type] == "filebeat") and ([event][module] == "nginx") { ############################################################################################################################# # nginx access and error logs @@ -109,6 +114,51 @@ filter { } } + if ([miscbeat][auditlog]) { + #------------------------------------------------- + # fluentbit tail of /var/log/audit/audit.log + # https://man7.org/linux/man-pages/man5/auditd.conf.5.html + + ruby { + id => "ruby_miscbeat_auditlog_remove_empty_values" + path => "/usr/share/logstash/malcolm-ruby/compact_event.rb" + } + + if ([miscbeat][auditlog][grantors]) { + mutate { id => "mutate_split_miscbeat_auditlog_grantors" + split => { "[miscbeat][auditlog][grantors]" => "," } } + } + + if (![miscbeat][auditlog][success]) and + ([miscbeat][auditlog][res] =~ /^success'?$/) { + mutate { id => "mutate_miscbeat_auditlog_res_success" + add_field => { "[miscbeat][auditlog][success]" => "yes" } + remove_field => [ "[miscbeat][auditlog][res]" ] } + } + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_auditlog" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][auditlog][ses]", + "[miscbeat][auditlog][type]", + "[miscbeat][auditlog][SYSCALL]", + "[miscbeat][auditlog][acct]", + "[miscbeat][auditlog][UID]", + "[miscbeat][auditlog][exe]", + "[miscbeat][auditlog][msg]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + } # if ([miscbeat][auditlog]) + if ([miscbeat][kmsg]) { #------------------------------------------------- # kmsg - https://docs.fluentbit.io/manual/pipeline/inputs/kernel-logs diff --git a/logstash/ruby/compact_event.rb b/logstash/ruby/compact_event.rb index c94ada876..d132d6dfe 100644 --- a/logstash/ruby/compact_event.rb +++ b/logstash/ruby/compact_event.rb @@ -9,9 +9,9 @@ def compact(h) c = compact(v) result[k] = c unless c.empty? when String - result[k] = v unless (v.empty? || (v == "-") || (v == "(empty)")) + result[k] = v unless (v.empty? || (v == "-") || (v == "?") || (v == "(empty)") || (v == "(none)") || (v == "(null)") || (v == "unset")) when Array - c = v.delete_if{|e| e.nil? || (e.is_a?(String) && (e.empty? || (e == "-") || (e == "(empty)")))} + c = v.delete_if{|e| e.nil? || (e.is_a?(String) && (e.empty? || (e == "-") || (e == "?") || (e == "(empty)") || (e == "(none)") || (e == "(null)") || (e == "unset")))} result[k] = c unless c.empty? when NilClass # nothing From af2de10c803d85a67b7e452a119c7b38f847f1d0 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 10 Jun 2022 14:37:43 -0600 Subject: [PATCH 057/122] sensor fluentbit work in progress --- .../composable/component/heatbeat.json | 65 -------- .../composable/component/miscbeat.json | 14 +- .../templates/malcolm_beats_template.json | 1 - logstash/pipelines/beats/11_beats_logs.conf | 51 +++--- logstash/pipelines/beats/98_finalize.conf | 1 - logstash/ruby/dotted_hash_unflatten.rb | 53 ++++++ .../normal/0900-setup-rc-local.hook.chroot | 3 - sensor-iso/README.md | 12 +- .../normal/0900-setup-rc-local.hook.chroot | 3 - .../normal/0910-sensor-build.hook.chroot | 1 - .../interface/sensor_ctl/control_vars.conf | 7 +- .../sensor_ctl/heatbeat/protologbeat.yml | 28 ---- .../heatbeat/sensor_heatbeat_local.sh | 19 --- .../sensor_ctl/scripts/log_temperature.sh | 9 -- .../sensor_ctl/supervisor.d/beats.conf | 19 +-- .../supervisor.d/fluentbit-thermal.conf | 14 ++ shared/bin/beat-log-temperature.py | 108 ------------- shared/bin/configure-capture.py | 6 - shared/bin/sensorcommon.py | 32 ---- shared/bin/sensormetric.py | 152 ------------------ 20 files changed, 111 insertions(+), 487 deletions(-) delete mode 100644 dashboards/templates/composable/component/heatbeat.json create mode 100644 logstash/ruby/dotted_hash_unflatten.rb delete mode 100644 sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml delete mode 100755 sensor-iso/interface/sensor_ctl/heatbeat/sensor_heatbeat_local.sh delete mode 100755 sensor-iso/interface/sensor_ctl/scripts/log_temperature.sh create mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-thermal.conf delete mode 100755 shared/bin/beat-log-temperature.py delete mode 100644 shared/bin/sensormetric.py diff --git a/dashboards/templates/composable/component/heatbeat.json b/dashboards/templates/composable/component/heatbeat.json deleted file mode 100644 index 635e6a9b0..000000000 --- a/dashboards/templates/composable/component/heatbeat.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "template": { - "mappings": { - "properties": { - "heatbeat": { - "properties": { - "cpu_rpm_avg": { - "type": "float" - }, - "cpu_volt_avg": { - "type": "float" - }, - "cpu_temp_avg": { - "type": "float" - }, - "gpu_rpm_avg": { - "type": "float" - }, - "gpu_volt_avg": { - "type": "float" - }, - "gpu_temp_avg": { - "type": "float" - }, - "hdd_temp_avg": { - "type": "float" - }, - "other_volt_avg": { - "type": "float" - }, - "other_rpm_avg": { - "type": "float" - }, - "other_temp_avg": { - "type": "float" - }, - "sensors.adapter": { - "type": "keyword", - "norms": false - }, - "sensors.class": { - "type": "keyword", - "norms": false - }, - "sensors.label": { - "type": "keyword", - "norms": false - }, - "sensors.name": { - "type": "keyword", - "norms": false - }, - "sensors.units": { - "type": "keyword", - "norms": false - }, - "sensors.value": { - "type": "float" - } - } - } - } - } - } -} diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 3912dc232..40b2e3b9d 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -29,14 +29,26 @@ "write_size": { "type": "long" } } }, - "netif": { + "network": { "properties": { + "interface": { "type": "keyword" }, + "tx.bytes.total": { "type": "long" }, + "tx.errors.total": { "type": "long" }, + "tx.packets.total": { "type": "long" }, + "rx.bytes.total": { "type": "long" }, + "rx.errors.total": { "type": "long" }, + "rx.packets.total": { "type": "long" }, + "details": { "type": "nested" } } }, "syslog": { "properties": { } }, + "thermal": { + "properties": { + } + }, "auditlog": { "properties": { "ARCH": { "type": "keyword"}, diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index 38e55d04c..e6f587a7b 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -21,7 +21,6 @@ "ecs_url", "ecs_user", "ecs_user_agent", - "custom_heatbeat", "custom_miscbeat", "custom_system" ], diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 7be6d07f9..086734756 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -70,29 +70,6 @@ filter { } } - } else if ("_malcolm_heatbeat" in [tags]) { - ############################################################################################################################# - # sensor temperature statistics (todo: investigate use of "sensors" to see if fluentbit's "therm" module is better or not) - - if (![event][hash]) { - fingerprint { - id => "fingerprint_malcolm_beats_heatbeat" - source => [ "[host][name]", - "[heatbeat][sensors][adapter]", - "[heatbeat][sensors][class]", - "[heatbeat][sensors][label]", - "[heatbeat][sensors][name]", - "[heatbeat][sensors][units]", - "[heatbeat][sensors][value]", - "[@timestamp]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true - } - } - } else if ("_malcolm_miscbeat" in [tags]) { ############################################################################################################################# # misc. sensor metrics and logs from fluentbit received by protologbeat TCP @@ -184,6 +161,32 @@ filter { } # if ([miscbeat][kmsg]) + if ([miscbeat][netif]) { + #------------------------------------------------- + # netif - https://docs.fluentbit.io/manual/pipeline/inputs/network-io-metrics + + ruby { + id => "ruby_miscbeat_netif" + path => "/usr/share/logstash/malcolm-ruby/dotted_hash_unflatten.rb" + script_params => { + "source" => "[miscbeat][netif]" + "target" => "[miscbeat][network][details]" + } + } + if ([miscbeat][network][details]) { + mutate { id => "mutate_miscbeat_remove_netif" + remove_field => [ "[miscbeat][netif]" ] } + ruby { + id => "ruby_miscbeat_network_details_sum" + code => " + if interfaces = event.get('[miscbeat][network][details]') then + event.set('[miscbeat][network][interface]', interfaces.keys) + end" + } + } + + } # if ([miscbeat][netif]) + if ([miscbeat][syslog]) { #------------------------------------------------- # syslog - https://docs.fluentbit.io/manual/pipeline/inputs/syslog @@ -250,6 +253,6 @@ filter { } # if ([miscbeat][syslog]) - } # event type (nginx, heatbeat, metricbeat, miscbeat, etc) + } # event type (filebeat.nginx, metricbeat, miscbeat, etc) } \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index bc47c3594..825e6dddd 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -77,7 +77,6 @@ filter { mutate { id => "mutate_beats_tags_remove" remove_tag => [ "beats_input_codec_plain_applied", "beats_input_raw_event", - "_malcolm_heatbeat", "_malcolm_metricbeat", "_malcolm_miscbeat", "_malcolm_protologbeat", diff --git a/logstash/ruby/dotted_hash_unflatten.rb b/logstash/ruby/dotted_hash_unflatten.rb new file mode 100644 index 000000000..2cadd7366 --- /dev/null +++ b/logstash/ruby/dotted_hash_unflatten.rb @@ -0,0 +1,53 @@ +def concurrency + :shared +end + +def register(params) + @source = params["source"] + @target = params["target"] +end + +def filter(event) + _sourcehash = event.get("#{@source}") + if _sourcehash.nil? or (_sourcehash.length == 0) + return [event] + end + + _desthash = Hash.new + _sourcehash.each do |key, value| + _desthash = merge_recursively(_desthash, unflatten(key.split('.'), value)) + end + event.set("#{@target}", _desthash) + + [event] +end + +def unflatten(arr, value) + if arr.empty? + value + else + {}.tap do |hash| + hash[arr.shift] = unflatten(arr, value) + end + end +end + +def merge_recursively(a, b) + a.merge(b) {|key, a_item, b_item| merge_recursively(a_item, b_item) } +end + +############################################################################### +# tests + +test "standard flow" do + parameters do + { "source" => "sourcefield", "target" => "targetfield" } + end + + in_event { { "sourcefield" => {"eth0.rx.bytes"=>98, "eth0.rx.packets"=>1, "eth0.rx.errors"=>0, "eth0.tx.bytes"=>98, "eth0.tx.packets"=>1, "eth0.tx.errors"=>0} } } + + expect("unflattened") do |events| + (events.first.get("targetfield")["eth0"]["rx"].length == 3) and (events.first.get("targetfield")["eth0"]["tx"].length == 3) + end +end +############################################################################### \ No newline at end of file diff --git a/malcolm-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot b/malcolm-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot index e12f8a44b..1f46893ff 100755 --- a/malcolm-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot +++ b/malcolm-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot @@ -7,9 +7,6 @@ cat << 'EOF' >> /etc/rc.local # other agg-specific initialization prior to starting up /usr/local/bin/agg-init.sh -# hddtemp daemon for querying HDD temperatures -/usr/sbin/hddtemp --daemon --numeric --quiet --unit=C -4 --listen=127.0.0.1 --port=7634 /dev/sd? - systemctl mask ctrl-alt-del.target exit 0 diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 2373c3dc2..47484996d 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -33,7 +33,6 @@ Hedgehog Linux is a Debian-based operating system built to * [filebeat](#filebeat): Zeek and Suricata log forwarding * [arkime-capture](#arkime-capture): Arkime session forwarding * [metricbeat](#metricbeat): resource statistics forwarding - * [heatbeat](#heatbeat): temperature forwarding + [Autostart services](#ConfigAutostart) + [Zeek Intelligence Framework](#ZeekIntel) * [Appendix A - Generating the ISO](#ISOBuild) @@ -291,10 +290,6 @@ Next, select the OpenSearch connection transport protocol, either **HTTPS** or * The remainder of the configuration for metricbeat will proceed as described in the [filebeat](#filebeat) steps outlined above. -### heatbeat: temperature forwarding - -The sensor employs a custom agent using the beats protocol to forward hardware metrics such as CPU and storage device temperatures, system voltages, and fan speeds (when applicable) to an OpenSearch database by way of Logstash. Its configuration is almost identical to that of the [filebeat](#filebeat) outlined above. - ### Autostart services Once the forwarders have been configured, the final step is to **Configure Autostart Services**. Choose this option from the configuration mode menu after the welcome screen of the sensor configuration tool. @@ -305,8 +300,6 @@ TODO: update this: * **AUTOSTART_CLAMAV_UPDATES** – Virus database update service for ClamAV (requires sensor to be connected to the internet) * **AUTOSTART_FILEBEAT** – [filebeat](#filebeat) Zeek log forwarder -* **AUTOSTART_HEATBEAT** – [sensor hardware](#heatbeat) (eg., CPU and storage device temperature) metrics forwarder -* **AUTOSTART_HEATBEAT_SENSORS** – the background process monitoring [hardware sensors](#heatbeat) for temperatures, voltages, fan speeds, etc. (this is required in addition to **AUTOSTART_HEATBEAT** metrics forwarding) * **AUTOSTART_METRICBEAT** – system resource utilization [metrics forwarder](#metricbeat) * **AUTOSTART_ARKIME** – [capture](#arkime-capture) PCAP engine for traffic capture, as well as traffic parsing and metadata insertion into OpenSearch for viewing in [Arkime](https://arkime.com/). If you are using Hedgehog Linux along with [Malcolm](https://github.com/idaholab/Malcolm) or another Arkime installation, this is probably the packet capture engine you want to use. * *AUTOSTART_NETSNIFF* – [netsniff-ng](http://netsniff-ng.org/) PCAP engine for saving packet capture (PCAP) files @@ -337,11 +330,8 @@ This will cause the sensor services controller to stop, wait a few seconds, and ``` $ /opt/sensor/sensor_ctl/status -beats:auditbeat RUNNING pid 14470, uptime 8 days, 20:22:32 beats:filebeat RUNNING pid 14460, uptime 8 days, 20:22:32 -beats:heatbeat RUNNING pid 14481, uptime 8 days, 20:22:32 beats:metricbeat RUNNING pid 14476, uptime 8 days, 20:22:32 -beats:sensors RUNNING pid 14484, uptime 8 days, 20:22:32 clamav:clamav-service RUNNING pid 14454, uptime 8 days, 20:22:32 clamav:clamav-updates RUNNING pid 14450, uptime 8 days, 20:22:32 arkime:arkime-capture RUNNING pid 14432, uptime 8 days, 20:22:32 @@ -913,7 +903,7 @@ If there are major differences or new variables, continue on to the next step, i 24. Restore certificates/keystores for forwarders from the backup `sensor_ctl` path to the new one ``` -sensor@hedgehog:opt$ for BEAT in auditbeat filebeat filebeat-syslog heatbeat metricbeat; do cp /opt/sensor_upgrade_backup_2020-05-08/sensor_ctl/$BEAT/data/* /opt/sensor/sensor_ctl/$BEAT/data/; done +sensor@hedgehog:opt$ for BEAT in filebeat metricbeat miscbeat; do cp /opt/sensor_upgrade_backup_2020-05-08/sensor_ctl/$BEAT/data/* /opt/sensor/sensor_ctl/$BEAT/data/; done sensor@hedgehog:opt$ cp /opt/sensor_upgrade_backup_2020-05-07/sensor_ctl/filebeat/{ca.crt,client.crt,client.key} /opt/sensor/sensor_ctl/filebeat/ ``` diff --git a/sensor-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot b/sensor-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot index 19b295644..8801918c4 100755 --- a/sensor-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot +++ b/sensor-iso/config/hooks/normal/0900-setup-rc-local.hook.chroot @@ -32,9 +32,6 @@ if [ -f /opt/sensor/sensor_ctl/supervisor.sh ]; then ( getent passwd 1000 >/dev/null 2>&1 ) && ulimit -l unlimited && sudo -H -u '#1000' /opt/sensor/sensor_ctl/supervisor.sh fi -# hddtemp daemon for querying HDD temperatures -/usr/sbin/hddtemp --daemon --numeric --quiet --unit=C -4 --listen=127.0.0.1 --port=7634 /dev/sd? - systemctl mask ctrl-alt-del.target exit 0 diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index a377fbc41..aefdb1170 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -279,7 +279,6 @@ if [ -d /opt/sensor/sensor_ctl/scripts ]; then SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -*/10 * * * * root /opt/sensor/sensor_ctl/scripts/log_temperature.sh 2 0 * * 0 root rm -f /var/lib/clamav/mirrors.dat EOF fi diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 1eb356980..8134b2bf6 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -16,11 +16,9 @@ export ARKIME_PACKET_ACL= export ARKIME_ECS_PROVIDER=arkime export ARKIME_ECS_DATASET=session -export HEATBEAT_PORT=9515 -export HEATBEAT_INTERVAL=10 - export MISCBEAT_PORT=9516 export FLUENTBIT_METRICS_INTERVAL=30 +export FLUENTBIT_THERMAL_INTERVAL=10 export ZEEK_LOG_PATH=/home/sensor/bro_logs export ZEEK_MAX_DISK_FILL=90 @@ -114,8 +112,7 @@ export AUTOSTART_FLUENTBIT_KMSG=false export AUTOSTART_FLUENTBIT_METRICS=false export AUTOSTART_FLUENTBIT_NETIF=false export AUTOSTART_FLUENTBIT_SYSLOG=false -export AUTOSTART_HEATBEAT=false -export AUTOSTART_HEATBEAT_SENSORS=false +export AUTOSTART_FLUENTBIT_THERMAL=false export AUTOSTART_METRICBEAT=false export AUTOSTART_MISCBEAT=false export AUTOSTART_NETSNIFF=false diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml b/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml deleted file mode 100644 index 34cbfabe6..000000000 --- a/sensor-iso/interface/sensor_ctl/heatbeat/protologbeat.yml +++ /dev/null @@ -1,28 +0,0 @@ -protologbeat: - address: "127.0.0.1" - port: ${HEATBEAT_PORT:9515} - protocol: "udp" - json_mode: true - merge_fields_to_root: false - fields_parent: "heatbeat" - max_msg_size: 8192 - -#================================ General ====================================== -processors: - - add_tags: - tags: [_malcolm_beats, _malcolm_heatbeat] - -#================================ Outputs ====================================== - -#-------------------------- Logstash Output ------------------------------------ -output.logstash: - hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] - ssl.enabled: ${BEAT_LS_SSL:false} - ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] - ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" - ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" - ssl.supported_protocols: "TLSv1.2" - ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/heatbeat/sensor_heatbeat_local.sh b/sensor-iso/interface/sensor_ctl/heatbeat/sensor_heatbeat_local.sh deleted file mode 100755 index 4d248c4fd..000000000 --- a/sensor-iso/interface/sensor_ctl/heatbeat/sensor_heatbeat_local.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -# force-navigate to script directory (containing config file) -[[ "$(uname -s)" = 'Darwin' ]] && REALPATH=grealpath || REALPATH=realpath -[[ "$(uname -s)" = 'Darwin' ]] && DIRNAME=gdirname || DIRNAME=dirname -if ! (type "$REALPATH" && type "$DIRNAME") > /dev/null; then - echo "$(basename "${BASH_SOURCE[0]}") requires $REALPATH and $DIRNAME" - exit 1 -fi -SCRIPT_PATH="$($DIRNAME $($REALPATH -e "${BASH_SOURCE[0]}"))" -pushd "$SCRIPT_PATH" >/dev/null 2>&1 - -mkdir -p "$SCRIPT_PATH/data" - -protologbeat --path.home "$SCRIPT_PATH" --path.config "$SCRIPT_PATH" --path.data "$SCRIPT_PATH/data" -c "$SCRIPT_PATH/protologbeat.yml" -e - -popd >/dev/null 2>&1 diff --git a/sensor-iso/interface/sensor_ctl/scripts/log_temperature.sh b/sensor-iso/interface/sensor_ctl/scripts/log_temperature.sh deleted file mode 100755 index e2a7c763e..000000000 --- a/sensor-iso/interface/sensor_ctl/scripts/log_temperature.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -AVG_TEMP="$(sensors 2>/dev/null | grep '^Core\s[[:digit:]]\+:' | sed -e 's/[[:space:]]\+/,/g' | cut -d',' -f3 | sed "s/^\+//" | sed "s/°.*//" | awk '{ total += $1; count++ } END { if (count > 0) { print total/count } }')" -HDD_TEMP="$(hddtemp /dev/sd? 2>/dev/null | grep -v "S\.M\.A\.R\.T\. not available" | sed 's/^/\[/' | sed 's/$/\]/' | tr '\n' ',' | sed 's/,$//')" -if [ -n "$AVG_TEMP" ] || [ -n "$HDD_TEMP" ] ; then - logger "CPUs: ${AVG_TEMP}°C, HDDs: ${HDD_TEMP}" -fi diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf index f0174412a..d3fe90f01 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf @@ -1,5 +1,5 @@ [group:beats] -programs=filebeat,metricbeat,miscbeat,heatbeat,sensors +programs=filebeat,metricbeat,miscbeat [program:filebeat] environment=ZEEK_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/logs/current,SURICATA_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/suricata @@ -28,20 +28,3 @@ stopasgroup=true killasgroup=true autostart=%(ENV_AUTOSTART_MISCBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/miscbeat - -[program:heatbeat] -command=bash -l %(ENV_SUPERVISOR_PATH)s/heatbeat/sensor_heatbeat_local.sh -startsecs=5 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_HEATBEAT)s -directory=%(ENV_SUPERVISOR_PATH)s/heatbeat - -[program:sensors] -command=/usr/bin/python3 /usr/local/bin/beat-log-temperature.py -p %(ENV_HEATBEAT_PORT)s -c 0 -s %(ENV_HEATBEAT_INTERVAL)s -startsecs=5 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_HEATBEAT_SENSORS)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-thermal.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-thermal.conf new file mode 100644 index 000000000..46107e06e --- /dev/null +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-thermal.conf @@ -0,0 +1,14 @@ +[program:fluentbit-thermal] +command=/opt/fluent-bit/bin/fluent-bit + -i thermal + -p Interval_Sec=%(ENV_FLUENTBIT_THERMAL_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F nest -p Operation=nest -p Nested_under=thermal -p WildCard='*' -m '*' + -F record_modifier -p "Record=module thermal" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_THERMAL)s diff --git a/shared/bin/beat-log-temperature.py b/shared/bin/beat-log-temperature.py deleted file mode 100755 index efaf1c713..000000000 --- a/shared/bin/beat-log-temperature.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -import os -import re -import sys -import time -import argparse -from functools import reduce -from sensorcommon import * -from sensormetric import * -from collections import defaultdict - -BEAT_PORT_DEFAULT = 9515 -BEAT_INTERFACE_IP = "127.0.0.1" -BEAT_PROTOCOL = "udp" -BEAT_FORMAT = "json" - -################################################################################################### -################################################################################################### -def main(): - - # extract arguments from the command line - # print (sys.argv[1:]); - parser = argparse.ArgumentParser( - description='beat-log-temperature.py', add_help=False, usage='temperature.py [options]' - ) - parser.add_argument( - '-p', - '--port', - dest='port', - metavar='', - type=int, - nargs='?', - default=BEAT_PORT_DEFAULT, - help='UDP port monitored by protologbeat', - ) - parser.add_argument( - '-c', - '--count', - dest='loop', - metavar='', - type=int, - nargs='?', - default=1, - help='Number of times to execute (default = 1, 0 = loop forever)', - ) - parser.add_argument( - '-s', - '--sleep', - dest='sleep', - metavar='', - type=int, - nargs='?', - default=10, - help='Seconds between iterations if looping (default = 10)', - ) - parser.add_argument( - '-v', '--verbose', dest='debug', type=str2bool, nargs='?', const=True, default=False, help="Verbose output" - ) - try: - parser.error = parser.exit - args = parser.parse_args() - except SystemExit: - parser.print_help() - exit(2) - - # set up destination beat - eprint(f"Logging {BEAT_FORMAT} sensor statistics to {BEAT_INTERFACE_IP}:{args.port} over {BEAT_PROTOCOL}") - beat = HeatBeatLogger(BEAT_INTERFACE_IP, args.port, BEAT_PROTOCOL, BEAT_FORMAT) - - loopCount = 0 - while (args.loop <= 0) or (loopCount < args.loop): - - if loopCount >= 1: - time.sleep(args.sleep) - loopCount += 1 - - metrics = get_metrics_list() - metrics_dicts = [x.to_dictionary() for x in metrics] - for d in metrics_dicts: - d.pop('value_type', None) - - # get averages for each metric class - metric_class_values = defaultdict(list) - - # put together a list for each class of metric for averaging - for metrics in metrics_dicts: - label_class = metrics["class"] - if len(label_class) > 0: - metric_class_values[label_class].append(metrics["value"]) - - # average each metric class - message = {} - for k, v in metric_class_values.items(): - message[f"{k}_avg"] = reduce(lambda a, b: a + b, v) / len(v) - - # send the message - message['sensors'] = metrics_dicts - if args.debug: - eprint(f"Message: {message}") - beat.send_message(message) - - -if __name__ == '__main__': - main() diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index 953a083aa..6745181b6 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -55,21 +55,18 @@ class Constants: FILEBEAT = 'filebeat' METRICBEAT = 'metricbeat' - HEATBEAT = 'heatbeat' # protologbeat to log temperature and other misc. stuff MISCBEAT = 'miscbeat' # protologbeat to log from fluent-bit as we investigate that tool ARKIMECAP = 'arkime-capture' BEAT_DIR = { FILEBEAT: f'/opt/sensor/sensor_ctl/{FILEBEAT}', METRICBEAT: f'/opt/sensor/sensor_ctl/{METRICBEAT}', - HEATBEAT: f'/opt/sensor/sensor_ctl/{HEATBEAT}', MISCBEAT: f'/opt/sensor/sensor_ctl/{MISCBEAT}', } BEAT_CMD = { FILEBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[FILEBEAT]}" --path.config "{BEAT_DIR[FILEBEAT]}" --path.data "{BEAT_DIR[FILEBEAT]}/data" --path.logs "{BEAT_DIR[FILEBEAT]}/logs" -c "{BEAT_DIR[FILEBEAT]}/{FILEBEAT}.yml"', METRICBEAT: f'{METRICBEAT} --path.home "{BEAT_DIR[METRICBEAT]}" --path.config "{BEAT_DIR[METRICBEAT]}" --path.data "{BEAT_DIR[METRICBEAT]}/data" --path.logs "{BEAT_DIR[METRICBEAT]}/logs" -c "{BEAT_DIR[METRICBEAT]}/{METRICBEAT}.yml"', - HEATBEAT: f'protologbeat --path.home "{BEAT_DIR[HEATBEAT]}" --path.config "{BEAT_DIR[HEATBEAT]}" --path.data "{BEAT_DIR[HEATBEAT]}/data" --path.logs "{BEAT_DIR[HEATBEAT]}/logs" -c "{BEAT_DIR[HEATBEAT]}/protologbeat.yml"', MISCBEAT: f'protologbeat --path.home "{BEAT_DIR[MISCBEAT]}" --path.config "{BEAT_DIR[MISCBEAT]}" --path.data "{BEAT_DIR[MISCBEAT]}/data" --path.logs "{BEAT_DIR[MISCBEAT]}/logs" -c "{BEAT_DIR[MISCBEAT]}/protologbeat.yml"', } @@ -117,7 +114,6 @@ class Constants: MSG_CONFIG_ARKIME = (f'{ARKIMECAP}', f'Configure Arkime session forwarding via {ARKIMECAP}') MSG_CONFIG_FILEBEAT = (f'{FILEBEAT}', f'Configure Zeek log forwarding via {FILEBEAT}') MSG_CONFIG_METRICBEAT = (f'{METRICBEAT}', f'Configure resource metrics forwarding via {METRICBEAT}') - MSG_CONFIG_HEATBEAT = (f'{HEATBEAT}', f'Configure hardware metrics (temperature, etc.) forwarding via protologbeat') MSG_CONFIG_MISCBEAT = (f'{MISCBEAT}', f'Configure miscellaneous log forwarding via protologbeat') MSG_OVERWRITE_CONFIG = '{} is already configured, overwrite current settings?' MSG_IDENTIFY_NICS = 'Do you need help identifying network interfaces?' @@ -798,7 +794,6 @@ def main(): Constants.MSG_CONFIG_ARKIME, Constants.MSG_CONFIG_FILEBEAT, Constants.MSG_CONFIG_METRICBEAT, - Constants.MSG_CONFIG_HEATBEAT, Constants.MSG_CONFIG_MISCBEAT, ], ) @@ -889,7 +884,6 @@ def main(): elif ( (fwd_mode == Constants.FILEBEAT) or (fwd_mode == Constants.METRICBEAT) - or (fwd_mode == Constants.HEATBEAT) or (fwd_mode == Constants.MISCBEAT) ): # forwarder configuration for beats -> logstash diff --git a/shared/bin/sensorcommon.py b/shared/bin/sensorcommon.py index 7ec20b9eb..eafcefa83 100644 --- a/shared/bin/sensorcommon.py +++ b/shared/bin/sensorcommon.py @@ -249,35 +249,3 @@ def identify_adapter(adapter, duration=NIC_BLINK_SECONDS, background=False): f"/sbin/ethtool --identify {adapter} {duration}", stdout=False, stderr=False, timeout=duration * 2 ) return retCode == 0 - - -################################################################################################### -# client that writes to the local instance of protologbeat listening on the configured host/port/protocol -class HeatBeatLogger: - def __init__(self, host='127.0.0.1', port=9515, proto='udp', format='plain', debug=False): - self.host = host - self.port = port - if proto == 'udp': - self.proto = 'udp' - self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - else: - self.proto = 'tcp' - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.format = format - if self.format not in ['plain', 'json']: - self.format = 'plain' - self.debug = debug - if self.debug: - print("Creating instance of logger via {} on {}:{}".format(self.proto, self.host, self.port)) - - def enable_debug(self): - self.debug = True - - def send_message(self, msg): - if self.format == 'json': - payload = json.dumps(msg) - else: - payload = msg - if self.debug: - print("Sending message: {}".format(payload.encode('utf-8'))) - self.socket.sendto(payload.encode('utf-8'), (self.host, self.port)) diff --git a/shared/bin/sensormetric.py b/shared/bin/sensormetric.py deleted file mode 100644 index f0a9695aa..000000000 --- a/shared/bin/sensormetric.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -import subprocess -import socket -import string -from sensorcommon import * - -LABEL_HDD = "Storage device" -HDDTEMP_PORT_DEFAULT = 7634 -HDDTEMP_INTERFACE_IP = "127.0.0.1" - - -class Metric(object): - def __init__(self, adapter_id, sensor_id, sensor_key, value, label): - self._value = self.parse_value(value) - self._adapter_id = adapter_id - self._sensor_id = sensor_id - self._sensor_key = sensor_key - self._label = label - if ( - label.startswith('Core') - or label.startswith('Processor') - or ((label.startswith('Physical') or label.startswith('Package')) and adapter_id.startswith('core')) - ): - self._label_class = "cpu" - elif LABEL_HDD in label: - self._label_class = "hdd" - elif "GPU" in label: - self._label_class = "gpu" - elif "DIMM" in label: - self._label_class = "memory" - else: - self._label_class = "other" - - @classmethod - def parse_value(cls, value): - if hasattr(cls, "parse"): - parse = getattr(cls, "parse") - return parse(value) - else: - return value - - def to_dictionary(self): - return { - "name": self._sensor_id, - "adapter": self._adapter_id, - "value": self._value, - "value_type": self.parse.__name__, - "units": getattr(self, "unit", "?"), - "label": self._label, - "class": "%s%s" % (self._label_class, getattr(self, "suffix", "")), - } - - def __repr__(self): - return "%s, %s, %s: %s %s [%s]" % ( - self._adapter_id, - self._sensor_id, - self._sensor_key, - self._value, - getattr(self, "unit", "?"), - self._label, - ) - - -class TemperatureMetric(Metric): - parse = float - unit = "°C" - suffix = "_temp" - - -class FanMetric(Metric): - parse = float - unit = "RPM" - suffix = "_rpm" - - -class VoltageMetric(Metric): - parse = float - unit = "V" - suffix = "_volt" - - -def metric_cleanup(): - pass - - -def get_metrics_list(HddTempHost=HDDTEMP_INTERFACE_IP, HddTempPort=HDDTEMP_PORT_DEFAULT): - - # lm-sensors values - try: - output = subprocess.check_output(["/usr/bin/sensors", "-u"], stderr=subprocess.DEVNULL).decode("utf-8").strip() - except Exception as e: - eprint(e) - output = [] - sections = output.split("\n\n") - - metrics = [] - for section in sections: - fields = section.split("\n") - adapter_id = fields[0] - - label = None - for field in fields[2:]: - if field.startswith(" "): - field = field.replace(" ", "") - field_key, field_value = field.split(": ") - if "_" in field_key: - sensor_id, sensor_key = field_key.split("_", 1) - if sensor_key == "input": - if sensor_id.startswith("temp"): - metrics.append( - TemperatureMetric(adapter_id, sensor_id, sensor_key, field_value, label=label) - ) - elif sensor_id.startswith("in"): - metrics.append(VoltageMetric(adapter_id, sensor_id, sensor_key, field_value, label=label)) - elif sensor_id.startswith("fan"): - metrics.append(FanMetric(adapter_id, sensor_id, sensor_key, field_value, label=label)) - else: - label = field[:-1] # strip off trailing ":" character - - # connect to hddtemp daemon for HDD temperature monitoring - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - try: - try: - s.connect((HDDTEMP_INTERFACE_IP, HDDTEMP_PORT_DEFAULT)) - hdd_temp_line = "" - data = s.recv(4096) - while data: - hdd_temp_line += data.decode('latin-1') - data = s.recv(4096) - for hdd_stats in [x.split('|') for x in hdd_temp_line.strip('|').split('||')]: - if (len(hdd_stats) == 4) and isfloat(hdd_stats[2]): - metrics.append( - TemperatureMetric( - ' '.join(''.join(filter(lambda x: x in string.printable, hdd_stats[1])).split()), - hdd_stats[0], - 'input', - hdd_stats[2], - label=LABEL_HDD, - ) - ) - except Exception as e: - eprint(e) - pass - finally: - s.shutdown(2) - s.close() - - return metrics From 0b180763537e6ec981015c669d345e74099763fc Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Fri, 10 Jun 2022 14:49:12 -0600 Subject: [PATCH 058/122] netif template --- .../templates/composable/component/miscbeat.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 40b2e3b9d..e9ebd928c 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -31,13 +31,16 @@ }, "network": { "properties": { + "bytes.tx": { "type": "long" }, + "bytes.rx": { "type": "long" }, + "bytes.total": { "type": "long" }, + "packets.tx": { "type": "long" }, + "packets.rx": { "type": "long" }, + "packets.total": { "type": "long" }, + "errors.tx": { "type": "long" }, + "errors.rx": { "type": "long" }, + "errors.total": { "type": "long" }, "interface": { "type": "keyword" }, - "tx.bytes.total": { "type": "long" }, - "tx.errors.total": { "type": "long" }, - "tx.packets.total": { "type": "long" }, - "rx.bytes.total": { "type": "long" }, - "rx.errors.total": { "type": "long" }, - "rx.packets.total": { "type": "long" }, "details": { "type": "nested" } } }, From e9903ef8dce7ac7b9dd8980c4655c22134959ace Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 13 Jun 2022 11:47:55 -0600 Subject: [PATCH 059/122] sensor fluentbit work in progress --- .../0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json | 209 ++++++++++++++++++ .../7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json | 2 +- .../beats/Filebeat-nginx-overview.json | 2 +- .../Protologbeat-temperatures-dashboard.json | 112 ---------- .../composable/component/miscbeat.json | 14 +- logstash/pipelines/beats/11_beats_logs.conf | 18 ++ .../supervisor.d/fluentbit-metrics.conf | 23 +- shared/bin/df-json.sh | 13 ++ 8 files changed, 275 insertions(+), 118 deletions(-) create mode 100644 dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json delete mode 100644 dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json create mode 100755 shared/bin/df-json.sh diff --git a/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json b/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json new file mode 100644 index 000000000..1fbbdfa25 --- /dev/null +++ b/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json @@ -0,0 +1,209 @@ +{ + "version": "2.0.0", + "objects": [ + { + "id": "0d4955f0-eb25-11ec-a6d4-b3526526c2c7", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T14:30:49.985Z", + "version": "WzkxMSwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temperature", + "hits": 0, + "description": "Malcolm sensor hardware component temperature summary", + "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":13,\"h\":9,\"i\":\"0a9ba334-b226-4245-b00e-ad8fcabf0e00\"},\"panelIndex\":\"0a9ba334-b226-4245-b00e-ad8fcabf0e00\",\"embeddableConfig\":{\"hidePanelTitles\":true},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":13,\"y\":0,\"w\":35,\"h\":18,\"i\":\"47ef4d93-d7d5-41c3-a3f4-d3b543ad22bc\"},\"panelIndex\":\"47ef4d93-d7d5-41c3-a3f4-d3b543ad22bc\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":9,\"w\":13,\"h\":9,\"i\":\"970e9ca1-f3a4-4660-8f3e-8879e53cc63e\"},\"panelIndex\":\"970e9ca1-f3a4-4660-8f3e-8879e53cc63e\",\"embeddableConfig\":{\"hidePanelTitles\":true},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":18,\"w\":48,\"h\":15,\"i\":\"594e7e58-e32d-4a2d-b492-a97541a2a2d4\"},\"panelIndex\":\"594e7e58-e32d-4a2d-b492-a97541a2a2d4\",\"embeddableConfig\":{\"hidePanelTitles\":false,\"vis\":null},\"panelRefName\":\"panel_3\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":33,\"w\":48,\"h\":35,\"i\":\"aae9ec90-dea9-4a53-b4a7-99c5a6c91b55\"},\"panelIndex\":\"aae9ec90-dea9-4a53-b4a7-99c5a6c91b55\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]", + "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + } + }, + "references": [ + { + "name": "panel_0", + "type": "visualization", + "id": "d2e979c0-eb20-11ec-a6d4-b3526526c2c7" + }, + { + "name": "panel_1", + "type": "visualization", + "id": "6edfd120-eb22-11ec-a6d4-b3526526c2c7" + }, + { + "name": "panel_2", + "type": "visualization", + "id": "ff1a4590-eb22-11ec-a6d4-b3526526c2c7" + }, + { + "name": "panel_3", + "type": "visualization", + "id": "71e9cae0-eb24-11ec-a6d4-b3526526c2c7" + }, + { + "name": "panel_4", + "type": "search", + "id": "4866d670-eb21-11ec-a6d4-b3526526c2c7" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "d2e979c0-eb20-11ec-a6d4-b3526526c2c7", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T13:57:55.163Z", + "version": "Wzg5NiwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temperatures - Host Chooser", + "visState": "{\"title\":\"Malcolm Sensor Temperatures - Host Chooser\",\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1655127648591\",\"fieldName\":\"host.name\",\"parent\":\"\",\"label\":\"Host Chooser\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [ + { + "name": "control_0_index_pattern", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "6edfd120-eb22-11ec-a6d4-b3526526c2c7", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T14:26:58.711Z", + "version": "WzkwOCwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temperature - Over Time", + "visState": "{\"title\":\"Malcolm Sensor Temperature - Over Time\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"miscbeat.thermal.temp\",\"customLabel\":\"High °C\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-30m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":8,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Host\"},\"schema\":\"group\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"grid\":{\"categoryLines\":true,\"valueAxis\":\"ValueAxis-1\"},\"labels\":{},\"legendPosition\":\"bottom\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"High °C\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"cardinal\",\"lineWidth\":1.5,\"mode\":\"normal\",\"show\":true,\"showCircles\":false,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":true,\"style\":\"full\",\"value\":95,\"width\":1},\"times\":[],\"type\":\"line\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"defaultYExtents\":true,\"mode\":\"normal\",\"type\":\"linear\",\"setYExtents\":true,\"min\":35,\"max\":115},\"show\":true,\"style\":{},\"title\":{\"text\":\"High °C\"},\"type\":\"value\"}]}}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "4866d670-eb21-11ec-a6d4-b3526526c2c7" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "ff1a4590-eb22-11ec-a6d4-b3526526c2c7", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T14:13:28.297Z", + "version": "WzkwNCwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temprature - Sensor Chooser", + "visState": "{\"title\":\"Malcolm Sensor Temprature - Sensor Chooser\",\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1655129580950\",\"fieldName\":\"miscbeat.thermal.type.keyword\",\"parent\":\"\",\"label\":\"Sensor Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [ + { + "name": "control_0_index_pattern", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "71e9cae0-eb24-11ec-a6d4-b3526526c2c7", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T14:24:35.386Z", + "version": "WzkwNiwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temperature - Sensor Type", + "visState": "{\"title\":\"Malcolm Sensor Temperature - Sensor Type\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"miscbeat.thermal.temp\",\"customLabel\":\" \"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.thermal.type.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":6,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Type\"},\"schema\":\"group\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":45},{\"from\":45,\"to\":60},{\"from\":60,\"to\":80},{\"from\":80,\"to\":90},{\"from\":90,\"to\":110}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "savedSearchRefName": "search_0" + }, + "references": [ + { + "name": "search_0", + "type": "search", + "id": "4866d670-eb21-11ec-a6d4-b3526526c2c7" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "4866d670-eb21-11ec-a6d4-b3526526c2c7", + "type": "search", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T14:01:12.279Z", + "version": "WzkwMSwyXQ==", + "attributes": { + "title": "Malcolm Sensor Temperature - Logs", + "description": "", + "hits": 0, + "columns": [ + "host.name", + "miscbeat.thermal.type", + "miscbeat.thermal.name", + "miscbeat.thermal.temp" + ], + "sort": [], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"event.module:thermal\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "search": "7.9.3" + } + } + ] +} \ No newline at end of file diff --git a/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json b/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json index b7805985f..b4a58edec 100644 --- a/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json +++ b/dashboards/dashboards/beats/7a7e0a60-e8e8-11ec-b9d4-4569bb965430.json @@ -12,7 +12,7 @@ "attributes": { "title": "Malcolm Sensor Audit Logs", "hits": 0, - "description": "", + "description": "auditd logs from Malcolm sensors", "panelsJSON": "[{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":13,\"h\":16,\"i\":\"fa287c8f-3598-4790-b4bc-c4eb9720312a\"},\"panelIndex\":\"fa287c8f-3598-4790-b4bc-c4eb9720312a\",\"embeddableConfig\":{\"table\":null,\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"}}}},\"panelRefName\":\"panel_0\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":13,\"y\":0,\"w\":9,\"h\":16,\"i\":\"6314eaf8-023d-49dd-974e-bb745958db0b\"},\"panelIndex\":\"6314eaf8-023d-49dd-974e-bb745958db0b\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":22,\"y\":0,\"w\":26,\"h\":16,\"i\":\"40d3f96f-00e8-4137-b76c-b29002d572a4\"},\"panelIndex\":\"40d3f96f-00e8-4137-b76c-b29002d572a4\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":16,\"w\":34,\"h\":32,\"i\":\"48c93940-44c6-4ae1-94f9-c1030b6ff349\"},\"panelIndex\":\"48c93940-44c6-4ae1-94f9-c1030b6ff349\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":34,\"y\":16,\"w\":14,\"h\":16,\"i\":\"5d0e478d-9e6a-4024-9a4b-f96daa6c41a5\"},\"panelIndex\":\"5d0e478d-9e6a-4024-9a4b-f96daa6c41a5\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":34,\"y\":32,\"w\":14,\"h\":16,\"i\":\"c93ce18b-3f75-4096-b3c3-7c4ee1129d6d\"},\"panelIndex\":\"c93ce18b-3f75-4096-b3c3-7c4ee1129d6d\",\"embeddableConfig\":{},\"panelRefName\":\"panel_5\"},{\"version\":\"2.0.0\",\"gridData\":{\"x\":0,\"y\":48,\"w\":48,\"h\":25,\"i\":\"7bc79245-f1e3-47fd-a7de-d58a97ee8161\"},\"panelIndex\":\"7bc79245-f1e3-47fd-a7de-d58a97ee8161\",\"embeddableConfig\":{},\"panelRefName\":\"panel_6\"}]", "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":true}", "version": 1, diff --git a/dashboards/dashboards/beats/Filebeat-nginx-overview.json b/dashboards/dashboards/beats/Filebeat-nginx-overview.json index 6d90abe6b..1092fdcba 100644 --- a/dashboards/dashboards/beats/Filebeat-nginx-overview.json +++ b/dashboards/dashboards/beats/Filebeat-nginx-overview.json @@ -10,7 +10,7 @@ "updated_at": "2022-06-01T19:41:23.453Z", "version": "Wzg0NywxXQ==", "attributes": { - "description": "", + "description": "Overview of logs from Malcolm's own nginx instance", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"version\":true,\"highlightAll\":true}" diff --git a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json b/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json deleted file mode 100644 index cca206d06..000000000 --- a/dashboards/dashboards/beats/Protologbeat-temperatures-dashboard.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "objects": [ - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "Temperature Timeline", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"Temperature Timeline\",\"type\":\"line\",\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":true,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Max cpu_temp_avg\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"3\",\"label\":\"Maximum Other °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"4\",\"label\":\"Maximum GPU °C\"},\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":false,\"interpolate\":\"cardinal\",\"data\":{\"id\":\"8\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-12h\",\"to\":\"now\",\"mode\":\"quick\"},\"useNormalizedEsInterval\":true,\"interval\":\"auto\",\"time_zone\":\"America/Denver\",\"drop_partials\":false,\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.other_temp_avg\",\"customLabel\":\"Maximum Other °C\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.gpu_temp_avg\",\"customLabel\":\"Maximum GPU °C\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" - }, - "id": "752a7e30-03af-11e9-bf7f-6138c205dfb3", - "type": "visualization", - "updated_at": "2018-12-20T18:16:43.966Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "Host Chooser", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"Host Chooser\",\"type\":\"input_control_vis\",\"params\":{\"controls\":[{\"id\":\"1545248066352\",\"indexPattern\":\"malcolm_beats_*\",\"fieldName\":\"host.name\",\"parent\":\"\",\"label\":\"Host\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"}}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false},\"aggs\":[]}" - }, - "id": "293d13a0-03c5-11e9-b42b-a7822d24ca20", - "type": "visualization", - "updated_at": "2018-12-19T19:34:54.681Z", - "version": 1 - }, - { - "attributes": { - "columns": [ - "host.name", - "heatbeat.cpu_temp_avg", - "heatbeat.hdd_temp_avg", - "heatbeat.other_temp_avg" - ], - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "sort": [ - "@timestamp", - "desc" - ], - "title": "Malcolm sensor temperature metrics search", - "version": 1 - }, - "id": "65345580-03c5-11e9-b42b-a7822d24ca20", - "type": "search", - "updated_at": "2018-12-20T18:16:42.939Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "CPU and Storage Temperature Gauge", - "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 60\":\"rgb(0,104,55)\",\"60 - 70\":\"rgb(255,255,190)\",\"70 - 90\":\"rgb(165,0,38)\"}}}", - "version": 1, - "visState": "{\"title\":\"CPU and Storage Temperature Gauge\",\"type\":\"gauge\",\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"verticalSplit\":false,\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":60},{\"from\":60,\"to\":70},{\"from\":70,\"to\":90}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"#333\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"#eee\",\"bgColor\":false,\"subText\":\"\",\"fontSize\":60,\"labelColor\":true}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" - }, - "id": "db628ba0-03c5-11e9-b42b-a7822d24ca20", - "type": "visualization", - "updated_at": "2018-12-20T18:16:43.991Z", - "version": 1 - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"malcolm_beats_*\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" - }, - "title": "Maximum Sensor CPU and Storage Temperatures", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"title\":\"Maximum Sensor CPU and Storage Temperatures\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"},\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100,\"rotate\":0},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\",\"defaultYExtents\":false},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Maximum CPU °C\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Maximum CPU °C\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"data\":{\"id\":\"3\",\"label\":\"Maximum Storage °C\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"orderBucketsBySum\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.cpu_temp_avg\",\"customLabel\":\"Maximum CPU °C\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"host.name\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Name\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"heatbeat.hdd_temp_avg\",\"customLabel\":\"Maximum Storage °C\"}}]}" - }, - "id": "923c3ce0-03c6-11e9-b42b-a7822d24ca20", - "type": "visualization", - "updated_at": "2018-12-20T18:16:43.961Z", - "version": 1 - }, - { - "attributes": { - "description": "Malcolm sensor hardware component temperature summary", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" - }, - "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":false}", - "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":31,\"w\":48,\"h\":35,\"i\":\"1\"},\"id\":\"752a7e30-03af-11e9-bf7f-6138c205dfb3\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":20,\"h\":11,\"i\":\"2\"},\"id\":\"293d13a0-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"2\",\"title\":\"Sensor Filter\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":66,\"w\":48,\"h\":29,\"i\":\"3\"},\"id\":\"65345580-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"3\",\"title\":\"Sensor Metrics\",\"type\":\"search\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":11,\"w\":20,\"h\":20,\"i\":\"4\"},\"id\":\"db628ba0-03c5-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.5.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":20,\"y\":0,\"w\":28,\"h\":31,\"i\":\"5\"},\"id\":\"923c3ce0-03c6-11e9-b42b-a7822d24ca20\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.5.3\"}]", - "timeRestore": false, - "title": "Malcolm Sensor Temperature Summary", - "version": 1 - }, - "id": "3c519150-03c5-11e9-b42b-a7822d24ca20", - "type": "dashboard", - "updated_at": "2018-12-20T18:16:43.882Z", - "version": 1 - } - ], - "version": "6.5.3" -} diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index e9ebd928c..8f612a7d7 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -26,7 +26,16 @@ "disk": { "properties": { "read_size": { "type": "long" }, - "write_size": { "type": "long" } + "write_size": { "type": "long" }, + "df": { + "type": "nested", + "properties": { + "target": { "type": "keyword" }, + "size": { "type": "long" }, + "used": { "type": "long" }, + "available": { "type": "long" } + } + } } }, "network": { @@ -50,6 +59,9 @@ }, "thermal": { "properties": { + "name": { "type": "keyword"}, + "temp": { "type": "float"}, + "type": { "type": "keyword"} } }, "auditlog": { diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 086734756..dd6f7a450 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -180,7 +180,25 @@ filter { id => "ruby_miscbeat_network_details_sum" code => " if interfaces = event.get('[miscbeat][network][details]') then + bytes_tx, bytes_rx, packets_tx, packets_rx, errors_tx, errors_rx = 0, 0, 0, 0, 0, 0 + interfaces.each do |key, value| + bytes_tx = bytes_tx + value.dig('tx', 'bytes').to_i + bytes_rx = bytes_rx + value.dig('rx', 'bytes').to_i + packets_tx = packets_tx + value.dig('tx', 'packets').to_i + packets_rx = packets_rx + value.dig('rx', 'packets').to_i + errors_tx = errors_tx + value.dig('tx', 'errors').to_i + errors_rx = errors_rx + value.dig('rx', 'errors').to_i + end event.set('[miscbeat][network][interface]', interfaces.keys) + event.set('[miscbeat][network][bytes][tx]', bytes_tx) + event.set('[miscbeat][network][bytes][rx]', bytes_rx) + event.set('[miscbeat][network][bytes][total]', bytes_tx+bytes_rx) + event.set('[miscbeat][network][packets][tx]', packets_tx) + event.set('[miscbeat][network][packets][rx]', packets_rx) + event.set('[miscbeat][network][packets][total]', packets_tx+packets_rx) + event.set('[miscbeat][network][errors][tx]', errors_tx) + event.set('[miscbeat][network][errors][rx]', errors_rx) + event.set('[miscbeat][network][errors][total]', errors_tx+errors_rx) end" } } diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf index 00b6109c7..f56b0edff 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf @@ -1,6 +1,5 @@ [group:fluentbit-metrics] -programs=cpu,disk,mem,mem_p -#,netif +programs=cpu,disk,df,mem,mem_p [program:cpu] command=/opt/fluent-bit/bin/fluent-bit @@ -64,4 +63,22 @@ stopasgroup=true killasgroup=true autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s -# netif is managed in a template per-interface (fluentbit-netif.template) \ No newline at end of file +[program:df] +command=/opt/fluent-bit/bin/fluent-bit + -R /etc/fluent-bit/parsers.conf + -i exec + -p "command= /usr/local/bin/df-json.sh" + -p parser=json + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F nest -p Operation=nest -p Nested_under=disk -p WildCard='*' -m '*' + -F record_modifier -p "Record=module disk" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s + +# netif is managed in a template per-interface (fluentbit-netif.template) diff --git a/shared/bin/df-json.sh b/shared/bin/df-json.sh new file mode 100755 index 000000000..36fa38242 --- /dev/null +++ b/shared/bin/df-json.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +df --exclude-type=tmpfs --exclude-type=devtmpfs --block-size=1 --local --no-sync --output=target,size,used,avail 2>/dev/null | \ + jq -R -c -M -s ' + {df: [ + split("\n") | + .[] | + if test("^/") then + gsub(" +"; " ") | split(" ") | {target: .[0], size: .[1], used: .[2], avail: .[3]} + else + empty + end + ]}' From f538101f5471febc40a5e99a39c7a903570571f0 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 13 Jun 2022 11:55:21 -0600 Subject: [PATCH 060/122] sensor fluentbit work in progress --- dashboards/templates/composable/component/miscbeat.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 8f612a7d7..e7058d052 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -33,7 +33,7 @@ "target": { "type": "keyword" }, "size": { "type": "long" }, "used": { "type": "long" }, - "available": { "type": "long" } + "avail": { "type": "long" } } } } From 791938d4a17deb346647bfd22f197c5bb2010e62 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 13 Jun 2022 15:15:14 -0600 Subject: [PATCH 061/122] sensor fluentbit work in progress --- .../beats/Metricbeat-host-overview.json | 1042 ++++++++--------- .../beats/Metricbeat-system-overview.json | 567 ++++----- .../composable/component/miscbeat.json | 13 +- logstash/pipelines/beats/11_beats_logs.conf | 137 +++ logstash/pipelines/beats/98_finalize.conf | 1 - shared/bin/df-json.sh | 4 +- 6 files changed, 919 insertions(+), 845 deletions(-) diff --git a/dashboards/dashboards/beats/Metricbeat-host-overview.json b/dashboards/dashboards/beats/Metricbeat-host-overview.json index 78ed8aff1..d40c790f9 100644 --- a/dashboards/dashboards/beats/Metricbeat-host-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-host-overview.json @@ -1,609 +1,507 @@ { - "objects": [ - { - "attributes": { - "description": "Malcolm sensor hosts' resources overview", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"host.name:\\\"CHANGEME_HOSTNAME\\\"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"1\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"1\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"2\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"2\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"3\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"3\", \"w\": 24, \"y\": 55, \"h\": 15}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"4\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"4\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"5\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"5\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"6\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"6\", \"w\": 24, \"y\": 70, \"h\": 15}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"7\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"7\", \"w\": 24, \"y\": 25, \"h\": 15}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"8\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"8\", \"w\": 24, \"y\": 40, \"h\": 15}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"9\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"10\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"10\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_10\", \"panelIndex\": \"11\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"11\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_11\", \"panelIndex\": \"12\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_12\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"13\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_13\", \"panelIndex\": \"14\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"14\", \"w\": 16, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_14\", \"panelIndex\": \"16\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"16\", \"w\": 24, \"y\": 0, \"h\": 5}}, {\"panelRefName\": \"panel_15\", \"panelIndex\": \"21\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"21\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_16\", \"panelIndex\": \"22\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"22\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_17\", \"panelIndex\": \"23\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"23\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_18\", \"panelIndex\": \"25\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"25\", \"w\": 8, \"y\": 5, \"h\": 10}}, {\"panelRefName\": \"panel_19\", \"panelIndex\": \"27\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"27\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_20\", \"panelIndex\": \"28\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"28\", \"w\": 24, \"y\": 85, \"h\": 15}}, {\"panelRefName\": \"panel_21\", \"panelIndex\": \"29\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"29\", \"w\": 8, \"y\": 15, \"h\": 10}}, {\"panelRefName\": \"panel_22\", \"panelIndex\": \"30\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"30\", \"w\": 24, \"y\": 0, \"h\": 5}}]", - "timeRestore": false, - "title": "Malcolm Sensor Resources - Hosts Overview", - "version": 1 - }, - "id": "79ffd6e0-faa0-11e6-947f-177f697178b8-ecs", - "migrationVersion": { - "dashboard": "7.3.0" - }, - "references": [ - { - "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs", - "name": "panel_0", - "type": "visualization" - }, - { - "id": "4d546850-1b15-11e7-b09e-037021c4f8df-ecs", - "name": "panel_1", - "type": "visualization" - }, - { - "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs", - "name": "panel_2", - "type": "visualization" - }, - { - "id": "bfa5e400-1b16-11e7-b09e-037021c4f8df-ecs", - "name": "panel_3", - "type": "visualization" - }, - { - "id": "e0f001c0-1b18-11e7-b09e-037021c4f8df-ecs", - "name": "panel_4", - "type": "visualization" - }, - { - "id": "2e224660-1b19-11e7-b09e-037021c4f8df-ecs", - "name": "panel_5", - "type": "visualization" - }, - { - "id": "ab2d1e90-1b1a-11e7-b09e-037021c4f8df-ecs", - "name": "panel_6", - "type": "visualization" - }, - { - "id": "4e4bb1e0-1b1b-11e7-b09e-037021c4f8df-ecs", - "name": "panel_7", - "type": "visualization" - }, - { - "id": "26732e20-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_8", - "type": "visualization" - }, - { - "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_9", - "type": "visualization" - }, - { - "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_10", - "type": "visualization" - }, - { - "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_11", - "type": "visualization" - }, - { - "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", - "name": "panel_12", - "type": "visualization" - }, - { - "id": "34f97ee0-1b96-11e7-8ada-3df93aab833e-ecs", - "name": "panel_13", - "type": "visualization" - }, - { - "id": "System-Navigation-ecs", - "name": "panel_14", - "type": "visualization" - }, - { - "id": "19e123b0-4d5a-11e7-aee5-fdc812cc3bec-ecs", - "name": "panel_15", - "type": "visualization" - }, - { - "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs", - "name": "panel_16", - "type": "visualization" - }, - { - "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", - "name": "panel_17", - "type": "visualization" - }, - { - "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs", - "name": "panel_18", - "type": "visualization" - }, - { - "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", - "name": "panel_19", - "type": "visualization" - }, - { - "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", - "name": "panel_20", - "type": "visualization" - }, - { - "id": "590a60f0-5d87-11e7-8884-1bb4c3b890e4-ecs", - "name": "panel_21", - "type": "visualization" - }, - { - "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", - "name": "panel_22", - "type": "visualization" - } - ], - "type": "dashboard", - "updated_at": "2020-03-26T18:07:09.250Z", - "version": "WzY4MDMsN10=" - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Network Traffic (Packets)", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"c0da3d80-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"ecaad010-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound\", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.packets\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"fe5fbdc0-2c2c-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"0.[00]a\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Packets)\", \"type\": \"metrics\"}" - }, - "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjMsM10=" - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "System Load", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Load\", \"params\": {\"id\": \"f6264ad0-1b14-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"f62671e0-1b14-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(115,216,255,1)\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"f62671e1-1b14-11e7-b09e-037021c4f8df\", \"field\": \"system.load.1\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"1m\", \"stacked\": \"none\"}, {\"id\": \"1c324850-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"1c324851-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"5m\", \"stacked\": \"none\"}, {\"id\": \"3287e740-1b15-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,98,177,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32880e50-1b15-11e7-b09e-037021c4f8df\", \"field\": \"system.load.15\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": \"0\", \"line_width\": \"3\", \"label\": \"15m\", \"stacked\": \"none\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" - }, - "id": "4d546850-1b15-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjQsM10=" - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Network Traffic (Bytes)", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"da1046f0-faa0-11e6-86b1-cd7735ff7e23\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"da1046f1-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"da1046f2-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"a87398e0-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f41f9280-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"positive_only\"}, {\"id\": \"2d533df0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Inbound \", \"stacked\": \"none\"}, {\"id\": \"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(250,40,255,1)\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\", \"type\": \"derivative\"}, {\"id\": \"17e597a0-faa1-11e6-86b1-cd7735ff7e23\", \"variables\": [{\"id\": \"1940bad0-faa1-11e6-86b1-cd7735ff7e23\", \"field\": \"fbbd7e31-faa0-11e6-86b1-cd7735ff7e23\", \"name\": \"rate\"}], \"script\": \"params.rate != null && params.rate > 0 ? params.rate * -1 : null\", \"type\": \"calculation\"}, {\"id\": \"533da9b0-2c2d-11e7-be71-3162da85303f\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": \"1\", \"line_width\": \"0\", \"label\": \"Outbound \", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_legend\": 1}, \"title\": \"Mericbeat: Network Traffic (Bytes)\", \"type\": \"metrics\"}" - }, - "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjUsM10=" - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Memory Usage", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage\", \"params\": {\"id\": \"32f46f40-1b16-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"4ff61fd0-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"4ff61fd1-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Used\", \"stacked\": \"stacked\"}, {\"id\": \"753a6080-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(0,156,224,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}, {\"id\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.used.bytes\", \"type\": \"avg\"}, {\"id\": \"869cc160-1b16-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"890f9620-1b16-11e7-b09e-037021c4f8df\", \"field\": \"753a6081-1b16-11e7-b09e-037021c4f8df\", \"name\": \"actual\"}, {\"id\": \"8f3ab7f0-1b16-11e7-b09e-037021c4f8df\", \"field\": \"7c9d3f00-1b16-11e7-b09e-037021c4f8df\", \"name\": \"used\"}], \"script\": \"params.actual != null && params.used != null ? params.used - params.actual : null\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Cache\", \"stacked\": \"stacked\"}, {\"id\": \"32f46f41-1b16-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"32f46f42-1b16-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.free\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"Free\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" - }, - "id": "bfa5e400-1b16-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjYsM10=" - }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Top Processes By CPU", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Processes By CPU\", \"params\": {\"id\": \"5f5b8d50-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"5f5b8d51-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.cpu.total.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"5f5b8d52-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"60e11be0-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}]}, \"type\": \"metrics\"}" - }, - "id": "e0f001c0-1b18-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjcsM10=" - }, + "version": "2.0.0", + "objects": [ + { + "id": "79ffd6e0-faa0-11e6-947f-177f697178b8-ecs", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:10:35.353Z", + "version": "WzkxNSwxXQ==", + "attributes": { + "title": "Malcolm Sensor Resources - Hosts Overview", + "hits": 0, + "description": "Malcolm sensor hosts' resources overview", + "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"1\",\"w\":24,\"x\":0,\"y\":58},\"panelIndex\":\"1\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"3\",\"w\":24,\"x\":0,\"y\":40},\"panelIndex\":\"3\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"4\",\"w\":24,\"x\":24,\"y\":20},\"panelIndex\":\"4\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"7\",\"w\":24,\"x\":24,\"y\":5},\"panelIndex\":\"7\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"8\",\"w\":24,\"x\":24,\"y\":35},\"panelIndex\":\"8\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"10\",\"w\":12,\"x\":0,\"y\":5},\"panelIndex\":\"10\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"11\",\"w\":12,\"x\":12,\"y\":5},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"12\",\"w\":8,\"x\":0,\"y\":30},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"13\",\"w\":8,\"x\":8,\"y\":30},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"16\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"21\",\"w\":8,\"x\":0,\"y\":18},\"panelIndex\":\"21\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"22\",\"w\":8,\"x\":8,\"y\":18},\"panelIndex\":\"22\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_11\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"23\",\"w\":8,\"x\":16,\"y\":18},\"panelIndex\":\"23\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_12\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"25\",\"w\":8,\"x\":16,\"y\":30},\"panelIndex\":\"25\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_13\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"27\",\"w\":24,\"x\":24,\"y\":50},\"panelIndex\":\"27\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_14\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"28\",\"w\":24,\"x\":24,\"y\":63},\"panelIndex\":\"28\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_15\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"30\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"30\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_16\"}]", + "optionsJSON": "{\"darkTheme\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"host.name:\\\"hedgehogvm\\\"\"},\"version\":true,\"highlightAll\":true,\"filter\":[]}" + } + }, + "references": [ { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Processes By Memory", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Processes By Memory\", \"params\": {\"id\": \"edfceb30-1b18-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"edfceb31-1b18-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"process.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"field\": \"system.process.memory.rss.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"edfceb32-1b18-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"efb9b660-1b18-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"17fcb820-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1dd61070-1b19-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" - }, - "id": "2e224660-1b19-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjgsM10=" + "name": "panel_0", + "type": "visualization", + "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "CPU Usage", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage\", \"params\": {\"id\": \"80a04950-1b19-11e7-b09e-037021c4f8df\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"80a04951-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"80a04952-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"user\", \"stacked\": \"stacked\"}, {\"id\": \"993acf30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(211,49,21,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"993acf31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"system\", \"stacked\": \"stacked\"}, {\"id\": \"65ca35e0-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(123,100,255,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"65ca5cf0-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.nice.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"nice\", \"stacked\": \"stacked\"}, {\"id\": \"741b5f20-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(226,115,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"741b5f21-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.irq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"irq\", \"stacked\": \"stacked\"}, {\"id\": \"2efc5d40-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(176,188,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"2efc5d41-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.softirq.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"softirq\", \"stacked\": \"stacked\"}, {\"id\": \"ae644a30-1b19-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(15,20,25,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"metrics\": [{\"id\": \"ae644a31-1b19-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.iowait.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"iowait\", \"stacked\": \"stacked\"}], \"axis_formatter\": \"number\", \"interval\": \"auto\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" - }, - "id": "ab2d1e90-1b1a-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNjksM10=" + "name": "panel_1", + "type": "visualization", + "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Disk IO (Bytes)", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk IO (Bytes)\", \"params\": {\"id\": \"d3c67db0-1b1a-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"id\": \"d3c67db1-1b1a-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(22,165,165,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.read.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"field\": \"d3c67db2-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"dcbbb100-1b93-11e7-8ada-3df93aab833e\", \"field\": \"f55b9910-1b1a-11e7-b09e-037021c4f8df\", \"type\": \"positive_only\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"reads\", \"stacked\": \"none\"}, {\"id\": \"144124d0-1b1b-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"rgba(251,158,0,1)\", \"axis_position\": \"right\", \"point_size\": \"0\", \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"system.diskio.write.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d1-1b1b-11e7-b09e-037021c4f8df\", \"type\": \"derivative\"}, {\"id\": \"144124d4-1b1b-11e7-b09e-037021c4f8df\", \"variables\": [{\"id\": \"144124d3-1b1b-11e7-b09e-037021c4f8df\", \"field\": \"144124d2-1b1b-11e7-b09e-037021c4f8df\", \"name\": \"rate\"}], \"script\": \"params.rate > 0 ? params.rate * -1 : 0\", \"type\": \"calculation\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": \"1\", \"line_width\": 1, \"label\": \"writes\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"type\": \"timeseries\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" - }, - "id": "4e4bb1e0-1b1b-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNzAsM10=" + "name": "panel_2", + "type": "visualization", + "id": "bfa5e400-1b16-11e7-b09e-037021c4f8df-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Load Gauge", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Load Gauge\", \"params\": {\"id\": \"fdcc6180-1b90-11e7-bec4-a5e9ec5cab8b\", \"series\": [{\"id\": \"fdcc6181-1b90-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"fdcc6182-1b90-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.load.5\", \"type\": \"avg\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"5m Load\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"feefabd0-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"show_legend\": 1, \"gauge_inner_width\": 10, \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"gauge_color_rules\": [{\"id\": \"ffd94880-1b90-11e7-bec4-a5e9ec5cab8b\"}], \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "26732e20-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNzEsM10=" + "name": "panel_3", + "type": "visualization", + "id": "ab2d1e90-1b1a-11e7-b09e-037021c4f8df-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "CPU Usage Gauge", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzODEsM10=" + "name": "panel_4", + "type": "visualization", + "id": "4e4bb1e0-1b1b-11e7-b09e-037021c4f8df-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Memory Usage Gauge", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzODAsM10=" + "name": "panel_5", + "type": "visualization", + "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Inbound Traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" - }, - "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzcsM10=" + "name": "panel_6", + "type": "visualization", + "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Outbound Traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" - }, - "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzgsM10=" + "name": "panel_7", + "type": "visualization", + "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Disk Usage", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk Usage\", \"params\": {\"id\": \"9f7e48a0-1b95-11e7-8ada-3df93aab833e\", \"filter\": {\"query\": \"-system.filesystem.mount_point:\\\\/run* AND -system.filesystem.mount_point:\\\\/sys* AND -system.filesystem.mount_point:\\\\/dev* AND -system.filesystem.mount_point:\\\\/proc* AND -system.filesystem.mount_point:\\\\/var* AND -system.filesystem.mount_point:\\\\/boot\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"9f7e48a1-1b95-11e7-8ada-3df93aab833e\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.filesystem.mount_point\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f7e48a2-1b95-11e7-8ada-3df93aab833e\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.filesystem.used.pct\", \"size\": 1, \"order\": \"desc\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"stacked\": \"none\"}], \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"drilldown_url\": \"\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"default_timefield\": \"@timestamp\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"bf525310-1b95-11e7-8ada-3df93aab833e\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"125fc4c0-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.7, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"1a5c7240-1b96-11e7-8ada-3df93aab833e\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" - }, - "id": "34f97ee0-1b96-11e7-8ada-3df93aab833e-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-26T17:26:35.781Z", - "version": "WzY3NTEsN10=" + "name": "panel_8", + "type": "visualization", + "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "System Navigation", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" - }, - "id": "System-Navigation-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzIsM10=" + "name": "panel_9", + "type": "visualization", + "id": "System-Navigation-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Swap usage", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Swap usage\", \"params\": {\"id\": \"cee2fd20-4d59-11e7-aee5-fdc812cc3bec\", \"filter\": \"\", \"series\": [{\"id\": \"cee2fd21-4d59-11e7-aee5-fdc812cc3bec\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\", \"field\": \"system.memory.swap.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Swap usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"d17c1e90-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fc1d3490-4d59-11e7-aee5-fdc812cc3bec\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"0e204240-4d5a-11e7-aee5-fdc812cc3bec\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "19e123b0-4d5a-11e7-aee5-fdc812cc3bec-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNzgsM10=" + "name": "panel_10", + "type": "visualization", + "id": "19e123b0-4d5a-11e7-aee5-fdc812cc3bec-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Memory usage vs total", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"listeners\": {}, \"params\": {\"id\": \"6bc65720-4d5c-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6bc65721-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6bc65722-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.actual.used.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory usage\", \"stacked\": \"none\"}, {\"id\": \"b8fe6820-4d5c-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"b8fe6821-4d5c-11e7-aa29-87a97a796de6\", \"field\": \"system.memory.total\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Memory\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_legend\": 1}, \"title\": \"Memory usage vs total\", \"type\": \"metrics\"}" - }, - "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxNzksM10=" + "name": "panel_11", + "type": "visualization", + "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Disk used", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk used\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-26T17:22:09.379Z", - "version": "WzY3MTksN10=" + "name": "panel_12", + "type": "visualization", + "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Packetloss", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Packetloss\", \"params\": {\"id\": \"6984af10-4d5d-11e7-aa29-87a97a796de6\", \"index_pattern\": \"malcolm_beats_*\", \"interval\": \"auto\", \"background_color_rules\": [{\"id\": \"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}], \"axis_formatter\": \"number\", \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"series\": [{\"id\": \"6984af11-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"6984af12-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.in.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"In Packetloss\", \"stacked\": \"none\"}, {\"id\": \"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\", \"field\": \"system.network.out.dropped\", \"type\": \"max\"}], \"formatter\": \"number\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Out Packetloss\", \"stacked\": \"none\"}], \"type\": \"metric\", \"show_grid\": 1, \"show_legend\": 1}, \"type\": \"metrics\"}" - }, - "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxODEsM10=" + "name": "panel_13", + "type": "visualization", + "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Interfaces by Incoming traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Interfaces by Incoming traffic\", \"params\": {\"id\": \"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.in.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Incoming traffic\", \"terms_order_by\": \"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" - }, - "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxODIsM10=" + "name": "panel_14", + "type": "visualization", + "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Interfaces by Outgoing traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Interfaces by Outgoing traffic\", \"params\": {\"id\": \"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\", \"index_pattern\": \"malcolm_beats_*\", \"series\": [{\"id\": \"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"field\": \"system.network.out.bytes\", \"type\": \"avg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Interfaces by Outgoing traffic\", \"terms_order_by\": \"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\", \"stacked\": \"none\"}], \"interval\": \"auto\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"time_field\": \"@timestamp\", \"axis_position\": \"left\", \"type\": \"top_n\", \"show_grid\": 1, \"bar_color_rules\": [{\"id\": \"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}]}, \"type\": \"metrics\"}" - }, - "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxODMsM10=" + "name": "panel_15", + "type": "visualization", + "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Number of processes", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"process.pid\", \"customLabel\": \"Processes\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"listeners\": {}, \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": 60}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": true, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"title\": \"Number of processes\", \"type\": \"metric\"}" - }, - "id": "590a60f0-5d87-11e7-8884-1bb4c3b890e4-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [ - { - "id": "malcolm_beats_*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - } - ], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxODQsM10=" + "name": "panel_16", + "type": "visualization", + "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "6b7b9a40-faa1-11e6-86b1-cd7735ff7e23-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg0OCwxXQ==", + "attributes": { + "title": "Network Traffic (Packets)", + "visState": "{\"title\":\"Network Traffic (Packets)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"da1046f1-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(0,156,224,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.packets.rx\",\"type\":\"sum\"}],\"formatter\":\"0.[00]a\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Inbound\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_size\":\"10\",\"terms_order_by\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\"},{\"id\":\"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(250,40,255,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.packets.tx\",\"type\":\"sum\"},{\"id\":\"f25a1460-eb55-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"f61d5df0-eb55-11ec-ae08-f703744a0ba1\",\"name\":\"sumtx\",\"field\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\"}],\"script\":\"0 - params.sumtx\"}],\"formatter\":\"0.[00]a\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Outbound\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_size\":\"10\",\"terms_order_by\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_legend\":1,\"axis_scale\":\"normal\",\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "089b85d0-1b16-11e7-b09e-037021c4f8df-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg0OSwxXQ==", + "attributes": { + "title": "Network Traffic (Bytes)", + "visState": "{\"title\":\"Network Traffic (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"da1046f1-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(0,156,224,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Inbound \",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_order_by\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\"},{\"id\":\"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(250,40,255,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"533da9b0-2c2d-11e7-be71-3162da85303f\",\"function\":\"sum\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.tx\"},{\"id\":\"ce5e8050-eb55-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"d2773ce0-eb55-11ec-ae08-f703744a0ba1\",\"name\":\"sumtx\",\"field\":\"533da9b0-2c2d-11e7-be71-3162da85303f\"}],\"script\":\"0 - params.sumtx\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Outbound \",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_order_by\":\"533da9b0-2c2d-11e7-be71-3162da85303f\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_legend\":1,\"axis_scale\":\"normal\",\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "bfa5e400-1b16-11e7-b09e-037021c4f8df-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg1MCwxXQ==", + "attributes": { + "title": "Memory Usage", + "visState": "{\"title\":\"Memory Usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"32f46f40-1b16-11e7-b09e-037021c4f8df\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"4ff61fd0-1b16-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(211,49,21,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"4ff61fd1-1b16-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.used\",\"type\":\"avg\"},{\"id\":\"3150c580-eb54-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"34e66f60-eb54-11ec-ae08-f703744a0ba1\",\"name\":\"usedkb\",\"field\":\"4ff61fd1-1b16-11e7-b09e-037021c4f8df\"}],\"script\":\"params.usedkb * 1000\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"Used\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"753a6080-1b16-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(0,156,224,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"753a6081-1b16-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Swap.used\",\"type\":\"avg\"},{\"id\":\"4f1bb980-eb54-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"52c168f0-eb54-11ec-ae08-f703744a0ba1\",\"name\":\"swapkb\",\"field\":\"753a6081-1b16-11e7-b09e-037021c4f8df\"}],\"script\":\"params.swapkb * 1000\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"Swap\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"32f46f41-1b16-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"32f46f42-1b16-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.free\",\"type\":\"avg\"},{\"id\":\"61b8e450-eb54-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"6458bc80-eb54-11ec-ae08-f703744a0ba1\",\"name\":\"freekb\",\"field\":\"32f46f42-1b16-11e7-b09e-037021c4f8df\"}],\"script\":\"params.freekb * 1000\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"Free\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"axis_formatter\":\"number\",\"interval\":\"auto\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "ab2d1e90-1b1a-11e7-b09e-037021c4f8df-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg1MSwxXQ==", + "attributes": { + "title": "CPU Usage", + "visState": "{\"title\":\"CPU Usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"80a04950-1b19-11e7-b09e-037021c4f8df\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"80a04951-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"80a04952-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.user_p\",\"type\":\"avg\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"user\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"993acf30-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(211,49,21,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"993acf31-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.system_p\",\"type\":\"avg\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"system\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"axis_formatter\":\"number\",\"interval\":\"auto\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "4e4bb1e0-1b1b-11e7-b09e-037021c4f8df-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg1MiwxXQ==", + "attributes": { + "title": "Disk IO (Bytes)", + "visState": "{\"title\":\"Disk IO (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"d3c67db0-1b1a-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"id\":\"d3c67db1-1b1a-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(22,165,165,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"d3c67db2-1b1a-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.read_size\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"reads\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"144124d0-1b1b-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(251,158,0,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"144124d1-1b1b-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.write_size\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"writes\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:22.812Z", + "version": "Wzg3NiwxXQ==", + "attributes": { + "title": "CPU Usage Gauge", + "visState": "{\"title\":\"CPU Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"114cd270-eb49-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.cpu.cpu_p\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"CPU Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"background_color_rules\":[{\"id\":\"64e19c90-eb49-11ec-ae08-f703744a0ba1\"}],\"bar_color_rules\":[{\"id\":\"65456770-eb49-11ec-ae08-f703744a0ba1\"}]}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:22.812Z", + "version": "Wzg3NSwxXQ==", + "attributes": { + "title": "Memory Usage Gauge", + "visState": "{\"title\":\"Memory Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Memory Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:22.812Z", + "version": "Wzg3MiwxXQ==", + "attributes": { + "title": "Inbound Traffic", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:22.812Z", + "version": "Wzg3MywxXQ==", + "attributes": { + "title": "Outbound Traffic", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "System-Navigation-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:22.812Z", + "version": "Wzg2NywxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, - { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Tip", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Tip\", \"params\": {\"markdown\": \"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and double-click a host name.\", \"fontSize\": 12}, \"type\": \"markdown\"}" - }, - "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:18.996Z", - "version": "WzUxODUsM10=" + "title": "System Navigation", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"title\":\"System Navigation\",\"params\":{\"markdown\":\"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\",\"fontSize\":12},\"type\":\"markdown\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "19e123b0-4d5a-11e7-aee5-fdc812cc3bec-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg1OSwxXQ==", + "attributes": { + "title": "Swap usage", + "visState": "{\"title\":\"Swap usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"cee2fd20-4d59-11e7-aee5-fdc812cc3bec\",\"filter\":\"\",\"series\":[{\"id\":\"cee2fd21-4d59-11e7-aee5-fdc812cc3bec\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\",\"field\":\"miscbeat.mem.Swap.used\",\"type\":\"avg\"},{\"id\":\"9cd408f0-eb52-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.mem.Swap.total\"},{\"id\":\"a4743e90-eb52-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"a62793e0-eb52-11ec-ae08-f703744a0ba1\",\"name\":\"used\",\"field\":\"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\"},{\"id\":\"aaa023b0-eb52-11ec-ae08-f703744a0ba1\",\"name\":\"total\",\"field\":\"9cd408f0-eb52-11ec-ae08-f703744a0ba1\"}],\"script\":\"params.used / params.total\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Swap usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"d17c1e90-4d59-11e7-aee5-fdc812cc3bec\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"fc1d3490-4d59-11e7-aee5-fdc812cc3bec\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"0e204240-4d5a-11e7-aee5-fdc812cc3bec\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "d2e80340-4d5c-11e7-aa29-87a97a796de6-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg2MCwxXQ==", + "attributes": { + "title": "Memory usage vs total", + "visState": "{\"title\":\"Memory usage vs total\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}],\"id\":\"6bc65720-4d5c-11e7-aa29-87a97a796de6\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"6bc65721-4d5c-11e7-aa29-87a97a796de6\",\"label\":\"Memory usage\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.mem.Mem.used\",\"id\":\"6bc65722-4d5c-11e7-aa29-87a97a796de6\",\"type\":\"avg\"},{\"id\":\"647ab8e0-eb53-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"674d39d0-eb53-11ec-ae08-f703744a0ba1\",\"name\":\"memusedkb\",\"field\":\"6bc65722-4d5c-11e7-aa29-87a97a796de6\"}],\"script\":\"params.memusedkb * 1000\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"b8fe6820-4d5c-11e7-aa29-87a97a796de6\",\"label\":\"Total Memory\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.mem.Mem.total\",\"id\":\"b8fe6821-4d5c-11e7-aa29-87a97a796de6\",\"type\":\"avg\"},{\"id\":\"83f4bc70-eb53-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"9ea2b900-eb53-11ec-ae08-f703744a0ba1\",\"name\":\"memtotalkb\",\"field\":\"b8fe6821-4d5c-11e7-aa29-87a97a796de6\"}],\"script\":\"params.memtotalkb * 1000\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:04:37.184Z", + "version": "WzkwNywxXQ==", + "attributes": { + "title": "Disk used", + "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:10:18.645Z", + "version": "WzkxMywxXQ==", + "attributes": { + "title": "Network Errors", + "visState": "{\"title\":\"Network Errors\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"6984af10-4d5d-11e7-aa29-87a97a796de6\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"background_color_rules\":[{\"id\":\"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}],\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"series\":[{\"id\":\"6984af11-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"6984af12-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.rx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors In\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.tx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors Out\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"type\":\"metric\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" } - ], - "version": "7.6.0" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg2MywxXQ==", + "attributes": { + "title": "Interfaces by Incoming traffic", + "visState": "{\"title\":\"Interfaces by Incoming traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Incoming traffic\",\"terms_order_by\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg2NCwxXQ==", + "attributes": { + "title": "Interfaces by Outgoing traffic", + "visState": "{\"title\":\"Interfaces by Outgoing traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Outgoing traffic\",\"terms_order_by\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:03:21.806Z", + "version": "Wzg2NSwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + }, + "title": "Tip", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"title\":\"Tip\",\"params\":{\"markdown\":\"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and double-click a host name.\",\"fontSize\":12},\"type\":\"markdown\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + } + ] } \ No newline at end of file diff --git a/dashboards/dashboards/beats/Metricbeat-system-overview.json b/dashboards/dashboards/beats/Metricbeat-system-overview.json index d43f4cd14..f0a98e4ce 100644 --- a/dashboards/dashboards/beats/Metricbeat-system-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-system-overview.json @@ -1,290 +1,323 @@ { - "objects": [ + "version": "2.0.0", + "objects": [ + { + "id": "Metricbeat-system-overview-ecs", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:31:22.966Z", + "version": "Wzg3MSwxXQ==", + "attributes": { + "description": "Malcolm sensor system resources overview", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" + }, + "optionsJSON": "{\"darkTheme\": false}", + "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"9\", \"w\": 48, \"y\": 0, \"h\": 4}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"11\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"11\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"12\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"13\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"14\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"45% - 60%\": \"rgb(35,139,69)\", \"0% - 15%\": \"rgb(247,252,245)\", \"15% - 30%\": \"rgb(199,233,192)\", \"30% - 45%\": \"rgb(116,196,118)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"14\", \"w\": 48, \"y\": 32, \"h\": 24}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"16\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"16\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"17\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"17\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"18\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"18\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"19\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"19\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"20\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"20\", \"w\": 8, \"y\": 4, \"h\": 8}}]", + "timeRestore": false, + "title": "Malcolm Sensor Resources - System Overview", + "version": 1 + }, + "references": [ { - "attributes": { - "description": "Malcolm sensor system resources overview", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"9\", \"w\": 48, \"y\": 0, \"h\": 4}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"11\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"11\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"12\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"13\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"14\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"45% - 60%\": \"rgb(35,139,69)\", \"0% - 15%\": \"rgb(247,252,245)\", \"15% - 30%\": \"rgb(199,233,192)\", \"30% - 45%\": \"rgb(116,196,118)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"14\", \"w\": 48, \"y\": 32, \"h\": 24}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"16\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"16\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"17\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"17\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"18\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"18\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"19\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"19\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"20\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"20\", \"w\": 8, \"y\": 4, \"h\": 8}}]", - "timeRestore": false, - "title": "Malcolm Sensor Resources - System Overview", - "version": 1 - }, - "id": "Metricbeat-system-overview-ecs", - "migrationVersion": { - "dashboard": "7.3.0" - }, - "references": [ - { - "id": "System-Navigation-ecs", - "name": "panel_0", - "type": "visualization" - }, - { - "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", - "name": "panel_1", - "type": "visualization" - }, - { - "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_2", - "type": "visualization" - }, - { - "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", - "name": "panel_3", - "type": "visualization" - }, - { - "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", - "name": "panel_4", - "type": "visualization" - }, - { - "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_5", - "type": "visualization" - }, - { - "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", - "name": "panel_6", - "type": "visualization" - }, - { - "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", - "name": "panel_7", - "type": "visualization" - }, - { - "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_8", - "type": "visualization" - }, - { - "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "name": "panel_9", - "type": "visualization" - } - ], - "type": "dashboard", - "updated_at": "2020-03-26T17:29:07.346Z", - "version": "WzY3NjMsN10=" + "id": "System-Navigation-ecs", + "name": "panel_0", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "System Navigation", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"System Navigation\", \"params\": {\"markdown\": \"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\", \"fontSize\": 12}, \"type\": \"markdown\"}" - }, - "id": "System-Navigation-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzIsM10=" + "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", + "name": "panel_1", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Number of hosts", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"host.name\", \"customLabel\": \"Number of hosts\"}, \"id\": \"1\", \"type\": \"cardinality\"}], \"title\": \"Number of hosts\", \"params\": {\"type\": \"gauge\", \"gauge\": {\"orientation\": \"vertical\", \"gaugeColorMode\": \"None\", \"style\": {\"labelColor\": false, \"subText\": \"\", \"bgFill\": \"#000\", \"bgColor\": false, \"fontSize\": \"63\"}, \"colorsRange\": [{\"to\": 100, \"from\": 0}], \"autoExtend\": false, \"invertColors\": false, \"scale\": {\"width\": 2, \"show\": false, \"labels\": false, \"color\": \"#333\"}, \"verticalSplit\": false, \"labels\": {\"show\": false, \"color\": \"black\"}, \"type\": \"simple\", \"gaugeStyle\": \"Full\", \"useRange\": false, \"gaugeType\": \"Metric\", \"percentageMode\": false, \"backStyle\": \"Full\", \"colorSchema\": \"Green to Red\"}, \"addTooltip\": true, \"addLegend\": false}, \"type\": \"metric\"}" - }, - "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [ - { - "id": "malcolm_beats_*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - } - ], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzMsM10=" + "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", + "name": "panel_2", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Top Hosts By Memory (Realtime)", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Hosts By Memory (Realtime)\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" - }, - "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzQsM10=" + "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", + "name": "panel_3", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Top Hosts By CPU (Realtime)", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Top Hosts By CPU (Realtime)\", \"params\": {\"id\": \"31e5afa0-1b1c-11e7-b09e-037021c4f8df\", \"filter\": \"\", \"series\": [{\"terms_size\": \"10\", \"id\": \"31e5afa1-1b1c-11e7-b09e-037021c4f8df\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"host.name\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"terms_order_by\": \"31e5afa2-1b1c-11e7-b09e-037021c4f8df\", \"stacked\": \"none\"}], \"time_field\": \"@timestamp\", \"axis_formatter\": \"number\", \"drilldown_url\": \"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\", \"show_grid\": 1, \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"axis_position\": \"left\", \"type\": \"top_n\", \"bar_color_rules\": [{\"operator\": \"gte\", \"id\": \"33349dd0-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0, \"bar_color\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"997dc440-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.6, \"bar_color\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"a10d7f20-1b1c-11e7-b09e-037021c4f8df\", \"value\": 0.85, \"bar_color\": \"rgba(211,49,21,1)\"}]}, \"type\": \"metrics\"}" - }, - "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzUsM10=" + "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", + "name": "panel_4", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" - }, - "title": "Hosts histogram by CPU usage", - "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"10% - 15%\": \"rgb(116,196,118)\", \"5% - 10%\": \"rgb(199,233,192)\", \"0% - 5%\": \"rgb(247,252,245)\", \"15% - 20%\": \"rgb(35,139,69)\"}}}", - "version": 1, - "visState": "{\"aggs\": [{\"enabled\": true, \"schema\": \"metric\", \"params\": {\"field\": \"system.cpu.user.pct\", \"customLabel\": \"CPU usage\"}, \"id\": \"1\", \"type\": \"avg\"}, {\"enabled\": true, \"schema\": \"segment\", \"params\": {\"min_doc_count\": 1, \"extended_bounds\": {}, \"field\": \"@timestamp\", \"interval\": \"auto\"}, \"id\": \"2\", \"type\": \"date_histogram\"}, {\"enabled\": true, \"schema\": \"group\", \"params\": {\"size\": 20, \"orderBy\": \"1\", \"field\": \"host.name\", \"customLabel\": \"Hosts\", \"order\": \"desc\"}, \"id\": \"3\", \"type\": \"terms\"}], \"title\": \"Hosts histogram by CPU usage\", \"params\": {\"addTooltip\": true, \"colorsNumber\": 4, \"colorsRange\": [], \"invertColors\": false, \"setColorRange\": false, \"enableHover\": false, \"valueAxes\": [{\"scale\": {\"type\": \"linear\", \"defaultYExtents\": false}, \"id\": \"ValueAxis-1\", \"labels\": {\"rotate\": 0, \"show\": false, \"color\": \"#555\"}, \"show\": false, \"type\": \"value\"}], \"type\": \"heatmap\", \"times\": [], \"percentageMode\": false, \"colorSchema\": \"Greens\", \"addLegend\": true, \"legendPosition\": \"right\"}, \"type\": \"heatmap\"}" - }, - "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [ - { - "id": "malcolm_beats_*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - } - ], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzYsM10=" + "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", + "name": "panel_5", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Inbound Traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Inbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"c40e18f0-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Inbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.in.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" - }, - "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzcsM10=" + "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", + "name": "panel_6", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Outbound Traffic", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Outbound Traffic\", \"params\": {\"id\": \"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\", \"filter\": {\"query\": \"-system.network.name:l*\", \"language\": \"lucene\"}, \"series\": [{\"id\": \"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}/s\", \"metrics\": [{\"id\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"1s\", \"id\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f2074f70-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"1d659060-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"a1737470-2c55-11e7-a0ad-277ce466684d\", \"function\": \"sum\", \"type\": \"series_agg\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Outbound Traffic\", \"stacked\": \"none\"}, {\"id\": \"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"terms_field\": \"system.network.name\", \"axis_position\": \"right\", \"point_size\": 1, \"value_template\": \"{{value}}\", \"metrics\": [{\"id\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.network.out.bytes\", \"type\": \"max\"}, {\"unit\": \"\", \"id\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"field\": \"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"derivative\"}, {\"unit\": \"\", \"id\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"field\": \"37f72b51-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"positive_only\"}, {\"id\": \"3e63c2f0-1b92-11e7-bec4-a5e9ec5cab8b\", \"type\": \"series_agg\", \"field\": \"f9da2dd0-1b92-11e7-a416-41f5ccdba2e6\", \"sigma\": \"\", \"function\": \"overall_sum\"}], \"formatter\": \"bytes\", \"split_mode\": \"terms\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Total Transferred\", \"stacked\": \"none\"}], \"background_color_rules\": [{\"id\": \"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}], \"axis_formatter\": \"number\", \"axis_position\": \"left\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"index_pattern\": \"malcolm_beats_*\", \"show_legend\": 1, \"interval\": \"auto\", \"type\": \"metric\"}, \"type\": \"metrics\"}" - }, - "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzNzgsM10=" + "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", + "name": "panel_7", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Disk used", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Disk used\", \"params\": {\"id\": \"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\", \"filter\": \"\", \"interval\": \"auto\", \"default_index_pattern\": \"malcolm_beats_*\", \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"time_range_mode\": \"entire_time_range\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"default_timefield\": \"@timestamp\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"f26de750-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.7, \"gauge\": \"rgba(251,158,0,1)\"}, {\"operator\": \"gte\", \"id\": \"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"gauge_inner_width\": 10, \"series\": [{\"id\": \"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.used\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"order_by\": \"@timestamp\", \"type\": \"top_hit\", \"agg_with\": \"avg\", \"field\": \"system.fsstat.total_size.total\", \"size\": 1, \"order\": \"desc\"}, {\"id\": \"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\", \"variables\": [{\"id\": \"6da10430-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\", \"name\": \"used\"}, {\"id\": \"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\", \"field\": \"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\", \"name\": \"total\"}], \"script\": \"params.used/params.total \", \"type\": \"math\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Disk used\", \"stacked\": \"none\"}], \"isModelInvalid\": false, \"axis_scale\": \"normal\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-26T17:22:09.379Z", - "version": "WzY3MTksN10=" + "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "name": "panel_8", + "type": "visualization" }, { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "Memory Usage Gauge", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"Memory Usage Gauge\", \"params\": {\"id\": \"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.memory.actual.used.pct\", \"type\": \"avg\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"Memory Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzODAsM10=" + "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "name": "panel_9", + "type": "visualization" + } + ], + "migrationVersion": { + "dashboard": "7.9.3" + } + }, + { + "id": "System-Navigation-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:31:22.966Z", + "version": "Wzg3MiwxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" }, + "title": "System Navigation", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"title\":\"System Navigation\",\"params\":{\"markdown\":\"[System Overview](#/dashboard/Metricbeat-system-overview-ecs) | [Host Overview](#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)\",\"fontSize\":12},\"type\":\"markdown\"}" + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:31:22.966Z", + "version": "Wzg3MywxXQ==", + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\", \"filter\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "title": "Number of hosts", + "uiStateJSON": "{\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"schema\":\"metric\",\"params\":{\"field\":\"host.name\",\"customLabel\":\"Number of hosts\"},\"id\":\"1\",\"type\":\"cardinality\"}],\"title\":\"Number of hosts\",\"params\":{\"type\":\"gauge\",\"gauge\":{\"orientation\":\"vertical\",\"gaugeColorMode\":\"None\",\"style\":{\"labelColor\":false,\"subText\":\"\",\"bgFill\":\"#000\",\"bgColor\":false,\"fontSize\":\"63\"},\"colorsRange\":[{\"to\":100,\"from\":0}],\"autoExtend\":false,\"invertColors\":false,\"scale\":{\"width\":2,\"show\":false,\"labels\":false,\"color\":\"#333\"},\"verticalSplit\":false,\"labels\":{\"show\":false,\"color\":\"black\"},\"type\":\"simple\",\"gaugeStyle\":\"Full\",\"useRange\":false,\"gaugeType\":\"Metric\",\"percentageMode\":false,\"backStyle\":\"Full\",\"colorSchema\":\"Green to Red\"},\"addTooltip\":true,\"addLegend\":false},\"type\":\"metric\"}" + }, + "references": [ { - "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}" - }, - "title": "CPU Usage Gauge", - "uiStateJSON": "{}", - "version": 1, - "visState": "{\"aggs\": [], \"title\": \"CPU Usage Gauge\", \"params\": {\"id\": \"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\", \"filter\": \"\", \"series\": [{\"id\": \"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\", \"chart_type\": \"line\", \"seperate_axis\": 0, \"color\": \"#68BC00\", \"axis_position\": \"right\", \"point_size\": 1, \"metrics\": [{\"id\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"system.cpu.user.pct\", \"type\": \"avg\"}, {\"id\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.system.pct\", \"type\": \"avg\"}, {\"id\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"system.cpu.cores\", \"type\": \"avg\"}, {\"id\": \"587aa510-1b91-11e7-bec4-a5e9ec5cab8b\", \"variables\": [{\"id\": \"5a19af10-1b91-11e7-bec4-a5e9ec5cab8b\", \"field\": \"4c9e2552-1b91-11e7-bec4-a5e9ec5cab8b\", \"name\": \"user\"}, {\"id\": \"32b54f80-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"225c2140-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"system\"}, {\"id\": \"8ba6eef0-5fd7-11e7-a63a-a937b7c1a7e1\", \"field\": \"837a30c0-5fd7-11e7-a63a-a937b7c1a7e1\", \"name\": \"n\"}], \"script\": \"params.n > 0 ? (params.user+params.system)/params.n : null\", \"type\": \"calculation\"}], \"formatter\": \"percent\", \"split_mode\": \"everything\", \"fill\": 0.5, \"line_width\": 1, \"label\": \"CPU Usage\", \"stacked\": \"none\"}], \"gauge_inner_width\": 10, \"axis_formatter\": \"number\", \"show_legend\": 1, \"axis_position\": \"left\", \"index_pattern\": \"malcolm_beats_*\", \"show_grid\": 1, \"time_field\": \"@timestamp\", \"gauge_max\": \"1\", \"gauge_color_rules\": [{\"operator\": \"gte\", \"id\": \"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0, \"gauge\": \"rgba(104,188,0,1)\"}, {\"operator\": \"gte\", \"id\": \"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.7, \"gauge\": \"rgba(254,146,0,1)\"}, {\"operator\": \"gte\", \"id\": \"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\", \"value\": 0.85, \"gauge\": \"rgba(211,49,21,1)\"}], \"interval\": \"auto\", \"type\": \"gauge\", \"gauge_style\": \"half\", \"gauge_width\": 10}, \"type\": \"metrics\"}" - }, - "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", - "migrationVersion": { - "visualization": "7.4.2" - }, - "references": [], - "type": "visualization", - "updated_at": "2020-03-03T20:18:44.291Z", - "version": "WzUzODEsM10=" + "id": "malcolm_beats_*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:51:54.800Z", + "version": "WzkyNCwxXQ==", + "attributes": { + "title": "Top Hosts By Memory (Realtime)", + "visState": "{\"title\":\"Top Hosts By Memory (Realtime)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:50:58.343Z", + "version": "WzkyMiwxXQ==", + "attributes": { + "title": "Top Hosts By CPU (Realtime)", + "visState": "{\"title\":\"Top Hosts By CPU (Realtime)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.cpu_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:55:56.292Z", + "version": "WzkyNiwxXQ==", + "attributes": { + "title": "Hosts histogram by CPU usage", + "visState": "{\"title\":\"Hosts histogram by CPU usage\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"miscbeat.cpu.cpu_p\",\"customLabel\":\"CPU usage %\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-30m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Hosts\"},\"schema\":\"group\"}],\"params\":{\"addTooltip\":true,\"colorsNumber\":4,\"colorsRange\":[],\"invertColors\":false,\"setColorRange\":false,\"enableHover\":true,\"valueAxes\":[{\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"id\":\"ValueAxis-1\",\"labels\":{\"rotate\":0,\"show\":false,\"color\":\"#555\",\"overwriteColor\":false},\"show\":false,\"type\":\"value\"}],\"type\":\"heatmap\",\"times\":[],\"percentageMode\":true,\"colorSchema\":\"Greens\",\"addLegend\":true,\"legendPosition\":\"bottom\"}}", + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0% - 5%\":\"rgb(247,252,245)\",\"10% - 15%\":\"rgb(116,196,118)\",\"15% - 20%\":\"rgb(35,139,69)\",\"5% - 10%\":\"rgb(199,233,192)\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ + { + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "malcolm_beats_*" + } + ], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T19:46:26.400Z", + "version": "WzkzNSwxXQ==", + "attributes": { + "title": "Inbound Traffic", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T19:48:27.177Z", + "version": "WzkzOCwxXQ==", + "attributes": { + "title": "Outbound Traffic", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T21:04:37.184Z", + "version": "WzkwNywxXQ==", + "attributes": { + "title": "Disk used", + "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:48:12.309Z", + "version": "WzkxNSwxXQ==", + "attributes": { + "title": "Memory Usage Gauge", + "visState": "{\"title\":\"Memory Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Memory Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + }, + { + "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2022-06-13T18:48:29.713Z", + "version": "WzkxNywxXQ==", + "attributes": { + "title": "CPU Usage Gauge", + "visState": "{\"title\":\"CPU Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"114cd270-eb49-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.cpu.cpu_p\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"CPU Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"background_color_rules\":[{\"id\":\"64e19c90-eb49-11ec-ae08-f703744a0ba1\"}],\"bar_color_rules\":[{\"id\":\"65456770-eb49-11ec-ae08-f703744a0ba1\"}]}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" } - ], - "version": "7.6.0" -} \ No newline at end of file + }, + "references": [], + "migrationVersion": { + "visualization": "7.10.0" + } + } + ] +} diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index e7058d052..556367ff6 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -28,12 +28,19 @@ "read_size": { "type": "long" }, "write_size": { "type": "long" }, "df": { - "type": "nested", "properties": { - "target": { "type": "keyword" }, "size": { "type": "long" }, "used": { "type": "long" }, - "avail": { "type": "long" } + "avail": { "type": "long" }, + "details": { + "type": "nested", + "properties": { + "target": { "type": "keyword" }, + "size": { "type": "long" }, + "used": { "type": "long" }, + "avail": { "type": "long" } + } + } } } } diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index dd6f7a450..02155074f 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -161,6 +161,126 @@ filter { } # if ([miscbeat][kmsg]) + if ([miscbeat][cpu]) { + #------------------------------------------------- + # cpu - https://docs.fluentbit.io/manual/pipeline/inputs/cpu-metrics + + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_cpu" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][cpu][cpu_p]", + "[miscbeat][cpu][system_p]", + "[miscbeat][cpu][user_p]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + + } # if ([miscbeat][cpu]) + + if ([miscbeat][mem]) { + #------------------------------------------------- + # mem - https://docs.fluentbit.io/manual/pipeline/inputs/memory-metrics + + if (![event][hash]) { + + if ([miscbeat][mem][Mem][used]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_mem_total" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][mem][Mem][used]", + "[miscbeat][mem][Mem][free]", + "[miscbeat][mem][Mem][total]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } else if ([miscbeat][mem][Mem][used_p]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_mem_used_p" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][mem][Mem][used_p]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + } + + } # if ([miscbeat][mem]) + + if ([miscbeat][disk]) { + #------------------------------------------------- + # disk - https://docs.fluentbit.io/manual/pipeline/inputs/disk-io-metrics + + if ([miscbeat][disk][df][details]) { + ruby { + id => "ruby_miscbeat_disk_df_sum" + code => " + if dfentries = event.get('[miscbeat][disk][df][details]') then + size, used, avail = 0, 0, 0 + dfentries.each do |dfentry| + size = size + dfentry.dig('size').to_i + used = used + dfentry.dig('used').to_i + avail = avail + dfentry.dig('avail').to_i + end + event.set('[miscbeat][disk][df][size]', size) + event.set('[miscbeat][disk][df][used]', used) + event.set('[miscbeat][disk][df][avail]', avail) + end" + } + } + + if (![event][hash]) { + + if ([miscbeat][disk][read_size]) and ([miscbeat][disk][write_size]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_disk_read_write" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][disk][read_size]", + "[miscbeat][disk][write_size]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } else { + fingerprint { + id => "fingerprint_malcolm_miscbeat_disk" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][disk][df][size]", + "[miscbeat][disk][df][used]", + "[miscbeat][disk][df][avail]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + } # ![event][hash] + + } # if ([miscbeat][disk]) + if ([miscbeat][netif]) { #------------------------------------------------- # netif - https://docs.fluentbit.io/manual/pipeline/inputs/network-io-metrics @@ -203,6 +323,23 @@ filter { } } + if (![event][hash]) { + fingerprint { + id => "fingerprint_malcolm_miscbeat_netif" + source => [ "[host][name]", + "[event][module]", + "[miscbeat][network][bytes][total]", + "[miscbeat][network][packets][total]", + "[miscbeat][network][errors][total]", + "[@timestamp]" ] + concatenate_sources => true + # uses event.hash + ecs_compatibility => "v8" + method => "MURMUR3_128" + base64encode => true + } + } + } # if ([miscbeat][netif]) if ([miscbeat][syslog]) { diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 825e6dddd..67634d1bd 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -34,7 +34,6 @@ filter { ecs_compatibility => "v8" method => "MURMUR3_128" base64encode => true - add_tag => [ "_beats_unknown_fingerprint" ] } } #if [event][original] /else diff --git a/shared/bin/df-json.sh b/shared/bin/df-json.sh index 36fa38242..9c01c5a5a 100755 --- a/shared/bin/df-json.sh +++ b/shared/bin/df-json.sh @@ -2,7 +2,7 @@ df --exclude-type=tmpfs --exclude-type=devtmpfs --block-size=1 --local --no-sync --output=target,size,used,avail 2>/dev/null | \ jq -R -c -M -s ' - {df: [ + {df: { details: [ split("\n") | .[] | if test("^/") then @@ -10,4 +10,4 @@ df --exclude-type=tmpfs --exclude-type=devtmpfs --block-size=1 --local --no-sync else empty end - ]}' + ]}}' From 5d81627e3c860fb14ee5c598368a153187eb51fb Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Mon, 13 Jun 2022 15:40:57 -0600 Subject: [PATCH 062/122] replace metricbeat with fluentbit --- .../beats/Metricbeat-host-overview.json | 68 +++++------ .../beats/Metricbeat-system-overview.json | 110 +++++++++--------- logstash/pipelines/beats/11_beats_logs.conf | 24 +--- logstash/pipelines/beats/98_finalize.conf | 1 - sensor-iso/README.md | 16 +-- sensor-iso/beats/Dockerfile | 2 +- sensor-iso/beats/beat-build.sh | 2 +- .../normal/0910-sensor-build.hook.chroot | 4 +- .../interface/sensor_ctl/control_vars.conf | 1 - .../sensor_ctl/metricbeat/metricbeat.yml | 62 ---------- .../metricbeat/sensor_metricbeat_local.sh | 19 --- .../sensor_ctl/supervisor.d/beats.conf | 11 +- shared/bin/configure-capture.py | 34 +----- 13 files changed, 99 insertions(+), 255 deletions(-) delete mode 100644 sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml delete mode 100755 sensor-iso/interface/sensor_ctl/metricbeat/sensor_metricbeat_local.sh diff --git a/dashboards/dashboards/beats/Metricbeat-host-overview.json b/dashboards/dashboards/beats/Metricbeat-host-overview.json index d40c790f9..5c16ea63e 100644 --- a/dashboards/dashboards/beats/Metricbeat-host-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-host-overview.json @@ -7,14 +7,14 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:10:35.353Z", - "version": "WzkxNSwxXQ==", + "updated_at": "2022-06-13T21:30:29.021Z", + "version": "WzkzMiwxXQ==", "attributes": { "title": "Malcolm Sensor Resources - Hosts Overview", "hits": 0, "description": "Malcolm sensor hosts' resources overview", "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"1\",\"w\":24,\"x\":0,\"y\":58},\"panelIndex\":\"1\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"3\",\"w\":24,\"x\":0,\"y\":40},\"panelIndex\":\"3\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"4\",\"w\":24,\"x\":24,\"y\":20},\"panelIndex\":\"4\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"7\",\"w\":24,\"x\":24,\"y\":5},\"panelIndex\":\"7\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"8\",\"w\":24,\"x\":24,\"y\":35},\"panelIndex\":\"8\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"10\",\"w\":12,\"x\":0,\"y\":5},\"panelIndex\":\"10\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"11\",\"w\":12,\"x\":12,\"y\":5},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"12\",\"w\":8,\"x\":0,\"y\":30},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"13\",\"w\":8,\"x\":8,\"y\":30},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"16\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"21\",\"w\":8,\"x\":0,\"y\":18},\"panelIndex\":\"21\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"22\",\"w\":8,\"x\":8,\"y\":18},\"panelIndex\":\"22\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_11\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"23\",\"w\":8,\"x\":16,\"y\":18},\"panelIndex\":\"23\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_12\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"25\",\"w\":8,\"x\":16,\"y\":30},\"panelIndex\":\"25\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_13\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"27\",\"w\":24,\"x\":24,\"y\":50},\"panelIndex\":\"27\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_14\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"28\",\"w\":24,\"x\":24,\"y\":63},\"panelIndex\":\"28\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_15\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"30\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"30\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_16\"}]", - "optionsJSON": "{\"darkTheme\":false}", + "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", "version": 1, "timeRestore": false, "kibanaSavedObjectMeta": { @@ -118,7 +118,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", + "updated_at": "2022-06-13T21:19:22.353Z", "version": "Wzg0OCwxXQ==", "attributes": { "title": "Network Traffic (Packets)", @@ -141,7 +141,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", + "updated_at": "2022-06-13T21:19:22.353Z", "version": "Wzg0OSwxXQ==", "attributes": { "title": "Network Traffic (Bytes)", @@ -164,7 +164,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", + "updated_at": "2022-06-13T21:19:22.353Z", "version": "Wzg1MCwxXQ==", "attributes": { "title": "Memory Usage", @@ -187,7 +187,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", + "updated_at": "2022-06-13T21:19:22.353Z", "version": "Wzg1MSwxXQ==", "attributes": { "title": "CPU Usage", @@ -210,7 +210,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", + "updated_at": "2022-06-13T21:19:22.353Z", "version": "Wzg1MiwxXQ==", "attributes": { "title": "Disk IO (Bytes)", @@ -233,8 +233,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:22.812Z", - "version": "Wzg3NiwxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3NSwxXQ==", "attributes": { "title": "CPU Usage Gauge", "visState": "{\"title\":\"CPU Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"114cd270-eb49-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.cpu.cpu_p\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"CPU Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"background_color_rules\":[{\"id\":\"64e19c90-eb49-11ec-ae08-f703744a0ba1\"}],\"bar_color_rules\":[{\"id\":\"65456770-eb49-11ec-ae08-f703744a0ba1\"}]}}", @@ -256,8 +256,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:22.812Z", - "version": "Wzg3NSwxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3NCwxXQ==", "attributes": { "title": "Memory Usage Gauge", "visState": "{\"title\":\"Memory Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Memory Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -279,11 +279,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:22.812Z", - "version": "Wzg3MiwxXQ==", + "updated_at": "2022-06-13T21:26:32.675Z", + "version": "WzkxMiwxXQ==", "attributes": { "title": "Inbound Traffic", - "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -302,11 +302,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:22.812Z", - "version": "Wzg3MywxXQ==", + "updated_at": "2022-06-13T21:27:10.045Z", + "version": "WzkxNCwxXQ==", "attributes": { "title": "Outbound Traffic", - "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -325,8 +325,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:22.812Z", - "version": "Wzg2NywxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg2NiwxXQ==", "attributes": { "description": "", "kibanaSavedObjectMeta": { @@ -348,8 +348,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", - "version": "Wzg1OSwxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg1OCwxXQ==", "attributes": { "title": "Swap usage", "visState": "{\"title\":\"Swap usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"cee2fd20-4d59-11e7-aee5-fdc812cc3bec\",\"filter\":\"\",\"series\":[{\"id\":\"cee2fd21-4d59-11e7-aee5-fdc812cc3bec\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\",\"field\":\"miscbeat.mem.Swap.used\",\"type\":\"avg\"},{\"id\":\"9cd408f0-eb52-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.mem.Swap.total\"},{\"id\":\"a4743e90-eb52-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"a62793e0-eb52-11ec-ae08-f703744a0ba1\",\"name\":\"used\",\"field\":\"cee2fd22-4d59-11e7-aee5-fdc812cc3bec\"},{\"id\":\"aaa023b0-eb52-11ec-ae08-f703744a0ba1\",\"name\":\"total\",\"field\":\"9cd408f0-eb52-11ec-ae08-f703744a0ba1\"}],\"script\":\"params.used / params.total\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Swap usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"d17c1e90-4d59-11e7-aee5-fdc812cc3bec\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"fc1d3490-4d59-11e7-aee5-fdc812cc3bec\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"0e204240-4d5a-11e7-aee5-fdc812cc3bec\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -371,8 +371,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", - "version": "Wzg2MCwxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg1OSwxXQ==", "attributes": { "title": "Memory usage vs total", "visState": "{\"title\":\"Memory usage vs total\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"6f7618b0-4d5c-11e7-aa29-87a97a796de6\"}],\"id\":\"6bc65720-4d5c-11e7-aa29-87a97a796de6\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"6bc65721-4d5c-11e7-aa29-87a97a796de6\",\"label\":\"Memory usage\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.mem.Mem.used\",\"id\":\"6bc65722-4d5c-11e7-aa29-87a97a796de6\",\"type\":\"avg\"},{\"id\":\"647ab8e0-eb53-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"674d39d0-eb53-11ec-ae08-f703744a0ba1\",\"name\":\"memusedkb\",\"field\":\"6bc65722-4d5c-11e7-aa29-87a97a796de6\"}],\"script\":\"params.memusedkb * 1000\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"b8fe6820-4d5c-11e7-aa29-87a97a796de6\",\"label\":\"Total Memory\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.mem.Mem.total\",\"id\":\"b8fe6821-4d5c-11e7-aa29-87a97a796de6\",\"type\":\"avg\"},{\"id\":\"83f4bc70-eb53-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"9ea2b900-eb53-11ec-ae08-f703744a0ba1\",\"name\":\"memtotalkb\",\"field\":\"b8fe6821-4d5c-11e7-aa29-87a97a796de6\"}],\"script\":\"params.memtotalkb * 1000\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\",\"isModelInvalid\":false}}", @@ -394,8 +394,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:04:37.184Z", - "version": "WzkwNywxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3MywxXQ==", "attributes": { "title": "Disk used", "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", @@ -417,8 +417,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:10:18.645Z", - "version": "WzkxMywxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg2MSwxXQ==", "attributes": { "title": "Network Errors", "visState": "{\"title\":\"Network Errors\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"6984af10-4d5d-11e7-aa29-87a97a796de6\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"background_color_rules\":[{\"id\":\"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}],\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"series\":[{\"id\":\"6984af11-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"6984af12-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.rx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors In\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.tx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors Out\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"type\":\"metric\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -440,8 +440,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", - "version": "Wzg2MywxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg2MiwxXQ==", "attributes": { "title": "Interfaces by Incoming traffic", "visState": "{\"title\":\"Interfaces by Incoming traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Incoming traffic\",\"terms_order_by\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -463,8 +463,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", - "version": "Wzg2NCwxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg2MywxXQ==", "attributes": { "title": "Interfaces by Outgoing traffic", "visState": "{\"title\":\"Interfaces by Outgoing traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Outgoing traffic\",\"terms_order_by\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -486,8 +486,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:03:21.806Z", - "version": "Wzg2NSwxXQ==", + "updated_at": "2022-06-13T21:19:22.353Z", + "version": "Wzg2NCwxXQ==", "attributes": { "description": "", "kibanaSavedObjectMeta": { diff --git a/dashboards/dashboards/beats/Metricbeat-system-overview.json b/dashboards/dashboards/beats/Metricbeat-system-overview.json index f0a98e4ce..26cbd8c00 100644 --- a/dashboards/dashboards/beats/Metricbeat-system-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-system-overview.json @@ -7,70 +7,70 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:31:22.966Z", - "version": "Wzg3MSwxXQ==", + "updated_at": "2022-06-13T21:29:37.695Z", + "version": "WzkyNiwxXQ==", "attributes": { - "description": "Malcolm sensor system resources overview", + "title": "Malcolm Sensor Resources - System Overview", "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"version\": true, \"filter\": [], \"highlightAll\": true}" - }, - "optionsJSON": "{\"darkTheme\": false}", - "panelsJSON": "[{\"panelRefName\": \"panel_0\", \"panelIndex\": \"9\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"9\", \"w\": 48, \"y\": 0, \"h\": 4}}, {\"panelRefName\": \"panel_1\", \"panelIndex\": \"11\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"11\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_2\", \"panelIndex\": \"12\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"12\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_3\", \"panelIndex\": \"13\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"13\", \"w\": 24, \"y\": 12, \"h\": 20}}, {\"panelRefName\": \"panel_4\", \"panelIndex\": \"14\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"45% - 60%\": \"rgb(35,139,69)\", \"0% - 15%\": \"rgb(247,252,245)\", \"15% - 30%\": \"rgb(199,233,192)\", \"30% - 45%\": \"rgb(116,196,118)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 0, \"i\": \"14\", \"w\": 48, \"y\": 32, \"h\": 24}}, {\"panelRefName\": \"panel_5\", \"panelIndex\": \"16\", \"embeddableConfig\": {\"vis\": {\"defaultColors\": {\"0 - 100\": \"rgb(0,104,55)\"}}}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 32, \"i\": \"16\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_6\", \"panelIndex\": \"17\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 40, \"i\": \"17\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_7\", \"panelIndex\": \"18\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 24, \"i\": \"18\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_8\", \"panelIndex\": \"19\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 16, \"i\": \"19\", \"w\": 8, \"y\": 4, \"h\": 8}}, {\"panelRefName\": \"panel_9\", \"panelIndex\": \"20\", \"embeddableConfig\": {}, \"version\": \"7.6.0\", \"gridData\": {\"x\": 8, \"i\": \"20\", \"w\": 8, \"y\": 4, \"h\": 8}}]", + "description": "Malcolm sensor system resources overview", + "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":4,\"i\":\"9\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"9\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":9,\"i\":\"11\",\"w\":8,\"x\":0,\"y\":4},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":20,\"i\":\"12\",\"w\":24,\"x\":24,\"y\":13},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":20,\"i\":\"13\",\"w\":24,\"x\":0,\"y\":13},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0% - 15%\":\"rgb(247,252,245)\",\"15% - 30%\":\"rgb(199,233,192)\",\"30% - 45%\":\"rgb(116,196,118)\",\"45% - 60%\":\"rgb(35,139,69)\"}}},\"gridData\":{\"h\":24,\"i\":\"14\",\"w\":48,\"x\":0,\"y\":33},\"panelIndex\":\"14\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":9,\"i\":\"16\",\"w\":8,\"x\":32,\"y\":4},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"17\",\"w\":8,\"x\":40,\"y\":4},\"panelIndex\":\"17\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"18\",\"w\":8,\"x\":24,\"y\":4},\"panelIndex\":\"18\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"19\",\"w\":8,\"x\":16,\"y\":4},\"panelIndex\":\"19\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"20\",\"w\":8,\"x\":8,\"y\":4},\"panelIndex\":\"20\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"}]", + "optionsJSON": "{\"darkTheme\":false}", + "version": 1, "timeRestore": false, - "title": "Malcolm Sensor Resources - System Overview", - "version": 1 + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"version\":true,\"highlightAll\":true,\"filter\":[]}" + } }, "references": [ { - "id": "System-Navigation-ecs", "name": "panel_0", - "type": "visualization" + "type": "visualization", + "id": "System-Navigation-ecs" }, { - "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs", "name": "panel_1", - "type": "visualization" + "type": "visualization", + "id": "c6f2ffd0-4d17-11e7-a196-69b9a7a020a9-ecs" }, { - "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs", "name": "panel_2", - "type": "visualization" + "type": "visualization", + "id": "fe064790-1b1f-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs", "name": "panel_3", - "type": "visualization" + "type": "visualization", + "id": "855899e0-1b1c-11e7-b09e-037021c4f8df-ecs" }, { - "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs", "name": "panel_4", - "type": "visualization" + "type": "visualization", + "id": "7cdb1330-4d1a-11e7-a196-69b9a7a020a9-ecs" }, { - "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs", "name": "panel_5", - "type": "visualization" + "type": "visualization", + "id": "522ee670-1b92-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs", "name": "panel_6", - "type": "visualization" + "type": "visualization", + "id": "1aae9140-1b93-11e7-8ada-3df93aab833e-ecs" }, { - "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs", "name": "panel_7", - "type": "visualization" + "type": "visualization", + "id": "825fdb80-4d1d-11e7-b5f2-2b7c1895bf32-ecs" }, { - "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "name": "panel_8", - "type": "visualization" + "type": "visualization", + "id": "d3166e80-1b91-11e7-bec4-a5e9ec5cab8b-ecs" }, { - "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs", "name": "panel_9", - "type": "visualization" + "type": "visualization", + "id": "83e12df0-1b91-11e7-bec4-a5e9ec5cab8b-ecs" } ], "migrationVersion": { @@ -83,8 +83,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:31:22.966Z", - "version": "Wzg3MiwxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg2NiwxXQ==", "attributes": { "description": "", "kibanaSavedObjectMeta": { @@ -106,8 +106,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:31:22.966Z", - "version": "Wzg3MywxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg2NywxXQ==", "attributes": { "description": "", "kibanaSavedObjectMeta": { @@ -135,11 +135,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:51:54.800Z", + "updated_at": "2022-06-13T21:29:28.178Z", "version": "WzkyNCwxXQ==", "attributes": { - "title": "Top Hosts By Memory (Realtime)", - "visState": "{\"title\":\"Top Hosts By Memory (Realtime)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "title": "Top Hosts By Memory", + "visState": "{\"title\":\"Top Hosts By Memory\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":\"3\",\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\",\"order_by\":\"@timestamp\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -158,11 +158,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:50:58.343Z", + "updated_at": "2022-06-13T21:29:17.349Z", "version": "WzkyMiwxXQ==", "attributes": { - "title": "Top Hosts By CPU (Realtime)", - "visState": "{\"title\":\"Top Hosts By CPU (Realtime)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.cpu_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "title": "Top Hosts By CPU", + "visState": "{\"title\":\"Top Hosts By CPU\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":\"3\",\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.cpu_p\",\"type\":\"avg\",\"order_by\":\"@timestamp\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -181,8 +181,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:55:56.292Z", - "version": "WzkyNiwxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3MCwxXQ==", "attributes": { "title": "Hosts histogram by CPU usage", "visState": "{\"title\":\"Hosts histogram by CPU usage\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"miscbeat.cpu.cpu_p\",\"customLabel\":\"CPU usage %\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-30m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"host.name\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Hosts\"},\"schema\":\"group\"}],\"params\":{\"addTooltip\":true,\"colorsNumber\":4,\"colorsRange\":[],\"invertColors\":false,\"setColorRange\":false,\"enableHover\":true,\"valueAxes\":[{\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"id\":\"ValueAxis-1\",\"labels\":{\"rotate\":0,\"show\":false,\"color\":\"#555\",\"overwriteColor\":false},\"show\":false,\"type\":\"value\"}],\"type\":\"heatmap\",\"times\":[],\"percentageMode\":true,\"colorSchema\":\"Greens\",\"addLegend\":true,\"legendPosition\":\"bottom\"}}", @@ -210,11 +210,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T19:46:26.400Z", - "version": "WzkzNSwxXQ==", + "updated_at": "2022-06-13T21:26:32.675Z", + "version": "WzkxMiwxXQ==", "attributes": { "title": "Inbound Traffic", - "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -233,11 +233,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T19:48:27.177Z", - "version": "WzkzOCwxXQ==", + "updated_at": "2022-06-13T21:27:10.045Z", + "version": "WzkxNCwxXQ==", "attributes": { "title": "Outbound Traffic", - "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -256,8 +256,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:04:37.184Z", - "version": "WzkwNywxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3MywxXQ==", "attributes": { "title": "Disk used", "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", @@ -279,8 +279,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:48:12.309Z", - "version": "WzkxNSwxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3NCwxXQ==", "attributes": { "title": "Memory Usage Gauge", "visState": "{\"title\":\"Memory Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9f51b730-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"9f51b731-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9f51b732-1b91-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Memory Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"a0d522e0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"b45ad8f0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"c06e9550-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -302,8 +302,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T18:48:29.713Z", - "version": "WzkxNywxXQ==", + "updated_at": "2022-06-13T21:19:23.358Z", + "version": "Wzg3NSwxXQ==", "attributes": { "title": "CPU Usage Gauge", "visState": "{\"title\":\"CPU Usage Gauge\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4c9e2550-1b91-11e7-bec4-a5e9ec5cab8b\",\"filter\":\"\",\"series\":[{\"id\":\"4c9e2551-1b91-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"114cd270-eb49-11ec-ae08-f703744a0ba1\",\"type\":\"avg\",\"field\":\"miscbeat.cpu.cpu_p\"}],\"formatter\":\"'0'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"CPU Usage\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"value_template\":\"{{value}}%\"}],\"gauge_inner_width\":10,\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"100\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"4ef2c3b0-1b91-11e7-bec4-a5e9ec5cab8b\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"e6561ae0-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"ec655040-1b91-11e7-bec4-a5e9ec5cab8b\",\"gauge\":\"rgba(211,49,21,1)\"}],\"interval\":\"auto\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"background_color_rules\":[{\"id\":\"64e19c90-eb49-11ec-ae08-f703744a0ba1\"}],\"bar_color_rules\":[{\"id\":\"65456770-eb49-11ec-ae08-f703744a0ba1\"}]}}", @@ -320,4 +320,4 @@ } } ] -} +} \ No newline at end of file diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index 02155074f..b0f06de9c 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -48,28 +48,6 @@ filter { mutate { id => "mutate_replace_agent_type_beats_filebeat_nginx" replace => { "[agent][type]" => "nginx" } } - } else if ([agent][type] == "metricbeat") { - ############################################################################################################################# - # metricbeat statistics (todo: soon to be replaced by fluentbit) - - if (![event][hash]) { - fingerprint { - id => "fingerprint_malcolm_beats_metricbeat" - source => [ "[host][name]", - "[event][module]", - "[event][dataset]", - "[metricset][name]", - "[metricset][period]", - "[process][pid]", - "[@timestamp]" ] - concatenate_sources => true - # uses event.hash - ecs_compatibility => "v8" - method => "MURMUR3_128" - base64encode => true - } - } - } else if ("_malcolm_miscbeat" in [tags]) { ############################################################################################################################# # misc. sensor metrics and logs from fluentbit received by protologbeat TCP @@ -408,6 +386,6 @@ filter { } # if ([miscbeat][syslog]) - } # event type (filebeat.nginx, metricbeat, miscbeat, etc) + } # event type (filebeat.nginx, miscbeat, etc) } \ No newline at end of file diff --git a/logstash/pipelines/beats/98_finalize.conf b/logstash/pipelines/beats/98_finalize.conf index 67634d1bd..59f05e4d3 100644 --- a/logstash/pipelines/beats/98_finalize.conf +++ b/logstash/pipelines/beats/98_finalize.conf @@ -76,7 +76,6 @@ filter { mutate { id => "mutate_beats_tags_remove" remove_tag => [ "beats_input_codec_plain_applied", "beats_input_raw_event", - "_malcolm_metricbeat", "_malcolm_miscbeat", "_malcolm_protologbeat", "_dateparsefailure", diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 47484996d..54b10c90e 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -32,8 +32,7 @@ Hedgehog Linux is a Debian-based operating system built to + [Forwarding](#ConfigForwarding) * [filebeat](#filebeat): Zeek and Suricata log forwarding * [arkime-capture](#arkime-capture): Arkime session forwarding - * [metricbeat](#metricbeat): resource statistics forwarding - + [Autostart services](#ConfigAutostart) ++ [Autostart services](#ConfigAutostart) + [Zeek Intelligence Framework](#ZeekIntel) * [Appendix A - Generating the ISO](#ISOBuild) * [Appendix B - Configuring SSH access](#ConfigSSH) @@ -278,18 +277,6 @@ Finally, you'll be given the opportunity to review the all of the Arkime `captur ![capture settings confirmation](./docs/images/arkime_confirm.png) ![capture settings applied successfully](./docs/images/arkime_success.png) -### metricbeat: resource statistics forwarding - -The sensor uses [metricbeat](https://www.elastic.co/products/beats/metricbeat) to forward system resource metrics (CPU, network I/O, disk I/O, memory utilization, etc.) to an OpenSearch database by way of Logstash in the same manner as [filebeat](#filebeat). Select **metricbeat** from the forwarding configuration mode options. - -Metricbeat gathers system resource metrics at an interval you specify. The default interval is 30 seconds, but it can be set to any value between 1 and 60 seconds. - -![Metricbeat interval](./docs/images/metricbeat_interval.png) - -Next, select the OpenSearch connection transport protocol, either **HTTPS** or **HTTP**. If the metrics are being forwarded to Malcolm, select **HTTPS** to encrypt messages from the sensor to the aggregator using TLS v1.2 using ECDHE-RSA-AES128-GCM-SHA256. If **HTTPS** is chosen, you must choose whether to enable SSL certificate verification. If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication), choose **None**. - -The remainder of the configuration for metricbeat will proceed as described in the [filebeat](#filebeat) steps outlined above. - ### Autostart services Once the forwarders have been configured, the final step is to **Configure Autostart Services**. Choose this option from the configuration mode menu after the welcome screen of the sensor configuration tool. @@ -300,7 +287,6 @@ TODO: update this: * **AUTOSTART_CLAMAV_UPDATES** – Virus database update service for ClamAV (requires sensor to be connected to the internet) * **AUTOSTART_FILEBEAT** – [filebeat](#filebeat) Zeek log forwarder -* **AUTOSTART_METRICBEAT** – system resource utilization [metrics forwarder](#metricbeat) * **AUTOSTART_ARKIME** – [capture](#arkime-capture) PCAP engine for traffic capture, as well as traffic parsing and metadata insertion into OpenSearch for viewing in [Arkime](https://arkime.com/). If you are using Hedgehog Linux along with [Malcolm](https://github.com/idaholab/Malcolm) or another Arkime installation, this is probably the packet capture engine you want to use. * *AUTOSTART_NETSNIFF* – [netsniff-ng](http://netsniff-ng.org/) PCAP engine for saving packet capture (PCAP) files * **AUTOSTART_PRUNE_ZEEK** – storage space monitor to ensure that Zeek logs do not consume more than 90% of the total size of the storage volume to which Zeek logs are written diff --git a/sensor-iso/beats/Dockerfile b/sensor-iso/beats/Dockerfile index d462850a4..5e5b6dc3e 100644 --- a/sensor-iso/beats/Dockerfile +++ b/sensor-iso/beats/Dockerfile @@ -40,7 +40,7 @@ RUN set -x && \ cd $GOPATH/src/github.com/magefile/mage && \ go run bootstrap.go -ENV BEATS=metricbeat +ENV BEATS=filebeat ENV BEATS_VERSION=7.10.2 ADD ./build.sh /build.sh diff --git a/sensor-iso/beats/beat-build.sh b/sensor-iso/beats/beat-build.sh index bfba51b1b..26fe0f5ae 100755 --- a/sensor-iso/beats/beat-build.sh +++ b/sensor-iso/beats/beat-build.sh @@ -17,7 +17,7 @@ if [[ -z $BEAT || -z $VERSION || -z $THIRD_PARTY_BRANCH ]] ; then echo " beat-build.sh -b [-v ] [-v ]" >&2 echo "" >&2 echo "example:" >&2 - echo " beat-build.sh -b metricbeat -v $VERSION" >&2 + echo " beat-build.sh -b filebeat -v $VERSION" >&2 exit 1 fi diff --git a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot index aefdb1170..70f990912 100755 --- a/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot +++ b/sensor-iso/config/hooks/normal/0910-sensor-build.hook.chroot @@ -205,8 +205,8 @@ freshclam --stdout --quiet --no-warnings ### -# install filebeat/metricbeat -for BEAT in filebeat metricbeat; do +# install filebeat +for BEAT in filebeat; do BEATS_URL="$(echo "$BEATS_DEB_URL_TEMPLATE" | sed "s/$BEATS_DEB_URL_TEMPLATE_REPLACER/$BEAT/g")" BEATS_DEB="$BEAT-$BEATS_VER-amd64.deb" pushd /tmp && \ diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index 8134b2bf6..e5307a808 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -113,7 +113,6 @@ export AUTOSTART_FLUENTBIT_METRICS=false export AUTOSTART_FLUENTBIT_NETIF=false export AUTOSTART_FLUENTBIT_SYSLOG=false export AUTOSTART_FLUENTBIT_THERMAL=false -export AUTOSTART_METRICBEAT=false export AUTOSTART_MISCBEAT=false export AUTOSTART_NETSNIFF=false export AUTOSTART_PRUNE_PCAP=false diff --git a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml b/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml deleted file mode 100644 index 79e7230ed..000000000 --- a/sensor-iso/interface/sensor_ctl/metricbeat/metricbeat.yml +++ /dev/null @@ -1,62 +0,0 @@ -metricbeat.config.modules: - path: ${path.config}/conf.d/*.yml - reload.period: 10s - reload.enabled: false - -metricbeat.max_start_delay: 10s - -#========================== Modules configuration ============================ -metricbeat.modules: - -#------------------------------- System Module ------------------------------- -- module: system - period: ${BEAT_INTERVAL} - metricsets: - - cpu # CPU usage - - load # CPU load averages - - memory # Memory usage - - network # Network IO - - process # Per process metrics - - process_summary # Process summary - - uptime # System Uptime - - diskio # Disk IO - enabled: true - processes: ['.*'] - process.include_top_n: - enabled: true - by_cpu: 10 - by_memory: 10 - - cpu.metrics: ["percentages"] - core.metrics: ["percentages"] - -- module: system - period: 1m - metricsets: - - filesystem # File system usage for each mountpoint - - fsstat # File system summary metrics - processors: - - drop_event.when.regexp: - system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib|boot)($|/)' - -#================================ General ====================================== -fields_under_root: true - -processors: - - add_tags: - tags: [_malcolm_beats, _malcolm_metricbeat] - -#================================ Outputs ====================================== - -#-------------------------- Logstash Output ------------------------------------ -output.logstash: - hosts: ["${BEAT_LS_HOST}:${BEAT_LS_PORT}"] - ssl.enabled: ${BEAT_LS_SSL:false} - ssl.certificate_authorities: ["${BEAT_LS_SSL_CA_CRT}"] - ssl.certificate: "${BEAT_LS_SSL_CLIENT_CRT}" - ssl.key: "${BEAT_LS_SSL_CLIENT_KEY}" - ssl.supported_protocols: "TLSv1.2" - ssl.verification_mode: "${BEAT_LS_SSL_VERIFY}" - -#================================ Logging ====================================== -logging.metrics.enabled: false diff --git a/sensor-iso/interface/sensor_ctl/metricbeat/sensor_metricbeat_local.sh b/sensor-iso/interface/sensor_ctl/metricbeat/sensor_metricbeat_local.sh deleted file mode 100755 index 1c245f1ce..000000000 --- a/sensor-iso/interface/sensor_ctl/metricbeat/sensor_metricbeat_local.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2022 Battelle Energy Alliance, LLC. All rights reserved. - -# force-navigate to script directory (containing config file) -[[ "$(uname -s)" = 'Darwin' ]] && REALPATH=grealpath || REALPATH=realpath -[[ "$(uname -s)" = 'Darwin' ]] && DIRNAME=gdirname || DIRNAME=dirname -if ! (type "$REALPATH" && type "$DIRNAME") > /dev/null; then - echo "$(basename "${BASH_SOURCE[0]}") requires $REALPATH and $DIRNAME" - exit 1 -fi -SCRIPT_PATH="$($DIRNAME $($REALPATH -e "${BASH_SOURCE[0]}"))" -pushd "$SCRIPT_PATH" >/dev/null 2>&1 - -mkdir -p "$SCRIPT_PATH/data" - -metricbeat --path.home "$SCRIPT_PATH" --path.config "$SCRIPT_PATH" --path.data "$SCRIPT_PATH/data" -c "$SCRIPT_PATH/metricbeat.yml" -e - -popd >/dev/null 2>&1 diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf index d3fe90f01..2d8755c57 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/beats.conf @@ -1,5 +1,5 @@ [group:beats] -programs=filebeat,metricbeat,miscbeat +programs=filebeat,miscbeat [program:filebeat] environment=ZEEK_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/logs/current,SURICATA_CAPTURE_PATH=%(ENV_ZEEK_LOG_PATH)s/suricata @@ -11,15 +11,6 @@ killasgroup=true autostart=%(ENV_AUTOSTART_FILEBEAT)s directory=%(ENV_SUPERVISOR_PATH)s/filebeat -[program:metricbeat] -command=bash -l %(ENV_SUPERVISOR_PATH)s/metricbeat/sensor_metricbeat_local.sh -startsecs=5 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_METRICBEAT)s -directory=%(ENV_SUPERVISOR_PATH)s/metricbeat - [program:miscbeat] command=bash -l %(ENV_SUPERVISOR_PATH)s/miscbeat/sensor_miscbeat_local.sh startsecs=5 diff --git a/shared/bin/configure-capture.py b/shared/bin/configure-capture.py index 6745181b6..322be1492 100755 --- a/shared/bin/configure-capture.py +++ b/shared/bin/configure-capture.py @@ -54,23 +54,20 @@ class Constants: } FILEBEAT = 'filebeat' - METRICBEAT = 'metricbeat' - MISCBEAT = 'miscbeat' # protologbeat to log from fluent-bit as we investigate that tool + MISCBEAT = 'miscbeat' ARKIMECAP = 'arkime-capture' BEAT_DIR = { FILEBEAT: f'/opt/sensor/sensor_ctl/{FILEBEAT}', - METRICBEAT: f'/opt/sensor/sensor_ctl/{METRICBEAT}', MISCBEAT: f'/opt/sensor/sensor_ctl/{MISCBEAT}', } BEAT_CMD = { FILEBEAT: f'{FILEBEAT} --path.home "{BEAT_DIR[FILEBEAT]}" --path.config "{BEAT_DIR[FILEBEAT]}" --path.data "{BEAT_DIR[FILEBEAT]}/data" --path.logs "{BEAT_DIR[FILEBEAT]}/logs" -c "{BEAT_DIR[FILEBEAT]}/{FILEBEAT}.yml"', - METRICBEAT: f'{METRICBEAT} --path.home "{BEAT_DIR[METRICBEAT]}" --path.config "{BEAT_DIR[METRICBEAT]}" --path.data "{BEAT_DIR[METRICBEAT]}/data" --path.logs "{BEAT_DIR[METRICBEAT]}/logs" -c "{BEAT_DIR[METRICBEAT]}/{METRICBEAT}.yml"', MISCBEAT: f'protologbeat --path.home "{BEAT_DIR[MISCBEAT]}" --path.config "{BEAT_DIR[MISCBEAT]}" --path.data "{BEAT_DIR[MISCBEAT]}/data" --path.logs "{BEAT_DIR[MISCBEAT]}/logs" -c "{BEAT_DIR[MISCBEAT]}/protologbeat.yml"', } - # specific to beats forwarded to logstash (eg., filebeat, metricbeat, etc.) + # specific to beats forwarded to logstash (eg., filebeat, etc.) BEAT_LS_HOST = 'BEAT_LS_HOST' BEAT_LS_PORT = 'BEAT_LS_PORT' BEAT_LS_SSL = 'BEAT_LS_SSL' @@ -100,9 +97,6 @@ class Constants: BEAT_ZEEK_LOG_PATTERN_VAL = '*.log' BEAT_SURICATA_LOG_PATTERN_VAL = 'eve*.json' - # specific to metricbeat - BEAT_INTERVAL = "BEAT_INTERVAL" - # specific to arkime ARKIME_PACKET_ACL = "ARKIME_PACKET_ACL" @@ -113,7 +107,6 @@ class Constants: MSG_CONFIG_GENERIC = 'Configure {}' MSG_CONFIG_ARKIME = (f'{ARKIMECAP}', f'Configure Arkime session forwarding via {ARKIMECAP}') MSG_CONFIG_FILEBEAT = (f'{FILEBEAT}', f'Configure Zeek log forwarding via {FILEBEAT}') - MSG_CONFIG_METRICBEAT = (f'{METRICBEAT}', f'Configure resource metrics forwarding via {METRICBEAT}') MSG_CONFIG_MISCBEAT = (f'{MISCBEAT}', f'Configure miscellaneous log forwarding via protologbeat') MSG_OVERWRITE_CONFIG = '{} is already configured, overwrite current settings?' MSG_IDENTIFY_NICS = 'Do you need help identifying network interfaces?' @@ -793,7 +786,6 @@ def main(): choices=[ Constants.MSG_CONFIG_ARKIME, Constants.MSG_CONFIG_FILEBEAT, - Constants.MSG_CONFIG_METRICBEAT, Constants.MSG_CONFIG_MISCBEAT, ], ) @@ -881,11 +873,7 @@ def main(): text=Constants.MSG_CONFIG_FORWARDING_SUCCESS.format(fwd_mode, "\n".join(list_results)) ) - elif ( - (fwd_mode == Constants.FILEBEAT) - or (fwd_mode == Constants.METRICBEAT) - or (fwd_mode == Constants.MISCBEAT) - ): + elif (fwd_mode == Constants.FILEBEAT) or (fwd_mode == Constants.MISCBEAT): # forwarder configuration for beats -> logstash if not os.path.isdir(Constants.BEAT_DIR[fwd_mode]): @@ -920,7 +908,6 @@ def main(): log_path = None logstash_host = None logstash_port = None - beat_interval = None if fwd_mode == Constants.FILEBEAT: # zeek log dir is filebeat only @@ -939,18 +926,6 @@ def main(): else: log_path = values[0] - elif fwd_mode == Constants.METRICBEAT: - # interval is metricbeat only - code, beat_interval = d.rangebox( - f"{Constants.MSG_CONFIG_GENERIC.format(fwd_mode)} interval (seconds)", - width=60, - min=1, - max=60, - init=30, - ) - if code == Dialog.CANCEL or code == Dialog.ESC: - raise CancelledError - if not forwarder_config_error: # host/port for LogStash code, values = d.form( @@ -993,9 +968,6 @@ def main(): if not forwarder_config_error: # store inputted items into the configuration dictionary for the forwarder - if beat_interval is not None: - forwarder_dict[Constants.BEAT_INTERVAL] = f"{beat_interval}s" - if log_path is not None: forwarder_dict[Constants.BEAT_ZEEK_LOG_PATTERN_KEY] = os.path.join( os.path.join(log_path, Constants.BEAT_ZEEK_LOG_PATH_SUBDIR), From 026b6efa249ef71a2144aa517210b5aa74e289e2 Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Tue, 14 Jun 2022 10:11:00 -0600 Subject: [PATCH 063/122] more work on beats -> fluent for sensor, use my own network interfaces script rather than netif --- .../0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json | 6 +- .../beats/Metricbeat-host-overview.json | 122 +- .../beats/Metricbeat-system-overview.json | 42 +- .../composable/component/miscbeat.json | 3 + .../composable/component/system.json | 1566 ----------------- .../templates/malcolm_beats_template.json | 3 +- logstash/pipelines/beats/11_beats_logs.conf | 76 +- .../interface/sensor_ctl/control_vars.conf | 1 - .../supervisor.d/fluentbit-metrics.conf | 20 +- .../supervisor.d/fluentbit-netif.template | 15 - sensor-iso/interface/sensor_ctl/supervisor.sh | 4 +- shared/bin/df-json.sh | 17 +- shared/bin/netdev-json.sh | 33 + 13 files changed, 192 insertions(+), 1716 deletions(-) delete mode 100644 dashboards/templates/composable/component/system.json delete mode 100644 sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template create mode 100755 shared/bin/netdev-json.sh diff --git a/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json b/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json index 1fbbdfa25..1cb489e73 100644 --- a/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json +++ b/dashboards/dashboards/beats/0d4955f0-eb25-11ec-a6d4-b3526526c2c7.json @@ -121,7 +121,7 @@ "version": "WzkwNCwyXQ==", "attributes": { "title": "Malcolm Sensor Temprature - Sensor Chooser", - "visState": "{\"title\":\"Malcolm Sensor Temprature - Sensor Chooser\",\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1655129580950\",\"fieldName\":\"miscbeat.thermal.type.keyword\",\"parent\":\"\",\"label\":\"Sensor Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false}}", + "visState": "{\"title\":\"Malcolm Sensor Temprature - Sensor Chooser\",\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1655129580950\",\"fieldName\":\"miscbeat.thermal.type\",\"parent\":\"\",\"label\":\"Sensor Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -150,7 +150,7 @@ "version": "WzkwNiwyXQ==", "attributes": { "title": "Malcolm Sensor Temperature - Sensor Type", - "visState": "{\"title\":\"Malcolm Sensor Temperature - Sensor Type\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"miscbeat.thermal.temp\",\"customLabel\":\" \"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.thermal.type.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":6,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Type\"},\"schema\":\"group\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":45},{\"from\":45,\"to\":60},{\"from\":60,\"to\":80},{\"from\":80,\"to\":90},{\"from\":90,\"to\":110}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}", + "visState": "{\"title\":\"Malcolm Sensor Temperature - Sensor Type\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"miscbeat.thermal.temp\",\"customLabel\":\" \"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"miscbeat.thermal.type\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":6,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Sensor Type\"},\"schema\":\"group\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":45},{\"from\":45,\"to\":60},{\"from\":60,\"to\":80},{\"from\":80,\"to\":90},{\"from\":90,\"to\":110}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -206,4 +206,4 @@ } } ] -} \ No newline at end of file +} diff --git a/dashboards/dashboards/beats/Metricbeat-host-overview.json b/dashboards/dashboards/beats/Metricbeat-host-overview.json index 5c16ea63e..bb0694512 100644 --- a/dashboards/dashboards/beats/Metricbeat-host-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-host-overview.json @@ -7,14 +7,14 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:30:29.021Z", - "version": "WzkzMiwxXQ==", + "updated_at": "2022-06-14T15:28:28.457Z", + "version": "WzEwMTEsMV0=", "attributes": { "title": "Malcolm Sensor Resources - Hosts Overview", "hits": 0, "description": "Malcolm sensor hosts' resources overview", - "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"1\",\"w\":24,\"x\":0,\"y\":58},\"panelIndex\":\"1\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"3\",\"w\":24,\"x\":0,\"y\":40},\"panelIndex\":\"3\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"4\",\"w\":24,\"x\":24,\"y\":20},\"panelIndex\":\"4\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"7\",\"w\":24,\"x\":24,\"y\":5},\"panelIndex\":\"7\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"8\",\"w\":24,\"x\":24,\"y\":35},\"panelIndex\":\"8\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"10\",\"w\":12,\"x\":0,\"y\":5},\"panelIndex\":\"10\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"11\",\"w\":12,\"x\":12,\"y\":5},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"12\",\"w\":8,\"x\":0,\"y\":30},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"13\",\"w\":8,\"x\":8,\"y\":30},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"16\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"21\",\"w\":8,\"x\":0,\"y\":18},\"panelIndex\":\"21\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"22\",\"w\":8,\"x\":8,\"y\":18},\"panelIndex\":\"22\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_11\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"23\",\"w\":8,\"x\":16,\"y\":18},\"panelIndex\":\"23\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_12\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"25\",\"w\":8,\"x\":16,\"y\":30},\"panelIndex\":\"25\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_13\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"27\",\"w\":24,\"x\":24,\"y\":50},\"panelIndex\":\"27\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_14\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"28\",\"w\":24,\"x\":24,\"y\":63},\"panelIndex\":\"28\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_15\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":5,\"i\":\"30\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"30\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_16\"}]", - "optionsJSON": "{\"darkTheme\":false,\"useMargins\":false}", + "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"1\",\"w\":24,\"x\":24,\"y\":57},\"panelIndex\":\"1\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"3\",\"w\":24,\"x\":0,\"y\":57},\"panelIndex\":\"3\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":17,\"i\":\"4\",\"w\":24,\"x\":24,\"y\":22},\"panelIndex\":\"4\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":17,\"i\":\"7\",\"w\":24,\"x\":24,\"y\":5},\"panelIndex\":\"7\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"8\",\"w\":24,\"x\":24,\"y\":39},\"panelIndex\":\"8\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"10\",\"w\":12,\"x\":0,\"y\":5},\"panelIndex\":\"10\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"11\",\"w\":12,\"x\":12,\"y\":5},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"12\",\"w\":12,\"x\":0,\"y\":30},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"13\",\"w\":12,\"x\":12,\"y\":30},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":5,\"i\":\"16\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":12,\"i\":\"21\",\"w\":8,\"x\":0,\"y\":18},\"panelIndex\":\"21\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":12,\"i\":\"22\",\"w\":8,\"x\":8,\"y\":18},\"panelIndex\":\"22\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_11\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":12,\"i\":\"23\",\"w\":8,\"x\":16,\"y\":18},\"panelIndex\":\"23\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_12\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"27\",\"w\":24,\"x\":0,\"y\":75},\"panelIndex\":\"27\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_13\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":18,\"i\":\"28\",\"w\":24,\"x\":24,\"y\":75},\"panelIndex\":\"28\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_14\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":5,\"i\":\"30\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"30\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_15\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":14,\"i\":\"b751999d-6577-4995-95e6-b7276ab6388d\",\"w\":24,\"x\":0,\"y\":43},\"panelIndex\":\"b751999d-6577-4995-95e6-b7276ab6388d\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_16\"}]", + "optionsJSON": "{\"darkTheme\":false}", "version": 1, "timeRestore": false, "kibanaSavedObjectMeta": { @@ -90,22 +90,22 @@ { "name": "panel_13", "type": "visualization", - "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs" + "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs" }, { "name": "panel_14", "type": "visualization", - "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs" + "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs" }, { "name": "panel_15", "type": "visualization", - "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs" + "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs" }, { "name": "panel_16", "type": "visualization", - "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs" + "id": "1a357a70-ebf5-11ec-a044-713f3297b517" } ], "migrationVersion": { @@ -118,11 +118,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg0OCwxXQ==", + "updated_at": "2022-06-14T15:08:38.631Z", + "version": "Wzg5OSwxXQ==", "attributes": { "title": "Network Traffic (Packets)", - "visState": "{\"title\":\"Network Traffic (Packets)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"da1046f1-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(0,156,224,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.packets.rx\",\"type\":\"sum\"}],\"formatter\":\"0.[00]a\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Inbound\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_size\":\"10\",\"terms_order_by\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\"},{\"id\":\"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(250,40,255,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.packets.tx\",\"type\":\"sum\"},{\"id\":\"f25a1460-eb55-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"f61d5df0-eb55-11ec-ae08-f703744a0ba1\",\"name\":\"sumtx\",\"field\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\"}],\"script\":\"0 - params.sumtx\"}],\"formatter\":\"0.[00]a\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Outbound\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_size\":\"10\",\"terms_order_by\":\"fbbd7e30-faa0-11e6-86b1-cd7735ff7e23\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_legend\":1,\"axis_scale\":\"normal\",\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Network Traffic (Packets)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"language\":\"lucene\",\"query\":\"\"},\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"rgba(0,133,255,1)\",\"fill\":\"1\",\"formatter\":\"'0a'\",\"id\":\"49931900-ebf3-11ec-a401-f5db2d59e6af\",\"label\":\"Inbound\",\"line_width\":1,\"metrics\":[{\"unit\":\"1s\",\"id\":\"49931901-ebf3-11ec-a401-f5db2d59e6af\",\"type\":\"positive_rate\",\"field\":\"miscbeat.network.packets.rx\"}],\"point_size\":1,\"separate_axis\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"type\":\"timeseries\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\",\"value_template\":\"{{value}}/s\",\"split_color_mode\":\"gradient\"},{\"id\":\"75fba890-ebf3-11ec-a401-f5db2d59e6af\",\"color\":\"rgba(13,212,26,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"unit\":\"1s\",\"id\":\"75fba891-ebf3-11ec-a401-f5db2d59e6af\",\"type\":\"positive_rate\",\"field\":\"miscbeat.network.packets.tx\"},{\"id\":\"96daba60-ebf3-11ec-a401-f5db2d59e6af\",\"type\":\"math\",\"variables\":[{\"id\":\"98e138c0-ebf3-11ec-a401-f5db2d59e6af\",\"name\":\"rate\",\"field\":\"75fba891-ebf3-11ec-a401-f5db2d59e6af\"}],\"script\":\"params.rate*-1\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"'0a'\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":\"1\",\"stacked\":\"none\",\"label\":\"Outbound\",\"type\":\"timeseries\",\"terms_size\":\"3\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"_key\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}/s\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"timeseries\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -141,11 +141,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg0OSwxXQ==", + "updated_at": "2022-06-14T15:03:59.318Z", + "version": "Wzg5NywxXQ==", "attributes": { "title": "Network Traffic (Bytes)", - "visState": "{\"title\":\"Network Traffic (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"da1046f1-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(0,156,224,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Inbound \",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_order_by\":\"da1046f2-faa0-11e6-86b1-cd7735ff7e23\"},{\"id\":\"fbbd5720-faa0-11e6-86b1-cd7735ff7e23\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(250,40,255,1)\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"533da9b0-2c2d-11e7-be71-3162da85303f\",\"function\":\"sum\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.tx\"},{\"id\":\"ce5e8050-eb55-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"d2773ce0-eb55-11ec-ae08-f703744a0ba1\",\"name\":\"sumtx\",\"field\":\"533da9b0-2c2d-11e7-be71-3162da85303f\"}],\"script\":\"0 - params.sumtx\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":\"1\",\"line_width\":\"0\",\"label\":\"Outbound \",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_order_by\":\"533da9b0-2c2d-11e7-be71-3162da85303f\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_legend\":1,\"axis_scale\":\"normal\",\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Network Traffic (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"language\":\"lucene\",\"query\":\"\"},\"id\":\"da1046f0-faa0-11e6-86b1-cd7735ff7e23\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"rgba(0,133,255,1)\",\"fill\":\"1\",\"formatter\":\"bytes\",\"id\":\"6d8b8ab0-ebf1-11ec-a401-f5db2d59e6af\",\"line_width\":1,\"metrics\":[{\"unit\":\"1s\",\"id\":\"6d8b8ab1-ebf1-11ec-a401-f5db2d59e6af\",\"type\":\"positive_rate\",\"field\":\"miscbeat.network.bytes.rx\"}],\"point_size\":1,\"separate_axis\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"label\":\"Inbound\",\"type\":\"timeseries\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\",\"value_template\":\"{{value}}/s\",\"split_color_mode\":\"gradient\"},{\"id\":\"b5977de0-ebf2-11ec-a401-f5db2d59e6af\",\"color\":\"rgba(13,212,26,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"unit\":\"1s\",\"id\":\"b5977de1-ebf2-11ec-a401-f5db2d59e6af\",\"type\":\"positive_rate\",\"field\":\"miscbeat.network.bytes.tx\"},{\"id\":\"cdfb1540-ebf2-11ec-a401-f5db2d59e6af\",\"type\":\"math\",\"variables\":[{\"id\":\"d1b9caf0-ebf2-11ec-a401-f5db2d59e6af\",\"name\":\"rate\",\"field\":\"b5977de1-ebf2-11ec-a401-f5db2d59e6af\"}],\"script\":\"params.rate*-1\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":\"1\",\"stacked\":\"none\",\"label\":\"Outbound\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\",\"terms_field\":\"miscbeat.network.interface\",\"value_template\":\"{{value}}/s\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"timeseries\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -164,7 +164,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", + "updated_at": "2022-06-14T14:41:21.347Z", "version": "Wzg1MCwxXQ==", "attributes": { "title": "Memory Usage", @@ -187,11 +187,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", + "updated_at": "2022-06-14T14:41:21.347Z", "version": "Wzg1MSwxXQ==", "attributes": { "title": "CPU Usage", - "visState": "{\"title\":\"CPU Usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"80a04950-1b19-11e7-b09e-037021c4f8df\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"80a04951-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"80a04952-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.user_p\",\"type\":\"avg\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"user\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"993acf30-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(211,49,21,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"993acf31-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.system_p\",\"type\":\"avg\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"system\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"axis_formatter\":\"number\",\"interval\":\"auto\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"CPU Usage\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"80a04950-1b19-11e7-b09e-037021c4f8df\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"993acf30-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(211,49,21,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"993acf31-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.system_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"system\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"value_template\":\"{{value}}%\"},{\"id\":\"80a04951-1b19-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"80a04952-1b19-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.user_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"everything\",\"fill\":\"0.9\",\"line_width\":1,\"label\":\"user\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"steps\":0,\"value_template\":\"{{value}}%\"},{\"id\":\"4eb3d7b0-eb9b-11ec-8afc-039f20728581\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(46,88,242,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"metrics\":[{\"id\":\"4eb3d7b1-eb9b-11ec-8afc-039f20728581\",\"field\":\"miscbeat.cpu.cpu_p\",\"type\":\"avg\"}],\"formatter\":\"'0.'\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"total\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\",\"steps\":0,\"value_template\":\"{{value}}%\",\"hidden\":false}],\"axis_formatter\":\"number\",\"interval\":\"auto\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -210,11 +210,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", + "updated_at": "2022-06-14T14:41:21.347Z", "version": "Wzg1MiwxXQ==", "attributes": { "title": "Disk IO (Bytes)", - "visState": "{\"title\":\"Disk IO (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"d3c67db0-1b1a-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"id\":\"d3c67db1-1b1a-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(22,165,165,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"d3c67db2-1b1a-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.read_size\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"reads\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"144124d0-1b1b-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(251,158,0,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"144124d1-1b1b-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.write_size\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"writes\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Disk IO (Bytes)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"d3c67db0-1b1a-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"id\":\"d3c67db1-1b1a-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(22,165,165,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"d3c67db2-1b1a-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.read_size\",\"type\":\"sum\"},{\"id\":\"3be3ef00-eb99-11ec-8afc-039f20728581\",\"type\":\"math\",\"variables\":[{\"id\":\"40f00c40-eb99-11ec-8afc-039f20728581\",\"name\":\"readsize\",\"field\":\"d3c67db2-1b1a-11e7-b09e-037021c4f8df\"}],\"script\":\"0 - params.readsize\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"reads\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"},{\"id\":\"144124d0-1b1b-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"rgba(251,158,0,1)\",\"axis_position\":\"right\",\"point_size\":\"0\",\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"144124d1-1b1b-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.disk.write_size\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"everything\",\"fill\":\"1\",\"line_width\":1,\"label\":\"writes\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"type\":\"timeseries\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"type\":\"timeseries\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -233,7 +233,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg3NSwxXQ==", "attributes": { "title": "CPU Usage Gauge", @@ -256,7 +256,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg3NCwxXQ==", "attributes": { "title": "Memory Usage Gauge", @@ -279,11 +279,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:26:32.675Z", - "version": "WzkxMiwxXQ==", + "updated_at": "2022-06-14T15:10:45.271Z", + "version": "WzkwMywxXQ==", "attributes": { "title": "Inbound Traffic", - "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"unit\":\"1s\",\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"positive_rate\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"_key\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.bytes.rx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -302,11 +302,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:27:10.045Z", - "version": "WzkxNCwxXQ==", + "updated_at": "2022-06-14T15:11:30.952Z", + "version": "WzkwOSwxXQ==", "attributes": { "title": "Outbound Traffic", - "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"unit\":\"1s\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"positive_rate\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"top_hit\",\"order_by\":\"@timestamp\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -325,7 +325,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg2NiwxXQ==", "attributes": { "description": "", @@ -348,7 +348,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", + "updated_at": "2022-06-14T14:41:21.347Z", "version": "Wzg1OCwxXQ==", "attributes": { "title": "Swap usage", @@ -371,7 +371,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", + "updated_at": "2022-06-14T14:41:21.347Z", "version": "Wzg1OSwxXQ==", "attributes": { "title": "Memory usage vs total", @@ -394,11 +394,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", - "version": "Wzg3MywxXQ==", + "updated_at": "2022-06-14T15:27:52.939Z", + "version": "WzEwMDQsMV0=", "attributes": { "title": "Disk used", - "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", + "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"'0%'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -412,16 +412,16 @@ } }, { - "id": "96976150-4d5d-11e7-aa29-87a97a796de6-ecs", + "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", "type": "visualization", "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg2MSwxXQ==", + "updated_at": "2022-06-14T15:19:06.927Z", + "version": "Wzk3MiwxXQ==", "attributes": { - "title": "Network Errors", - "visState": "{\"title\":\"Network Errors\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"6984af10-4d5d-11e7-aa29-87a97a796de6\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"background_color_rules\":[{\"id\":\"6ba9b1f0-4d5d-11e7-aa29-87a97a796de6\"}],\"axis_formatter\":\"number\",\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"series\":[{\"id\":\"6984af11-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"6984af12-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.rx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors In\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"},{\"id\":\"ac2e6b30-4d5d-11e7-aa29-87a97a796de6\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"ac2e6b31-4d5d-11e7-aa29-87a97a796de6\",\"field\":\"miscbeat.network.errors.tx\",\"type\":\"sum\"}],\"formatter\":\"number\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Network Errors Out\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"type\":\"metric\",\"show_grid\":1,\"show_legend\":1,\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "title": "Interfaces by Incoming traffic", + "visState": "{\"title\":\"Interfaces by Incoming traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"top_hit\",\"order_by\":\"@timestamp\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Incoming traffic\",\"terms_order_by\":\"_key\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -435,16 +435,16 @@ } }, { - "id": "99381c80-4d60-11e7-9a4c-ed99bbcaa42b-ecs", + "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", "type": "visualization", "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg2MiwxXQ==", + "updated_at": "2022-06-14T15:19:28.677Z", + "version": "Wzk4MSwxXQ==", "attributes": { - "title": "Interfaces by Incoming traffic", - "visState": "{\"title\":\"Interfaces by Incoming traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"42ceae90-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"42ced5a0-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.rx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Incoming traffic\",\"terms_order_by\":\"42ced5a1-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"44596d40-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "title": "Interfaces by Outgoing traffic", + "visState": "{\"title\":\"Interfaces by Outgoing traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"top_hit\",\"order_by\":\"@timestamp\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Outgoing traffic\",\"terms_order_by\":\"_key\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -458,22 +458,22 @@ } }, { - "id": "c5e3cf90-4d60-11e7-9a4c-ed99bbcaa42b-ecs", + "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", "type": "visualization", "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg2MywxXQ==", + "updated_at": "2022-06-14T14:41:21.347Z", + "version": "Wzg2NCwxXQ==", "attributes": { - "title": "Interfaces by Outgoing traffic", - "visState": "{\"title\":\"Interfaces by Outgoing traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"9cdba910-4d60-11e7-9a4c-ed99bbcaa42b\",\"index_pattern\":\"malcolm_beats_*\",\"series\":[{\"id\":\"9cdba911-4d60-11e7-9a4c-ed99bbcaa42b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"id\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"avg\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Interfaces by Outgoing traffic\",\"terms_order_by\":\"9cdba912-4d60-11e7-9a4c-ed99bbcaa42b\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_formatter\":\"number\",\"show_legend\":1,\"time_field\":\"@timestamp\",\"axis_position\":\"left\",\"type\":\"top_n\",\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"9db20be0-4d60-11e7-9a4c-ed99bbcaa42b\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", - "uiStateJSON": "{}", "description": "", - "version": 1, "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" - } + "searchSourceJSON": "{}" + }, + "title": "Tip", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"title\":\"Tip\",\"params\":{\"markdown\":\"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and click a host name.\",\"fontSize\":12},\"type\":\"markdown\"}" }, "references": [], "migrationVersion": { @@ -481,22 +481,22 @@ } }, { - "id": "3d65d450-a9c3-11e7-af20-67db8aecb295-ecs", + "id": "1a357a70-ebf5-11ec-a044-713f3297b517", "type": "visualization", "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:22.353Z", - "version": "Wzg2NCwxXQ==", + "updated_at": "2022-06-14T15:17:28.087Z", + "version": "Wzk2NCwxXQ==", "attributes": { - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{}" - }, - "title": "Tip", + "title": "Network Traffic (Drops and Errors)", + "visState": "{\"title\":\"Network Traffic (Drops and Errors)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"table\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"split_color_mode\":\"opensearchDashboards\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.drops.rx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"color_rules\":[{\"id\":\"77170e30-ebf4-11ec-a401-f5db2d59e6af\"}],\"label\":\"Drops In\"},{\"id\":\"e5fec770-ebf4-11ec-a401-f5db2d59e6af\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"e5fec771-ebf4-11ec-a401-f5db2d59e6af\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.errors.rx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Errors In\"},{\"id\":\"ce173de0-ebf4-11ec-a401-f5db2d59e6af\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"ce173de1-ebf4-11ec-a401-f5db2d59e6af\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.drops.tx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Drops Out\",\"color_rules\":[{\"id\":\"e3795510-ebf4-11ec-a401-f5db2d59e6af\"}]},{\"id\":\"f381f250-ebf4-11ec-a401-f5db2d59e6af\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"f381f251-ebf4-11ec-a401-f5db2d59e6af\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.errors.tx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Errors Out\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false,\"bar_color_rules\":[{\"id\":\"5eab8790-ebf4-11ec-a401-f5db2d59e6af\"}],\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"pivot_label\":\"Interface\"}}", "uiStateJSON": "{}", + "description": "", "version": 1, - "visState": "{\"aggs\":[],\"title\":\"Tip\",\"params\":{\"markdown\":\"**TIP:** To select another host, go to the [System Overview](#/dashboard/Metricbeat-system-overview-ecs) dashboard and double-click a host name.\",\"fontSize\":12},\"type\":\"markdown\"}" + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } }, "references": [], "migrationVersion": { diff --git a/dashboards/dashboards/beats/Metricbeat-system-overview.json b/dashboards/dashboards/beats/Metricbeat-system-overview.json index 26cbd8c00..53de62a85 100644 --- a/dashboards/dashboards/beats/Metricbeat-system-overview.json +++ b/dashboards/dashboards/beats/Metricbeat-system-overview.json @@ -7,13 +7,13 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:29:37.695Z", - "version": "WzkyNiwxXQ==", + "updated_at": "2022-06-14T15:35:42.956Z", + "version": "WzEwMjMsMV0=", "attributes": { "title": "Malcolm Sensor Resources - System Overview", "hits": 0, "description": "Malcolm sensor system resources overview", - "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"h\":4,\"i\":\"9\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"9\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":9,\"i\":\"11\",\"w\":8,\"x\":0,\"y\":4},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":20,\"i\":\"12\",\"w\":24,\"x\":24,\"y\":13},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":20,\"i\":\"13\",\"w\":24,\"x\":0,\"y\":13},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0% - 15%\":\"rgb(247,252,245)\",\"15% - 30%\":\"rgb(199,233,192)\",\"30% - 45%\":\"rgb(116,196,118)\",\"45% - 60%\":\"rgb(35,139,69)\"}}},\"gridData\":{\"h\":24,\"i\":\"14\",\"w\":48,\"x\":0,\"y\":33},\"panelIndex\":\"14\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":9,\"i\":\"16\",\"w\":8,\"x\":32,\"y\":4},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"17\",\"w\":8,\"x\":40,\"y\":4},\"panelIndex\":\"17\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"18\",\"w\":8,\"x\":24,\"y\":4},\"panelIndex\":\"18\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"19\",\"w\":8,\"x\":16,\"y\":4},\"panelIndex\":\"19\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"20\",\"w\":8,\"x\":8,\"y\":4},\"panelIndex\":\"20\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"}]", + "panelsJSON": "[{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":5,\"i\":\"9\",\"w\":8,\"x\":0,\"y\":0},\"panelIndex\":\"9\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":8,\"i\":\"11\",\"w\":8,\"x\":0,\"y\":5},\"panelIndex\":\"11\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":20,\"i\":\"12\",\"w\":24,\"x\":24,\"y\":13},\"panelIndex\":\"12\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":20,\"i\":\"13\",\"w\":24,\"x\":0,\"y\":13},\"panelIndex\":\"13\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0% - 15%\":\"rgb(247,252,245)\",\"15% - 30%\":\"rgb(199,233,192)\",\"30% - 45%\":\"rgb(116,196,118)\",\"45% - 60%\":\"rgb(35,139,69)\"}}},\"gridData\":{\"h\":24,\"i\":\"14\",\"w\":48,\"x\":0,\"y\":33},\"panelIndex\":\"14\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"hidePanelTitles\":true,\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"gridData\":{\"h\":13,\"i\":\"16\",\"w\":8,\"x\":32,\"y\":0},\"panelIndex\":\"16\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"17\",\"w\":8,\"x\":40,\"y\":0},\"panelIndex\":\"17\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"18\",\"w\":8,\"x\":24,\"y\":0},\"panelIndex\":\"18\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"19\",\"w\":8,\"x\":16,\"y\":0},\"panelIndex\":\"19\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{\"hidePanelTitles\":true},\"gridData\":{\"h\":13,\"i\":\"20\",\"w\":8,\"x\":8,\"y\":0},\"panelIndex\":\"20\",\"version\":\"2.0.0\",\"panelRefName\":\"panel_9\"}]", "optionsJSON": "{\"darkTheme\":false}", "version": 1, "timeRestore": false, @@ -83,7 +83,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg2NiwxXQ==", "attributes": { "description": "", @@ -106,7 +106,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg2NywxXQ==", "attributes": { "description": "", @@ -135,8 +135,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:29:28.178Z", - "version": "WzkyNCwxXQ==", + "updated_at": "2022-06-14T14:41:22.401Z", + "version": "Wzg2OCwxXQ==", "attributes": { "title": "Top Hosts By Memory", "visState": "{\"title\":\"Top Hosts By Memory\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":\"3\",\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.mem.Mem.used_p\",\"type\":\"avg\",\"order_by\":\"@timestamp\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -158,8 +158,8 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:29:17.349Z", - "version": "WzkyMiwxXQ==", + "updated_at": "2022-06-14T14:41:22.401Z", + "version": "Wzg2OSwxXQ==", "attributes": { "title": "Top Hosts By CPU", "visState": "{\"title\":\"Top Hosts By CPU\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"31e5afa0-1b1c-11e7-b09e-037021c4f8df\",\"filter\":\"\",\"series\":[{\"terms_size\":\"10\",\"id\":\"31e5afa1-1b1c-11e7-b09e-037021c4f8df\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"host.name\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":\"3\",\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"field\":\"miscbeat.cpu.cpu_p\",\"type\":\"avg\",\"order_by\":\"@timestamp\"}],\"formatter\":\"'0.'\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"terms_order_by\":\"31e5afa2-1b1c-11e7-b09e-037021c4f8df\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"value_template\":\"{{value}}%\"}],\"time_field\":\"@timestamp\",\"axis_formatter\":\"number\",\"drilldown_url\":\"../app/dashboards#/dashboard/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_a=(query:(language:kuery,query:'host.name:\\\"{{key}}\\\"'))\",\"show_grid\":1,\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"axis_position\":\"left\",\"type\":\"top_n\",\"bar_color_rules\":[{\"operator\":\"gte\",\"id\":\"33349dd0-1b1c-11e7-b09e-037021c4f8df\",\"value\":0,\"bar_color\":\"rgba(104,188,0,1)\"},{\"value\":70,\"operator\":\"gte\",\"id\":\"997dc440-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(254,146,0,1)\"},{\"value\":85,\"operator\":\"gte\",\"id\":\"a10d7f20-1b1c-11e7-b09e-037021c4f8df\",\"bar_color\":\"rgba(211,49,21,1)\"}],\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", @@ -181,7 +181,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg3MCwxXQ==", "attributes": { "title": "Hosts histogram by CPU usage", @@ -210,11 +210,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:26:32.675Z", - "version": "WzkxMiwxXQ==", + "updated_at": "2022-06-14T15:10:45.271Z", + "version": "WzkwMywxXQ==", "attributes": { "title": "Inbound Traffic", - "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"sum\",\"unit\":\"\"},{\"id\":\"e24047d0-eb4f-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"e4687f00-eb4f-11ec-ae08-f703744a0ba1\",\"name\":\"bytesrx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytesrx / ((params._timestamp - params._all.bytesrx.timestamps[0] + params._interval) / 1000)\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"sum\",\"field\":\"miscbeat.network.bytes.rx\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", + "visState": "{\"title\":\"Inbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"bar_color_rules\":[{\"id\":\"a6f39dd0-eb4f-11ec-ae08-f703744a0ba1\"}],\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"index_pattern\":\"malcolm_beats_*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"pivot_id\":\"miscbeat.network.interface\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"bytes\",\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"label\":\"Inbound Traffic\",\"line_width\":1,\"metrics\":[{\"unit\":\"1s\",\"field\":\"miscbeat.network.bytes.rx\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"percentiles\":[{\"id\":\"2bd83990-eb4e-11ec-ae08-f703744a0ba1\",\"mode\":\"line\",\"shade\":0.2,\"value\":50}],\"type\":\"positive_rate\"}],\"point_size\":1,\"seperate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"miscbeat.network.interface\",\"terms_order_by\":\"_key\",\"terms_size\":\"3\",\"value_template\":\"{{value}}/s\",\"color_rules\":[{\"id\":\"b3b298e0-eb50-11ec-ae08-f703744a0ba1\"}]},{\"id\":\"697b0130-eb51-11ec-ae08-f703744a0ba1\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"top_hit\",\"field\":\"miscbeat.network.bytes.rx\",\"order_by\":\"@timestamp\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Total Transferred\",\"terms_field\":\"miscbeat.network.interface\",\"terms_size\":\"3\",\"terms_order_by\":\"697b0131-eb51-11ec-ae08-f703744a0ba1\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"metric\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -233,11 +233,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:27:10.045Z", - "version": "WzkxNCwxXQ==", + "updated_at": "2022-06-14T15:11:30.952Z", + "version": "WzkwOSwxXQ==", "attributes": { "title": "Outbound Traffic", - "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"},{\"id\":\"a8cf9ee0-eb51-11ec-ae08-f703744a0ba1\",\"type\":\"math\",\"variables\":[{\"id\":\"aabe4f80-eb51-11ec-ae08-f703744a0ba1\",\"name\":\"bytestx\",\"field\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"script\":\"params.bytestx / ((params._timestamp - params._all.bytestx.timestamps[0] + params._interval) / 1000)\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"sum\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", + "visState": "{\"title\":\"Outbound Traffic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"0c761590-1b92-11e7-bec4-a5e9ec5cab8b\",\"filter\":{\"query\":\"\",\"language\":\"lucene\"},\"series\":[{\"id\":\"0c761591-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}/s\",\"metrics\":[{\"unit\":\"1s\",\"id\":\"0c761592-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"positive_rate\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Outbound Traffic\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\"},{\"id\":\"37f70440-1b92-11e7-bec4-a5e9ec5cab8b\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"terms_field\":\"miscbeat.network.interface\",\"axis_position\":\"right\",\"point_size\":1,\"value_template\":\"{{value}}\",\"metrics\":[{\"size\":1,\"agg_with\":\"max\",\"order\":\"desc\",\"id\":\"37f72b50-1b92-11e7-bec4-a5e9ec5cab8b\",\"field\":\"miscbeat.network.bytes.tx\",\"type\":\"top_hit\",\"order_by\":\"@timestamp\"}],\"formatter\":\"bytes\",\"split_mode\":\"terms\",\"fill\":0.5,\"line_width\":1,\"label\":\"Total Transferred\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\",\"terms_size\":\"3\",\"terms_order_by\":\"_key\"}],\"background_color_rules\":[{\"id\":\"0e346760-1b92-11e7-bec4-a5e9ec5cab8b\"}],\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"index_pattern\":\"malcolm_beats_*\",\"show_legend\":1,\"interval\":\"auto\",\"type\":\"metric\",\"axis_scale\":\"normal\",\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"arkime_sessions3-*\",\"default_timefield\":\"firstPacket\",\"isModelInvalid\":false}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -256,11 +256,11 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", - "version": "Wzg3MywxXQ==", + "updated_at": "2022-06-14T15:27:52.939Z", + "version": "WzEwMDQsMV0=", "attributes": { "title": "Disk used", - "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"percent\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", + "visState": "{\"title\":\"Disk used\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"4e4dc780-4d1d-11e7-b5f2-2b7c1895bf32\",\"filter\":\"\",\"interval\":\"auto\",\"default_index_pattern\":\"arkime_sessions3-*\",\"axis_formatter\":\"number\",\"show_legend\":1,\"axis_position\":\"left\",\"index_pattern\":\"malcolm_beats_*\",\"time_range_mode\":\"entire_time_range\",\"show_grid\":1,\"time_field\":\"@timestamp\",\"gauge_max\":\"1\",\"default_timefield\":\"firstPacket\",\"gauge_color_rules\":[{\"operator\":\"gte\",\"id\":\"51921d10-4d1d-11e7-b5f2-2b7c1895bf32\",\"value\":0,\"gauge\":\"rgba(104,188,0,1)\"},{\"operator\":\"gte\",\"id\":\"f26de750-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.7,\"gauge\":\"rgba(251,158,0,1)\"},{\"operator\":\"gte\",\"id\":\"fa31d190-4d54-11e7-b5f2-2b7c1895bf32\",\"value\":0.85,\"gauge\":\"rgba(211,49,21,1)\"}],\"gauge_inner_width\":10,\"series\":[{\"id\":\"4e4dee90-4d1d-11e7-b5f2-2b7c1895bf32\",\"chart_type\":\"line\",\"seperate_axis\":0,\"color\":\"#68BC00\",\"axis_position\":\"right\",\"point_size\":1,\"metrics\":[{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.used\"},{\"size\":1,\"agg_with\":\"avg\",\"order\":\"desc\",\"id\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"order_by\":\"@timestamp\",\"type\":\"top_hit\",\"field\":\"miscbeat.disk.df.size\"},{\"id\":\"6304cca0-4d54-11e7-b5f2-2b7c1895bf32\",\"variables\":[{\"id\":\"6da10430-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"4e4dee91-4d1d-11e7-b5f2-2b7c1895bf32\",\"name\":\"used\"},{\"id\":\"73b8c510-4d54-11e7-b5f2-2b7c1895bf32\",\"field\":\"57c96ee0-4d54-11e7-b5f2-2b7c1895bf32\",\"name\":\"total\"}],\"script\":\"params.used/params.total \",\"type\":\"math\"}],\"formatter\":\"'0%'\",\"split_mode\":\"everything\",\"fill\":0.5,\"line_width\":1,\"label\":\"Disk used\",\"stacked\":\"none\",\"split_color_mode\":\"gradient\"}],\"isModelInvalid\":false,\"axis_scale\":\"normal\",\"type\":\"gauge\",\"gauge_style\":\"half\",\"gauge_width\":10,\"tooltip_mode\":\"show_all\"}}", "uiStateJSON": "{}", "description": "", "version": 1, @@ -279,7 +279,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg3NCwxXQ==", "attributes": { "title": "Memory Usage Gauge", @@ -302,7 +302,7 @@ "namespaces": [ "default" ], - "updated_at": "2022-06-13T21:19:23.358Z", + "updated_at": "2022-06-14T14:41:22.401Z", "version": "Wzg3NSwxXQ==", "attributes": { "title": "CPU Usage Gauge", diff --git a/dashboards/templates/composable/component/miscbeat.json b/dashboards/templates/composable/component/miscbeat.json index 556367ff6..58a527e24 100644 --- a/dashboards/templates/composable/component/miscbeat.json +++ b/dashboards/templates/composable/component/miscbeat.json @@ -56,6 +56,9 @@ "errors.tx": { "type": "long" }, "errors.rx": { "type": "long" }, "errors.total": { "type": "long" }, + "drops.tx": { "type": "long" }, + "drops.rx": { "type": "long" }, + "drops.total": { "type": "long" }, "interface": { "type": "keyword" }, "details": { "type": "nested" } } diff --git a/dashboards/templates/composable/component/system.json b/dashboards/templates/composable/component/system.json deleted file mode 100644 index c800349f6..000000000 --- a/dashboards/templates/composable/component/system.json +++ /dev/null @@ -1,1566 +0,0 @@ -{ - "template": { - "mappings": { - "properties": { - "metricset": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "period": { - "type": "long" - } - } - }, - "system": { - "properties": { - "core": { - "properties": { - "id": { - "type": "long" - }, - "idle": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "iowait": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "irq": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "nice": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "softirq": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "steal": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "system": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "user": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - } - } - }, - "cpu": { - "properties": { - "cores": { - "type": "long" - }, - "idle": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "iowait": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "irq": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "nice": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "softirq": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "steal": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "system": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - }, - "total": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "user": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - } - } - } - } - }, - "diskio": { - "properties": { - "io": { - "properties": { - "time": { - "type": "long" - } - } - }, - "iostat": { - "properties": { - "await": { - "type": "float" - }, - "busy": { - "type": "float" - }, - "queue": { - "properties": { - "avg_size": { - "type": "float" - } - } - }, - "read": { - "properties": { - "await": { - "type": "float" - }, - "per_sec": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "request": { - "properties": { - "merges_per_sec": { - "type": "float" - }, - "per_sec": { - "type": "float" - } - } - } - } - }, - "request": { - "properties": { - "avg_size": { - "type": "float" - } - } - }, - "service_time": { - "type": "float" - }, - "write": { - "properties": { - "await": { - "type": "float" - }, - "per_sec": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "request": { - "properties": { - "merges_per_sec": { - "type": "float" - }, - "per_sec": { - "type": "float" - } - } - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "read": { - "properties": { - "bytes": { - "type": "long" - }, - "count": { - "type": "long" - }, - "time": { - "type": "long" - } - } - }, - "serial_number": { - "ignore_above": 1024, - "type": "keyword" - }, - "write": { - "properties": { - "bytes": { - "type": "long" - }, - "count": { - "type": "long" - }, - "time": { - "type": "long" - } - } - } - } - }, - "entropy": { - "properties": { - "available_bits": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "filesystem": { - "properties": { - "available": { - "type": "long" - }, - "device_name": { - "ignore_above": 1024, - "type": "keyword" - }, - "files": { - "type": "long" - }, - "free": { - "type": "long" - }, - "free_files": { - "type": "long" - }, - "mount_point": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "type": "long" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - } - } - }, - "fsstat": { - "properties": { - "count": { - "type": "long" - }, - "total_files": { - "type": "long" - }, - "total_size": { - "properties": { - "free": { - "type": "long" - }, - "total": { - "type": "long" - }, - "used": { - "type": "long" - } - } - } - } - }, - "load": { - "properties": { - "1": { - "scaling_factor": 100, - "type": "scaled_float" - }, - "15": { - "scaling_factor": 100, - "type": "scaled_float" - }, - "5": { - "scaling_factor": 100, - "type": "scaled_float" - }, - "cores": { - "type": "long" - }, - "norm": { - "properties": { - "1": { - "scaling_factor": 100, - "type": "scaled_float" - }, - "15": { - "scaling_factor": 100, - "type": "scaled_float" - }, - "5": { - "scaling_factor": 100, - "type": "scaled_float" - } - } - } - } - }, - "memory": { - "properties": { - "actual": { - "properties": { - "free": { - "type": "long" - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - } - } - }, - "free": { - "type": "long" - }, - "hugepages": { - "properties": { - "default_size": { - "type": "long" - }, - "free": { - "type": "long" - }, - "reserved": { - "type": "long" - }, - "surplus": { - "type": "long" - }, - "swap": { - "properties": { - "out": { - "properties": { - "fallback": { - "type": "long" - }, - "pages": { - "type": "long" - } - } - } - } - }, - "total": { - "type": "long" - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "type": "long" - } - } - } - } - }, - "page_stats": { - "properties": { - "direct_efficiency": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "kswapd_efficiency": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pgfree": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "pgscan_direct": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "pgscan_kswapd": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "pgsteal_direct": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "pgsteal_kswapd": { - "properties": { - "pages": { - "type": "long" - } - } - } - } - }, - "swap": { - "properties": { - "free": { - "type": "long" - }, - "in": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "out": { - "properties": { - "pages": { - "type": "long" - } - } - }, - "readahead": { - "properties": { - "cached": { - "type": "long" - }, - "pages": { - "type": "long" - } - } - }, - "total": { - "type": "long" - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - } - } - }, - "total": { - "type": "long" - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - } - } - }, - "network": { - "properties": { - "in": { - "properties": { - "bytes": { - "type": "long" - }, - "dropped": { - "type": "long" - }, - "errors": { - "type": "long" - }, - "packets": { - "type": "long" - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "out": { - "properties": { - "bytes": { - "type": "long" - }, - "dropped": { - "type": "long" - }, - "errors": { - "type": "long" - }, - "packets": { - "type": "long" - } - } - } - } - }, - "network_summary": { - "properties": { - "icmp": { - "properties": { - "*": { - "type": "object" - } - } - }, - "ip": { - "properties": { - "*": { - "type": "object" - } - } - }, - "tcp": { - "properties": { - "*": { - "type": "object" - } - } - }, - "udp": { - "properties": { - "*": { - "type": "object" - } - } - }, - "udp_lite": { - "properties": { - "*": { - "type": "object" - } - } - } - } - }, - "process": { - "properties": { - "cgroup": { - "properties": { - "blkio": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "properties": { - "bytes": { - "type": "long" - }, - "ios": { - "type": "long" - } - } - } - } - }, - "cpu": { - "properties": { - "cfs": { - "properties": { - "period": { - "properties": { - "us": { - "type": "long" - } - } - }, - "quota": { - "properties": { - "us": { - "type": "long" - } - } - }, - "shares": { - "type": "long" - } - } - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "rt": { - "properties": { - "period": { - "properties": { - "us": { - "type": "long" - } - } - }, - "runtime": { - "properties": { - "us": { - "type": "long" - } - } - } - } - }, - "stats": { - "properties": { - "periods": { - "type": "long" - }, - "throttled": { - "properties": { - "ns": { - "type": "long" - }, - "periods": { - "type": "long" - } - } - } - } - } - } - }, - "cpuacct": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "percpu": { - "type": "object" - }, - "stats": { - "properties": { - "system": { - "properties": { - "ns": { - "type": "long" - } - } - }, - "user": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "total": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "memory": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "kmem": { - "properties": { - "failures": { - "type": "long" - }, - "limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "long" - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "kmem_tcp": { - "properties": { - "failures": { - "type": "long" - }, - "limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "long" - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "failures": { - "type": "long" - }, - "limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "long" - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "memsw": { - "properties": { - "failures": { - "type": "long" - }, - "limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "long" - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "stats": { - "properties": { - "active_anon": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "active_file": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "cache": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "hierarchical_memory_limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "hierarchical_memsw_limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "inactive_anon": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "inactive_file": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "major_page_faults": { - "type": "long" - }, - "mapped_file": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "page_faults": { - "type": "long" - }, - "pages_in": { - "type": "long" - }, - "pages_out": { - "type": "long" - }, - "rss": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "rss_huge": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "swap": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "unevictable": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "cmdline": { - "ignore_above": 2048, - "type": "keyword" - }, - "cpu": { - "properties": { - "start_time": { - "type": "date" - }, - "system": { - "properties": { - "ticks": { - "type": "long" - } - } - }, - "total": { - "properties": { - "norm": { - "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - }, - "ticks": { - "type": "long" - }, - "value": { - "type": "long" - } - } - }, - "user": { - "properties": { - "ticks": { - "type": "long" - } - } - } - } - }, - "env": { - "type": "object" - }, - "fd": { - "properties": { - "limit": { - "properties": { - "hard": { - "type": "long" - }, - "soft": { - "type": "long" - } - } - }, - "open": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "rss": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "share": { - "type": "long" - }, - "size": { - "type": "long" - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - }, - "summary": { - "properties": { - "dead": { - "type": "long" - }, - "idle": { - "type": "long" - }, - "running": { - "type": "long" - }, - "sleeping": { - "type": "long" - }, - "stopped": { - "type": "long" - }, - "total": { - "type": "long" - }, - "unknown": { - "type": "long" - }, - "zombie": { - "type": "long" - } - } - } - } - }, - "raid": { - "properties": { - "blocks": { - "properties": { - "synced": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "disks": { - "properties": { - "active": { - "type": "long" - }, - "failed": { - "type": "long" - }, - "spare": { - "type": "long" - }, - "states": { - "properties": { - "*": { - "type": "object" - } - } - }, - "total": { - "type": "long" - } - } - }, - "level": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "sync_action": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "exec_code": { - "ignore_above": 1024, - "type": "keyword" - }, - "load_state": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "resources": { - "properties": { - "cpu": { - "properties": { - "usage": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "usage": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "network": { - "properties": { - "in": { - "properties": { - "bytes": { - "type": "long" - }, - "packets": { - "type": "long" - } - } - }, - "out": { - "properties": { - "bytes": { - "type": "long" - }, - "packets": { - "type": "long" - } - } - } - } - }, - "tasks": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - }, - "state_since": { - "type": "date" - }, - "sub_state": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "socket": { - "properties": { - "local": { - "properties": { - "ip": { - "type": "ip" - }, - "port": { - "type": "long" - } - } - }, - "process": { - "properties": { - "cmdline": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "remote": { - "properties": { - "etld_plus_one": { - "ignore_above": 1024, - "type": "keyword" - }, - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "host_error": { - "ignore_above": 1024, - "type": "keyword" - }, - "ip": { - "type": "ip" - }, - "port": { - "type": "long" - } - } - }, - "summary": { - "properties": { - "all": { - "properties": { - "count": { - "type": "long" - }, - "listening": { - "type": "long" - } - } - }, - "tcp": { - "properties": { - "all": { - "properties": { - "close_wait": { - "type": "long" - }, - "count": { - "type": "long" - }, - "established": { - "type": "long" - }, - "listening": { - "type": "long" - }, - "orphan": { - "type": "long" - }, - "time_wait": { - "type": "long" - } - } - }, - "memory": { - "type": "long" - } - } - }, - "udp": { - "properties": { - "all": { - "properties": { - "count": { - "type": "long" - } - } - }, - "memory": { - "type": "long" - } - } - } - } - } - } - }, - "uptime": { - "properties": { - "duration": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "users": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "leader": { - "type": "long" - }, - "path": { - "ignore_above": 1024, - "type": "keyword" - }, - "remote": { - "type": "boolean" - }, - "remote_host": { - "ignore_above": 1024, - "type": "keyword" - }, - "scope": { - "ignore_above": 1024, - "type": "keyword" - }, - "seat": { - "ignore_above": 1024, - "type": "keyword" - }, - "service": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } -} diff --git a/dashboards/templates/malcolm_beats_template.json b/dashboards/templates/malcolm_beats_template.json index e6f587a7b..eee99f448 100644 --- a/dashboards/templates/malcolm_beats_template.json +++ b/dashboards/templates/malcolm_beats_template.json @@ -21,8 +21,7 @@ "ecs_url", "ecs_user", "ecs_user_agent", - "custom_miscbeat", - "custom_system" + "custom_miscbeat" ], "template" :{ "settings" : { diff --git a/logstash/pipelines/beats/11_beats_logs.conf b/logstash/pipelines/beats/11_beats_logs.conf index b0f06de9c..b01557061 100644 --- a/logstash/pipelines/beats/11_beats_logs.conf +++ b/logstash/pipelines/beats/11_beats_logs.conf @@ -259,56 +259,52 @@ filter { } # if ([miscbeat][disk]) - if ([miscbeat][netif]) { + if ([miscbeat][network]) { #------------------------------------------------- - # netif - https://docs.fluentbit.io/manual/pipeline/inputs/network-io-metrics + # not using fluent-bit netif input, rolled my own with /proc/net/dev and jq + mutate { id => "mutate_rename_miscbeat_network_interfaces" + rename => { "[miscbeat][network][interfaces]" => "[miscbeat][network][details]" } } ruby { - id => "ruby_miscbeat_netif" - path => "/usr/share/logstash/malcolm-ruby/dotted_hash_unflatten.rb" - script_params => { - "source" => "[miscbeat][netif]" - "target" => "[miscbeat][network][details]" - } - } - if ([miscbeat][network][details]) { - mutate { id => "mutate_miscbeat_remove_netif" - remove_field => [ "[miscbeat][netif]" ] } - ruby { - id => "ruby_miscbeat_network_details_sum" - code => " - if interfaces = event.get('[miscbeat][network][details]') then - bytes_tx, bytes_rx, packets_tx, packets_rx, errors_tx, errors_rx = 0, 0, 0, 0, 0, 0 - interfaces.each do |key, value| - bytes_tx = bytes_tx + value.dig('tx', 'bytes').to_i - bytes_rx = bytes_rx + value.dig('rx', 'bytes').to_i - packets_tx = packets_tx + value.dig('tx', 'packets').to_i - packets_rx = packets_rx + value.dig('rx', 'packets').to_i - errors_tx = errors_tx + value.dig('tx', 'errors').to_i - errors_rx = errors_rx + value.dig('rx', 'errors').to_i - end - event.set('[miscbeat][network][interface]', interfaces.keys) - event.set('[miscbeat][network][bytes][tx]', bytes_tx) - event.set('[miscbeat][network][bytes][rx]', bytes_rx) - event.set('[miscbeat][network][bytes][total]', bytes_tx+bytes_rx) - event.set('[miscbeat][network][packets][tx]', packets_tx) - event.set('[miscbeat][network][packets][rx]', packets_rx) - event.set('[miscbeat][network][packets][total]', packets_tx+packets_rx) - event.set('[miscbeat][network][errors][tx]', errors_tx) - event.set('[miscbeat][network][errors][rx]', errors_rx) - event.set('[miscbeat][network][errors][total]', errors_tx+errors_rx) - end" - } - } + id => "ruby_miscbeat_network_details_sum" + code => " + if interfaces = event.get('[miscbeat][network][details]') then + bytes_tx, bytes_rx, packets_tx, packets_rx, errors_tx, errors_rx, drop_tx, drop_rx = 0, 0, 0, 0, 0, 0, 0, 0 + interfaces.each do |key, value| + bytes_tx = bytes_tx + value.dig('tx_bytes').to_i + bytes_rx = bytes_rx + value.dig('rx_bytes').to_i + packets_tx = packets_tx + value.dig('tx_packets').to_i + packets_rx = packets_rx + value.dig('rx_packets').to_i + errors_tx = errors_tx + value.dig('tx_errs').to_i + errors_rx = errors_rx + value.dig('rx_errs').to_i + drop_tx = drop_tx + value.dig('tx_drop').to_i + drop_rx = drop_rx + value.dig('rx_drop').to_i + end + event.set('[miscbeat][network][interface]', interfaces.keys) + event.set('[miscbeat][network][bytes][tx]', bytes_tx) + event.set('[miscbeat][network][bytes][rx]', bytes_rx) + event.set('[miscbeat][network][bytes][total]', bytes_tx+bytes_rx) + event.set('[miscbeat][network][packets][tx]', packets_tx) + event.set('[miscbeat][network][packets][rx]', packets_rx) + event.set('[miscbeat][network][packets][total]', packets_tx+packets_rx) + event.set('[miscbeat][network][errors][tx]', errors_tx) + event.set('[miscbeat][network][errors][rx]', errors_rx) + event.set('[miscbeat][network][errors][total]', errors_tx+errors_rx) + event.set('[miscbeat][network][drops][tx]', drop_tx) + event.set('[miscbeat][network][drops][rx]', drop_rx) + event.set('[miscbeat][network][drops][total]', drop_tx+drop_rx) + end" + } if (![event][hash]) { fingerprint { - id => "fingerprint_malcolm_miscbeat_netif" + id => "fingerprint_malcolm_miscbeat_network" source => [ "[host][name]", "[event][module]", "[miscbeat][network][bytes][total]", "[miscbeat][network][packets][total]", "[miscbeat][network][errors][total]", + "[miscbeat][network][drops][total]", "[@timestamp]" ] concatenate_sources => true # uses event.hash @@ -318,7 +314,7 @@ filter { } } - } # if ([miscbeat][netif]) + } # if ([miscbeat][network]) if ([miscbeat][syslog]) { #------------------------------------------------- diff --git a/sensor-iso/interface/sensor_ctl/control_vars.conf b/sensor-iso/interface/sensor_ctl/control_vars.conf index e5307a808..713878ddc 100644 --- a/sensor-iso/interface/sensor_ctl/control_vars.conf +++ b/sensor-iso/interface/sensor_ctl/control_vars.conf @@ -110,7 +110,6 @@ export AUTOSTART_FILEBEAT=false export AUTOSTART_FLUENTBIT_AUDITLOG=false export AUTOSTART_FLUENTBIT_KMSG=false export AUTOSTART_FLUENTBIT_METRICS=false -export AUTOSTART_FLUENTBIT_NETIF=false export AUTOSTART_FLUENTBIT_SYSLOG=false export AUTOSTART_FLUENTBIT_THERMAL=false export AUTOSTART_MISCBEAT=false diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf index f56b0edff..5888bc9b3 100644 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf +++ b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-metrics.conf @@ -1,5 +1,5 @@ [group:fluentbit-metrics] -programs=cpu,disk,df,mem,mem_p +programs=cpu,disk,df,mem,mem_p,netif [program:cpu] command=/opt/fluent-bit/bin/fluent-bit @@ -81,4 +81,20 @@ stopasgroup=true killasgroup=true autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s -# netif is managed in a template per-interface (fluentbit-netif.template) +[program:netif] +command=/opt/fluent-bit/bin/fluent-bit + -R /etc/fluent-bit/parsers.conf + -i exec + -p "command= /usr/local/bin/netdev-json.sh" + -p parser=json + -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s + -o tcp://localhost:%(ENV_MISCBEAT_PORT)s + -p format=json_lines + -F nest -p Operation=nest -p Nested_under=network -p WildCard='*' -m '*' + -F record_modifier -p "Record=module network" -m '*' + -f 1 +startsecs=20 +startretries=3 +stopasgroup=true +killasgroup=true +autostart=%(ENV_AUTOSTART_FLUENTBIT_METRICS)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template b/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template deleted file mode 100644 index db732e7b0..000000000 --- a/sensor-iso/interface/sensor_ctl/supervisor.d/fluentbit-netif.template +++ /dev/null @@ -1,15 +0,0 @@ -[program:fluentbit-netif-$IFACE] -command=/opt/fluent-bit/bin/fluent-bit - -i netif - -p interface=$IFACE - -p Interval_Sec=%(ENV_FLUENTBIT_METRICS_INTERVAL)s - -o tcp://localhost:%(ENV_MISCBEAT_PORT)s - -p format=json_lines - -F nest -p Operation=nest -p Nested_under=netif -p WildCard='*' -m '*' - -F record_modifier -p "Record=module netif" -m '*' - -f 1 -startsecs=20 -startretries=3 -stopasgroup=true -killasgroup=true -autostart=%(ENV_AUTOSTART_FLUENTBIT_NETIF)s diff --git a/sensor-iso/interface/sensor_ctl/supervisor.sh b/sensor-iso/interface/sensor_ctl/supervisor.sh index 99a51f729..0e7cdd491 100755 --- a/sensor-iso/interface/sensor_ctl/supervisor.sh +++ b/sensor-iso/interface/sensor_ctl/supervisor.sh @@ -17,9 +17,7 @@ function join_by { local IFS="$1"; shift; echo "$*"; } # we can use load balancing function CreateCaptureConfigs() { - # fluentbit's netif module isn't really a capture program, but it does monitor an invididual interface - # in a similar way, so we'll handle it here with these - declare -a CAPTURE_PROGS=("tcpdump" "netsniff" "fluentbit-netif") + declare -a CAPTURE_PROGS=("tcpdump" "netsniff") if [[ -d ./"$CONFIG_DIR" ]]; then rm -f ./"$CONFIG_DIR"/"$CAPTURE_GROUPS_FILE" diff --git a/shared/bin/df-json.sh b/shared/bin/df-json.sh index 9c01c5a5a..98d0da0b1 100755 --- a/shared/bin/df-json.sh +++ b/shared/bin/df-json.sh @@ -1,4 +1,17 @@ -#!/bin/sh +#!/bin/bash + +set -euo pipefail + +# 1. df +# 1-1. --exclude-type=tmpfs --exclude-type=devtmpfs - exclude "tmpfs" and "devtmpfs" filesystems +# 1-2. --block-size=1 - get byte sizes (not blocks) +# 1-3. --local - only show local filesystems +# 1-4. --no-sync - don't perform sync operation before getting results +# 1-5. --output=target,size,used,avail - select mountpoint, total size, used size, available size +# 2. pipe through JQ (-R (read raw strings), -c (compact), -M (no colors), -s (slurp)) +# 2-1. create hash with 'df' hash object and 'details' array sub-object +# 2-2. split df output on newlines +# 2-3. for each mountpoint (beginning with '/'), split on whitespace and assign to keys df --exclude-type=tmpfs --exclude-type=devtmpfs --block-size=1 --local --no-sync --output=target,size,used,avail 2>/dev/null | \ jq -R -c -M -s ' @@ -6,7 +19,7 @@ df --exclude-type=tmpfs --exclude-type=devtmpfs --block-size=1 --local --no-sync split("\n") | .[] | if test("^/") then - gsub(" +"; " ") | split(" ") | {target: .[0], size: .[1], used: .[2], avail: .[3]} + gsub(" +"; " ") | split(" ") | {target: .[0], size: .[1]|tonumber, used: .[2]|tonumber, avail: .[3]|tonumber} else empty end diff --git a/shared/bin/netdev-json.sh b/shared/bin/netdev-json.sh new file mode 100755 index 000000000..ea23fa8bb --- /dev/null +++ b/shared/bin/netdev-json.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -euo pipefail + +# 1. get network interface statistics (/proc/net/dev) +# 2. remove leading spaces +# 3. ignore virtual/loopback/docker/etc. network interfaces +# 4. remove ':' after interface name +# 5. pipe through JQ (-R (read raw strings), -c (compact), -M (no colors), -s (slurp)) +# 5-1. split on newlines +# 5-2. each line is an item in an array +# 5-3. each non-empty line is split on ' ' +# 5-4. each item in the line is assigned to a key in a hash for that interface (converted to a number where appropriate) +# 5-5. convert the array to a hash indexed by 'interface' +# 5-6. remove statistics with 0 for a value +# 5-7. remove interfaces with no remaining values (i.e., nothing was non-zero) +# +# should produce something like: +# {"wlx687f747cef60":{"rx_bytes":27555146611,"rx_packets":22251062,"rx_drop":461763,"tx_bytes":2410464559,"tx_packets":13107298}} + +INTERFACE_IGNORE_REGEX="^(lo:\s*|veth|virbr|vnet|docker)" + +( tail -n +3 /proc/net/dev | sed "s/^[[:space:]]*//" | grep -Pv "$INTERFACE_IGNORE_REGEX" | tr -d ':' ) 2>/dev/null | \ + jq -R -c -M -s ' + {interfaces: [ + split("\n") | + .[] | + if length > 0 then + gsub(" +"; " ") | split(" ") | {interface: .[0], rx_bytes: .[1]|tonumber, rx_packets: .[2]|tonumber, rx_errs: .[3]|tonumber, rx_drop: .[4]|tonumber, rx_fifo: .[5]|tonumber, rx_frame: .[6]|tonumber, rx_compressed: .[7]|tonumber, rx_multicast: .[8]|tonumber, tx_bytes: .[9]|tonumber, tx_packets: .[10]|tonumber, tx_errs: .[11]|tonumber, tx_drop: .[12]|tonumber, tx_fifo: .[13]|tonumber, tx_colls: .[14]|tonumber, tx_carrier: .[15]|tonumber, tx_compressed: .[16]|tonumber} + else + empty + end + ] | INDEX(.interface) | del(.. | .interface?) | del(..|select(. == 0)) | del(.. | select(. == {})) }' From bfefeb1cc4c578a1f52e903e33bb2d64d69d2a4b Mon Sep 17 00:00:00 2001 From: Seth Grover Date: Tue, 14 Jun 2022 16:03:30 -0600 Subject: [PATCH 064/122] update documentation for v6.1.0 sensor --- README.md | 8 +- sensor-iso/README.md | 315 +++++++++--------- .../docs/images/arkime-capture-ip-port.png | Bin 13814 -> 22703 bytes sensor-iso/docs/images/arkime_confirm.png | Bin 24564 -> 32120 bytes sensor-iso/docs/images/arkime_success.png | Bin 22796 -> 0 bytes sensor-iso/docs/images/autostarts.png | Bin 32696 -> 39775 bytes sensor-iso/docs/images/autostarts_confirm.png | Bin 34796 -> 46567 bytes sensor-iso/docs/images/capture_confirm.png | Bin 97221 -> 0 bytes sensor-iso/docs/images/capture_paths.png | Bin 12928 -> 24385 bytes sensor-iso/docs/images/desktop.png | Bin 301427 -> 420149 bytes .../docs/images/elasticsearch-username.png | Bin 12616 -> 0 bytes .../docs/images/elasticsearch_password.png | Bin 12717 -> 0 bytes sensor-iso/docs/images/filebeat_certs.png | Bin 19718 -> 30639 bytes sensor-iso/docs/images/filebeat_confirm.png | Bin 22412 -> 61733 bytes sensor-iso/docs/images/filebeat_dest.png | Bin 13129 -> 0 bytes sensor-iso/docs/images/filebeat_ip_port.png | Bin 0 -> 20575 bytes sensor-iso/docs/images/filebeat_log_path.png | Bin 0 -> 17638 bytes sensor-iso/docs/images/filebeat_ssl.png | Bin 19997 -> 26553 bytes sensor-iso/docs/images/forwarder_config.png | Bin 37787 -> 32989 bytes .../images/malcolm_arkime_reachback_acl.png | Bin 14305 -> 19997 bytes .../docs/images/metircbeat_kibana_host.png | Bin 10399 -> 0 bytes sensor-iso/docs/images/metricbeat_confirm.png | Bin 29926 -> 0 bytes .../docs/images/metricbeat_elastic_host.png | Bin 10922 -> 0 bytes .../images/metricbeat_elastic_password.png | Bin 8017 -> 0 bytes .../images/metricbeat_elastic_password_2.png | Bin 8891 -> 0 bytes .../images/metricbeat_elastic_protocol.png | Bin 5220 -> 0 bytes .../docs/images/metricbeat_elastic_ssl.png | Bin 5486 -> 0 bytes .../images/metricbeat_elastic_username.png | Bin 7949 -> 0 bytes .../metricbeat_elasticsearch_success.png | Bin 5940 -> 0 bytes .../docs/images/metricbeat_interval.png | Bin 7884 -> 0 bytes sensor-iso/docs/images/metricbeat_kibana.png | Bin 6487 -> 0 bytes .../metricbeat_kibana_dashboard_path.png | Bin 10567 -> 0 bytes .../images/metricbeat_kibana_dashboards.png | Bin 6338 -> 0 bytes .../images/metricbeat_kibana_protocol.png | Bin 4955 -> 0 bytes .../docs/images/metricbeat_kibana_success.png | Bin 5713 -> 0 bytes sensor-iso/docs/images/metricbeat_success.png | Bin 22541 -> 0 bytes .../docs/images/metricbeta_kibana_ssl.png | Bin 5078 -> 0 bytes .../images/opensearch_connection_protocol.png | Bin 0 -> 15403 bytes .../images/opensearch_connection_success.png | Bin 0 -> 17724 bytes .../docs/images/opensearch_password.png | Bin 0 -> 17908 bytes .../images/opensearch_ssl_verification.png | Bin 0 -> 15548 bytes .../docs/images/opensearch_username.png | Bin 0 -> 18750 bytes .../docs/images/zeek_file_carve_mode.png | Bin 48434 -> 62337 bytes .../docs/images/zeek_file_carve_scanners.png | Bin 22737 -> 27425 bytes 44 files changed, 160 insertions(+), 163 deletions(-) delete mode 100644 sensor-iso/docs/images/arkime_success.png delete mode 100644 sensor-iso/docs/images/capture_confirm.png delete mode 100644 sensor-iso/docs/images/elasticsearch-username.png delete mode 100644 sensor-iso/docs/images/elasticsearch_password.png delete mode 100644 sensor-iso/docs/images/filebeat_dest.png create mode 100644 sensor-iso/docs/images/filebeat_ip_port.png create mode 100644 sensor-iso/docs/images/filebeat_log_path.png delete mode 100644 sensor-iso/docs/images/metircbeat_kibana_host.png delete mode 100644 sensor-iso/docs/images/metricbeat_confirm.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_host.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_password.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_password_2.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_protocol.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_ssl.png delete mode 100644 sensor-iso/docs/images/metricbeat_elastic_username.png delete mode 100644 sensor-iso/docs/images/metricbeat_elasticsearch_success.png delete mode 100644 sensor-iso/docs/images/metricbeat_interval.png delete mode 100644 sensor-iso/docs/images/metricbeat_kibana.png delete mode 100644 sensor-iso/docs/images/metricbeat_kibana_dashboard_path.png delete mode 100644 sensor-iso/docs/images/metricbeat_kibana_dashboards.png delete mode 100644 sensor-iso/docs/images/metricbeat_kibana_protocol.png delete mode 100644 sensor-iso/docs/images/metricbeat_kibana_success.png delete mode 100644 sensor-iso/docs/images/metricbeat_success.png delete mode 100644 sensor-iso/docs/images/metricbeta_kibana_ssl.png create mode 100644 sensor-iso/docs/images/opensearch_connection_protocol.png create mode 100644 sensor-iso/docs/images/opensearch_connection_success.png create mode 100644 sensor-iso/docs/images/opensearch_password.png create mode 100644 sensor-iso/docs/images/opensearch_ssl_verification.png create mode 100644 sensor-iso/docs/images/opensearch_username.png diff --git a/README.md b/README.md index 6fb979df9..35aa7fcd8 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,6 @@ You can help steer Malcolm's development by sharing your ideas and feedback. Ple - ["Best Guess" Fingerprinting for ICS Protocols](#ICSBestGuess) - [API](#API) + [Examples](#APIExamples) -* [Using Beats to forward host logs to Malcolm](#OtherBeats) * [Malcolm installer ISO](#ISO) * [Installation](#ISOInstallation) * [Generating the ISO](#ISOBuild) @@ -258,6 +257,7 @@ Malcolm leverages the following excellent open source tools, among others. * [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) - for simple, reproducible deployment of the Malcolm appliance across environments and to coordinate communication between its various components * [Nginx](https://nginx.org/) - for HTTPS and reverse proxying Malcolm components * [nginx-auth-ldap](https://github.com/kvspb/nginx-auth-ldap) - an LDAP authentication module for nginx +* [Fluent Bit](https://fluentbit.io/) - for forwarding metrics to Malcolm from [network sensors](#Hedgehog) (packet capture appliances) * [Mark Baggett](https://github.com/MarkBaggett)'s [freq](https://github.com/MarkBaggett/freq) - a tool for calculating entropy of strings * [Florian Roth](https://github.com/Neo23x0)'s [Signature-Base](https://github.com/Neo23x0/signature-base) Yara ruleset * These Zeek plugins: @@ -531,7 +531,7 @@ Various other environment variables inside of `docker-compose.yml` can be tweake * `ARKIME_ANALYZE_PCAP_THREADS` – the number of threads available to Arkime for analyzing PCAP files (default `1`) * `AUTO_TAG` – if set to `true`, Malcolm will automatically create Arkime sessions and Zeek logs with tags based on the filename, as described in [Tagging](#Tagging) (default `true`) -* `BEATS_SSL` – if set to `true`, Logstash will use require encrypted communications for any external Beats-based forwarders from which it will accept logs; if Malcolm is being used as a standalone tool then this can safely be set to `false`, but if external log feeds are to be accepted then setting it to true is recommended (default `false`) +* `BEATS_SSL` – if set to `true`, Logstash will use require encrypted communications for any external [Beats](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html)-based forwarders from which it will accept logs; if Malcolm is being used as a standalone tool then this can safely be set to `false`, but if external log feeds are to be accepted then setting it to true is recommended (default `false`) * `CONNECTION_SECONDS_SEVERITY_THRESHOLD` - when [severity scoring](#Severity) is enabled, this variable indicates the duration threshold (in seconds) for assigning severity to long connections (default `3600`) * `EXTRACTED_FILE_CAPA_VERBOSE` – if set to `true`, all Capa rule hits will be logged; otherwise (`false`) only [MITRE ATT&CK® technique](https://attack.mitre.org/techniques) classifications will be logged * `EXTRACTED_FILE_ENABLE_CAPA` – if set to `true`, [Zeek-extracted files](#ZeekFileExtraction) that are determined to be PE (portable executable) files will be scanned with [Capa](https://github.com/fireeye/capa) @@ -3386,10 +3386,6 @@ A webhook that accepts alert data to be reindexed into OpenSearch as session rec ```
-## Using Beats to forward host logs to Malcolm - -Because Malcolm uses components of the open source data analysis platform [OpenSearch](https://opensearch.org/), it can also accept various host logs sent from [Beats](https://www.elastic.co/beats/#the-beats-family), Elastic Stack's lightweight data shippers. See [./scripts/beats](./scripts/beats) for more information. - ## Malcolm installer ISO Malcolm's Docker-based deployment model makes Malcolm able to run on a variety of platforms. However, in some circumstances (for example, as a long-running appliance as part of a security operations center, or inside of a virtual machine) it may be desirable to install Malcolm as a dedicated standalone installation. diff --git a/sensor-iso/README.md b/sensor-iso/README.md index 54b10c90e..7a2a7ba8f 100644 --- a/sensor-iso/README.md +++ b/sensor-iso/README.md @@ -1,5 +1,3 @@ -TODO: update for beats replaced by fluentd. make sure you include wording about STIG - # Hedgehog Linux ## Network Traffic Capture Appliance @@ -30,16 +28,18 @@ Hedgehog Linux is a Debian-based operating system built to + [Capture](#ConfigCapture) * [Automatic file extraction and scanning](#ZeekFileExtraction) + [Forwarding](#ConfigForwarding) - * [filebeat](#filebeat): Zeek and Suricata log forwarding * [arkime-capture](#arkime-capture): Arkime session forwarding -+ [Autostart services](#ConfigAutostart) - + [Zeek Intelligence Framework](#ZeekIntel) + * [filebeat](#filebeat): Zeek and Suricata log forwarding + * [miscbeat](#miscbeat): System metrics forwarding + + [Autostart services](#ConfigAutostart) ++ [Zeek Intelligence Framework](#ZeekIntel) * [Appendix A - Generating the ISO](#ISOBuild) * [Appendix B - Configuring SSH access](#ConfigSSH) * [Appendix C - Troubleshooting](#Troubleshooting) * [Appendix D - Hardening](#Hardening) - [STIG compliance exceptions](#STIGExceptions) - [CIS benchmark compliance exceptions](#CISExceptions) + - [Hardening compliance issues - work in progress](#ComplianceWIP) * [Appendix E - Upgrades](#UpgradePlan) * [Copyright](#Footer) @@ -124,7 +124,7 @@ Several icons are available in the top menu bar: ### Hostname -The first step of sensor configuration is to configure the network interfaces and sensor hostname. Double-clicking the **Configure Interfaces and Hostname** desktop icon (or, if you are at a command line prompt, running `configure-interfaces`) will prompt you for the root password you created during installation, after which the configuration welcome screen is shown. Select **Continue** to proceed. +The first step of sensor configuration is to configure the network interfaces and sensor hostname. Clicking the **Configure Interfaces and Hostname** toolbar icon (or, if you are at a command line prompt, running `configure-interfaces`) will prompt you for the root password you created during installation, after which the configuration welcome screen is shown. Select **Continue** to proceed. You may next select whether to configure the network interfaces, hostname, or time synchronization. @@ -170,7 +170,7 @@ Upon configuring time synchronization, a "Time synchronization configured succes ## Capture, forwarding, and autostart services -Double-clicking the **Configure Capture and Forwarding** icon (or, if you are at a command prompt, running `configure-capture`) will launch the configuration tool for capture and forwarding. The root password is not required as it was for the interface and hostname configuration, as sensor services are run under the non-privileged sensor account. Select **Continue** to proceed. You may select from a list of configuration options. +Clicking the **Configure Capture and Forwarding** toolbar icon (or, if you are at a command prompt, running `configure-capture`) will launch the configuration tool for capture and forwarding. The root password is not required as it was for the interface and hostname configuration, as sensor services are run under the non-privileged sensor account. Select **Continue** to proceed. You may select from a list of configuration options. ![Select configuration mode](./docs/images/capture_config_main.png) @@ -215,9 +215,7 @@ Files which are flagged as potentially malicious will be logged as Zeek `signatu ![File quarantine](./docs/images/file_quarantine.png) -Finally, you will then be presented with the list of configuration variables that will be used for capture, including the values which you have configured up to this point in this section. Upon choosing **OK** these values will be written back out to the sensor configuration file located at `/opt/sensor/sensor_ctl/control_vars.conf`. It is not recommended that you edit this file manually. After confirming these values, you will be presented with a confirmation that these settings have been written to the configuration file, and you will be returned to the welcome screen. - -![Capture parameters summary](./docs/images/capture_confirm.png) +Finally, you will be presented with the list of configuration variables that will be used for capture, including the values which you have configured up to this point in this section. Upon choosing **OK** these values will be written back out to the sensor configuration file located at `/opt/sensor/sensor_ctl/control_vars.conf`. It is not recommended that you edit this file manually. After confirming these values, you will be presented with a confirmation that these settings have been written to the configuration file, and you will be returned to the welcome screen. ### Forwarding @@ -227,55 +225,65 @@ Select **Configure Forwarding** to set up forwarding logs and statistics from th There are five forwarder services used on the sensor, each for forwarding a different type of log or sensor metric. -### filebeat: Zeek and Suricata log forwarding +### capture: Arkime session forwarding -[Filebeat](https://www.elastic.co/products/beats/filebeat) is used to forward [Zeek](https://www.zeek.org/) and [Suricata](https://suricata.io/) logs to a remote [Logstash](https://www.elastic.co/products/logstash) instance for further enrichment prior to insertion into an [OpenSearch](https://opensearch.org/) database. +[capture](https://github.com/arkime/arkime/tree/master/capture) is not only used to capture PCAP files, but also the parse raw traffic into sessions and forward this session metadata to an [OpenSearch](https://opensearch.org/) database so that it can be viewed in [Arkime viewer](https://arkime.com/), whether standalone or as part of a [Malcolm](https://github.com/idaholab/Malcolm) instance. If you're using Hedgehog Linux with Malcolm, please read [Correlating Zeek logs and Arkime sessions](https://github.com/idaholab/Malcolm#ZeekArkimeFlowCorrelation) in the Malcolm documentation for more information. -To configure filebeat, first provide the log path (the same path previously configured for log file generation). You must also provide the IP address of the Logstash instance to which the logs are to be forwarded, and the port on which Logstash is listening. These logs are forwarded using the Beats protocol, generally over port 5044. Depending on your network configuration, you may need to open this port in your firewall to allow this connection from the sensor to the aggregator. +First, select the OpenSearch connection transport protocol, either **HTTPS** or **HTTP**. If the metrics are being forwarded to Malcolm, select **HTTPS** to encrypt messages from the sensor to the aggregator using TLS v1.2 using ECDHE-RSA-AES128-GCM-SHA256. If **HTTPS** is chosen, you must choose whether to enable SSL certificate verification. If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication)), choose **None**. -![Configure filebeat for log forwrding](./docs/images/filebeat_dest.png) +![OpenSearch connection protocol](./docs/images/opensearch_connection_protocol.png) ![OpenSearch SSL verification](./docs/images/opensearch_ssl_verification.png) -Next you are asked whether the connection used for log forwarding should be done **unencrypted** or over **SSL**. Unencrypted communication requires less processing overhead and is simpler to configure, but the contents of the logs may be visible to anyone who is able to intercept that traffic. +Next, enter the **OpenSearch host** IP address (ie., the IP address of the aggregator) and port. These metrics are written to an OpenSearch database using a RESTful API, usually using port 9200. Depending on your network configuration, you may need to open this port in your firewall to allow this connection from the sensor to the aggregator. -![Filebeat SSL certificate verification](./docs/images/filebeat_ssl.png) +![OpenSearch host and port](./docs/images/arkime-capture-ip-port.png) -If **SSL** is chosen, you must choose whether to enable [SSL certificate verification](https://www.elastic.co/guide/en/beats/filebeat/current/configuring-ssl-logstash.html). If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication), choose **None**. +You will be asked to enter authentication credentials for the sensor's connections to the aggregator's OpenSearch API. After you've entered the username and the password, the sensor will attempt a test connection to OpenSearch using the connection information provided. -![Unencrypted vs. SSL encryption for log forwarding](./docs/images/filebeat_ssl_verify.png) +![OpenSearch username](./docs/images/opensearch_username.png) ![OpenSearch password](./docs/images/opensearch_password.png) ![Successful OpenSearch connection](./docs/images/opensearch_connection_success.png) -The last step for SSL-encrypted log forwarding is to specify the SSL certificate authority, certificate, and key files. These files must match those used by the Logstash instance receiving the logs on the aggregator. If Malcolm's `auth_setup` script was used to generate these files they would be found in the `filebeat/certs/` subdirectory of the Malcolm installation and must be manually copied to the sensor (stored under `/opt/sensor/sensor_ctl/filebeat/` or in any other path accessible to the sensor account). Specify the location of the certificate authorities file (eg., `ca.crt`), the certificate file (eg., `client.crt`), and the key file (eg., `client.key`). +Finally, you will be shown a dialog for a list of IP addresses used to populate an access control list (ACL) for hosts allowed to connect back to the sensor for retrieving session payloads from its PCAP files for display in Arkime viewer. The list will be prepopulated with the IP address entered a few screens prior to this one. -![SSL certificate files](./docs/images/filebeat_certs.png) +![PCAP retrieval ACL](./docs/images/malcolm_arkime_reachback_acl.png) -The Logstash instance receiving the events must be similarly configured with matching SSL certificate and key files. Under Malcolm, the `BEATS_SSL` variable must be set to true in Malcolm's `docker-compose.yml` file and the SSL files must exist in the `logstash/certs/` subdirectory of the Malcolm installation. +Finally, you'll be given the opportunity to review the all of the Arkime `capture` options you've specified. Selecting **OK** will cause the parameters to be saved and you will be returned to the configuration tool's welcome screen. -Once you have specified all of the filebeat parameters, you will be presented with a summary of the settings related to the forwarding of these logs. Selecting **OK** will cause the parameters to be written to filebeat's configuration keystore under `/opt/sensor/sensor_ctl/filebeat` and you will be returned to the configuration tool's welcome screen. +![capture settings confirmation](./docs/images/arkime_confirm.png) -![Confirm filebeat settings](./docs/images/filebeat_confirm.png) +### filebeat: Zeek and Suricata log forwarding -### capture: Arkime session forwarding +[Filebeat](https://www.elastic.co/products/beats/filebeat) is used to forward [Zeek](https://www.zeek.org/) and [Suricata](https://suricata.io/) logs to a remote [Logstash](https://www.elastic.co/products/logstash) instance for further enrichment prior to insertion into an [OpenSearch](https://opensearch.org/) database. -[capture](https://github.com/arkime/arkime/tree/master/capture) is not only used to capture PCAP files, but also the parse raw traffic into sessions and forward this session metadata to an [OpenSearch](https://opensearch.org/) database so that it can be viewed in [Arkime viewer](https://arkime.com/), whether standalone or as part of a [Malcolm](https://github.com/idaholab/Malcolm) instance. If you're using Hedgehog Linux with Malcolm, please read [Correlating Zeek logs and Arkime sessions](https://github.com/idaholab/Malcolm#ZeekArkimeFlowCorrelation) in the Malcolm documentation for more information. +To configure filebeat, first provide the log path (the same path previously configured for log file generation). -First, select the OpenSearch connection transport protocol, either **HTTPS** or **HTTP**. If the metrics are being forwarded to Malcolm, select **HTTPS** to encrypt messages from the sensor to the aggregator using TLS v1.2 using ECDHE-RSA-AES128-GCM-SHA256. If **HTTPS** is chosen, you must choose whether to enable SSL certificate verification. If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication)), choose **None**. +![Configure filebeat for log forwarding](./docs/images/filebeat_log_path.png) -![OpenSearch connection protocol](./docs/images/metricbeat_elastic_protocol.png) ![OpenSearch SSL verification](./docs/images/metricbeat_elastic_ssl.png) +You must also provide the IP address of the Logstash instance to which the logs are to be forwarded, and the port on which Logstash is listening. These logs are forwarded using the Beats protocol, generally over port 5044. Depending on your network configuration, you may need to open this port in your firewall to allow this connection from the sensor to the aggregator. -Next, enter the **OpenSearch host** IP address (ie., the IP address of the aggregator) and port. These metrics are written to an OpenSearch database using a RESTful API, usually using port 9200. Depending on your network configuration, you may need to open this port in your firewall to allow this connection from the sensor to the aggregator. +![Configure filebeat for log forwrading](./docs/images/filebeat_ip_port.png) -![OpenSearch host and port](./docs/images/arkime-capture-ip-port.png) +Next you are asked whether the connection used for log forwarding should be done **unencrypted** or over **SSL**. Unencrypted communication requires less processing overhead and is simpler to configure, but the contents of the logs may be visible to anyone who is able to intercept that traffic. -You will be asked to enter authentication credentials for the sensor's connections to the aggregator's OpenSearch API. After you've entered the username and the password, the sensor will attempt a test connection to OpenSearch using the connection information provided. +![Filebeat SSL certificate verification](./docs/images/filebeat_ssl.png) -![OpenSearch username](./docs/images/elasticsearch-username.png) ![OpenSearch password](./docs/images/elasticsearch_password.png) ![Successful OpenSearch connection](./docs/images/metricbeat_elasticsearch_success.png) +If **SSL** is chosen, you must choose whether to enable [SSL certificate verification](https://www.elastic.co/guide/en/beats/filebeat/current/configuring-ssl-logstash.html). If you are using a self-signed certificate (such as the one automatically created during [Malcolm's configuration](https://github.com/idaholab/Malcolm#configure-authentication), choose **None**. -Finally, you will be shown a dialog for a list of IP addresses used to populate an access control list (ACL) for hosts allowed to connect back to the sensor for retrieving session payloads from its PCAP files for display in Arkime viewer. The list will be prepopulated with the IP address entered a few screens prior to this one. +![Unencrypted vs. SSL encryption for log forwarding](./docs/images/filebeat_ssl_verify.png) -![PCAP retrieval ACL](./docs/images/malcolm_arkime_reachback_acl.png) +The last step for SSL-encrypted log forwarding is to specify the SSL certificate authority, certificate, and key files. These files must match those used by the Logstash instance receiving the logs on the aggregator. If Malcolm's `auth_setup` script was used to generate these files they would be found in the `filebeat/certs/` subdirectory of the Malcolm installation and must be manually copied to the sensor (stored under `/opt/sensor/sensor_ctl/logstash-client-certificates` or in any other path accessible to the sensor account). Specify the location of the certificate authorities file (eg., `ca.crt`), the certificate file (eg., `client.crt`), and the key file (eg., `client.key`). -Finally, you'll be given the opportunity to review the all of the Arkime `capture` options you've specified. Selecting **OK** will cause the parameters to be saved and you will be returned to the configuration tool's welcome screen. +![SSL certificate files](./docs/images/filebeat_certs.png) + +The Logstash instance receiving the events must be similarly configured with matching SSL certificate and key files. Under Malcolm, the `BEATS_SSL` variable must be set to true in Malcolm's `docker-compose.yml` file and the SSL files must exist in the `logstash/certs/` subdirectory of the Malcolm installation. + +Once you have specified all of the filebeat parameters, you will be presented with a summary of the settings related to the forwarding of these logs. Selecting **OK** will cause the parameters to be written to filebeat's configuration keystore under `/opt/sensor/sensor_ctl/logstash-client-certificates` and you will be returned to the configuration tool's welcome screen. + +![Confirm filebeat settings](./docs/images/filebeat_confirm.png) -![capture settings confirmation](./docs/images/arkime_confirm.png) ![capture settings applied successfully](./docs/images/arkime_success.png) +### miscbeat: System metrics forwarding + +The sensor uses [Fluent Bit](https://fluentbit.io/) to gather miscellaneous system resource metrics (CPU, network I/O, disk I/O, memory utilization, temperature, etc.) and the [Beats](https://github.com/mmguero-dev/protologbeat) protocol to forward these metrics to a remote [Logstash](https://www.elastic.co/products/logstash) instance for further enrichment prior to insertion into an [OpenSearch](https://opensearch.org/) database. Metrics categories can be enabled/disabled as described in the [autostart services](#ConfigAutostart) section of this document. + +This forwarder's configuration is almost identical to that of [filebeat](#filebeat) in the previous section. Select `miscbeat` from the forwarding configuration mode options and follow the same steps outlined above to set up this forwarder. ### Autostart services @@ -283,18 +291,22 @@ Once the forwarders have been configured, the final step is to **Configure Autos Despite configuring capture and/or forwarder services as described in previous sections, only services enabled in the autostart configuration will run when the sensor starts up. The available autostart processes are as follows (recommended services are in **bold text**): -TODO: update this: - -* **AUTOSTART_CLAMAV_UPDATES** – Virus database update service for ClamAV (requires sensor to be connected to the internet) -* **AUTOSTART_FILEBEAT** – [filebeat](#filebeat) Zeek log forwarder -* **AUTOSTART_ARKIME** – [capture](#arkime-capture) PCAP engine for traffic capture, as well as traffic parsing and metadata insertion into OpenSearch for viewing in [Arkime](https://arkime.com/). If you are using Hedgehog Linux along with [Malcolm](https://github.com/idaholab/Malcolm) or another Arkime installation, this is probably the packet capture engine you want to use. -* *AUTOSTART_NETSNIFF* – [netsniff-ng](http://netsniff-ng.org/) PCAP engine for saving packet capture (PCAP) files -* **AUTOSTART_PRUNE_ZEEK** – storage space monitor to ensure that Zeek logs do not consume more than 90% of the total size of the storage volume to which Zeek logs are written -* **AUTOSTART_PRUNE_PCAP** – storage space monitor to ensure that PCAP files do not consume more than 90% of the total size of the storage volume to which PCAP files are written +* **AUTOSTART_ARKIME** - [capture](#arkime-capture) PCAP engine for traffic capture, as well as traffic parsing and metadata insertion into OpenSearch for viewing in [Arkime](https://arkime.com/). If you are using Hedgehog Linux along with [Malcolm](https://github.com/idaholab/Malcolm) or another Arkime installation, this is probably the packet capture engine you want to use. +* **AUTOSTART_CLAMAV_UPDATES** - Virus database update service for ClamAV (requires sensor to be connected to the internet) +* **AUTOSTART_FILEBEAT** - [filebeat](#filebeat) Zeek and Suricata log forwarder +* **AUTOSTART_FLUENTBIT_AUDITLOG** - [Fluent Bit](https://fluentbit.io/) agent [monitoring](https://docs.fluentbit.io/manual/pipeline/inputs/tail) [auditd](https://man7.org/linux/man-pages/man8/auditd.8.html) logs +* *AUTOSTART_FLUENTBIT_KMSG* - [Fluent Bit](https://fluentbit.io/) agent [monitoring](https://docs.fluentbit.io/manual/pipeline/inputs/kernel-logs) the Linux kernel log buffer (these are generally reflected in syslog as well, which may make this agent redundant) +* **AUTOSTART_FLUENTBIT_METRICS** - [Fluent Bit](https://fluentbit.io/) agent for collecting [various](https://docs.fluentbit.io/manual/pipeline/inputs) system resource and performance metrics +* **AUTOSTART_FLUENTBIT_SYSLOG** - [Fluent Bit](https://fluentbit.io/) agent [monitoring](https://docs.fluentbit.io/manual/pipeline/inputs/syslog) Linux syslog messages +* **AUTOSTART_FLUENTBIT_THERMAL** - [Fluent Bit](https://fluentbit.io/) agent [monitoring](https://docs.fluentbit.io/manual/pipeline/inputs/thermal) system temperatures +* **AUTOSTART_MISCBEAT** - [protologbeat](https://github.com/mmguero-dev/protologbeat) forwarder which sends system metrics collected by [Fluent Bit](https://fluentbit.io/) to a remote Logstash instance (e.g., [Malcolm](https://github.com/idaholab/Malcolm)'s) +* *AUTOSTART_NETSNIFF* - [netsniff-ng](http://netsniff-ng.org/) PCAP engine for saving packet capture (PCAP) files +* **AUTOSTART_PRUNE_PCAP** - storage space monitor to ensure that PCAP files do not consume more than 90% of the total size of the storage volume to which PCAP files are written +* **AUTOSTART_PRUNE_ZEEK** - storage space monitor to ensure that Zeek logs do not consume more than 90% of the total size of the storage volume to which Zeek logs are written * **AUTOSTART_SURICATA** - [Suricata](https://suricata.io/) traffic analysis engine * **AUTOSTART_SURICATA_UPDATES** - Rule update service for Suricata (requires sensor to be connected to the internet) -* *AUTOSTART_TCPDUMP* – [tcpdump](https://www.tcpdump.org/) PCAP engine for saving packet capture (PCAP) files -* **AUTOSTART_ZEEK** – [Zeek](https://www.zeek.org/) traffic analysis engine +* *AUTOSTART_TCPDUMP* - [tcpdump](https://www.tcpdump.org/) PCAP engine for saving packet capture (PCAP) files +* **AUTOSTART_ZEEK** - [Zeek](https://www.zeek.org/) traffic analysis engine Note that only one packet capture engine ([capture](https://arkime.com/), [netsniff-ng](http://netsniff-ng.org/), or [tcpdump](https://www.tcpdump.org/)) can be used. @@ -310,29 +322,39 @@ After you have completed configuring the sensor it is recommended that you reboo /opt/sensor/sensor_ctl/shutdown && sleep 10 && /opt/sensor/sensor_ctl/supervisor.sh ``` -This will cause the sensor services controller to stop, wait a few seconds, and restart. You can check the status of the sensor's processes by choosing **Sensor Status** from the sensor's kiosk mode, double-clicking the **Sensor Service Status** desktop icon, or running `/opt/sensor/sensor_ctl/status` from the command line: - -* TODO: update this +This will cause the sensor services controller to stop, wait a few seconds, and restart. You can check the status of the sensor's processes by choosing **Sensor Status** from the sensor's kiosk mode, clicking the **Sensor Service Status** toolbar icon, or running `/opt/sensor/sensor_ctl/status` from the command line: ``` $ /opt/sensor/sensor_ctl/status -beats:filebeat RUNNING pid 14460, uptime 8 days, 20:22:32 -beats:metricbeat RUNNING pid 14476, uptime 8 days, 20:22:32 -clamav:clamav-service RUNNING pid 14454, uptime 8 days, 20:22:32 -clamav:clamav-updates RUNNING pid 14450, uptime 8 days, 20:22:32 -arkime:arkime-capture RUNNING pid 14432, uptime 8 days, 20:22:32 -arkime:arkime-viewer RUNNING pid 14431, uptime 8 days, 20:22:32 -netsniff:netsniff-enp8s0 STOPPED Not started -prune:prune-pcap RUNNING pid 14446, uptime 8 days, 20:22:32 -prune:prune-zeek RUNNING pid 14442, uptime 8 days, 20:22:32 -tcpdump:tcpdump-enp8s0 STOPPED Not started -zeek:logger RUNNING pid 14434, uptime 8 days, 20:22:32 -zeek:virustotal RUNNING pid 14435, uptime 8 days, 20:22:32 -zeek:yara RUNNING pid 14435, uptime 8 days, 20:22:32 -zeek:capa RUNNING pid 14435, uptime 8 days, 20:22:32 -zeek:clamav RUNNING pid 14435, uptime 8 days, 20:22:32 -zeek:watcher RUNNING pid 14441, uptime 8 days, 20:22:32 -zeek:zeekctl RUNNING pid 14433, uptime 8 days, 20:22:32 +arkime:arkime-capture RUNNING pid 6455, uptime 0:03:17 +arkime:arkime-viewer RUNNING pid 6456, uptime 0:03:17 +beats:filebeat RUNNING pid 6457, uptime 0:03:17 +beats:miscbeat RUNNING pid 6458, uptime 0:03:17 +clamav:clamav-service RUNNING pid 6459, uptime 0:03:17 +clamav:clamav-updates RUNNING pid 6461, uptime 0:03:17 +fluentbit-auditlog RUNNING pid 6463, uptime 0:03:17 +fluentbit-kmsg STOPPED Not started +fluentbit-metrics:cpu RUNNING pid 6466, uptime 0:03:17 +fluentbit-metrics:df RUNNING pid 6471, uptime 0:03:17 +fluentbit-metrics:disk RUNNING pid 6468, uptime 0:03:17 +fluentbit-metrics:mem RUNNING pid 6472, uptime 0:03:17 +fluentbit-metrics:mem_p RUNNING pid 6473, uptime 0:03:17 +fluentbit-metrics:netif RUNNING pid 6474, uptime 0:03:17 +fluentbit-syslog RUNNING pid 6478, uptime 0:03:17 +fluentbit-thermal RUNNING pid 6480, uptime 0:03:17 +netsniff:netsniff-enp1s0 STOPPED Not started +prune:prune-pcap RUNNING pid 6484, uptime 0:03:17 +prune:prune-zeek RUNNING pid 6486, uptime 0:03:17 +supercronic RUNNING pid 6490, uptime 0:03:17 +suricata RUNNING pid 6501, uptime 0:03:17 +tcpdump:tcpdump-enp1s0 STOPPED Not started +zeek:capa RUNNING pid 6553, uptime 0:03:17 +zeek:clamav RUNNING pid 6512, uptime 0:03:17 +zeek:logger RUNNING pid 6554, uptime 0:03:17 +zeek:virustotal STOPPED Not started +zeek:watcher RUNNING pid 6510, uptime 0:03:17 +zeek:yara RUNNING pid 6548, uptime 0:03:17 +zeek:zeekctl RUNNING pid 6502, uptime 0:03:17 ``` ### Zeek Intelligence Framework @@ -423,64 +445,57 @@ Hedgehog Linux targets the following guidelines for establishing a secure config Hedgehog Linux claims the following exceptions to STIG compliance: -| # | ID | Title | Justification | -| --- | --- | --- | --- | -| 1 | [SV-86535r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71911) | When passwords are changed a minimum of eight of the total number of characters must be changed. | Account/password policy exception: As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general user-facing software platform, some exceptions to password enforcement policies are claimed. | -| 2 | [SV-86537r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71913) | When passwords are changed a minimum of four character classes must be changed. | Account/password policy exception | -| 3 | [SV-86549r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71925) | Passwords for new users must be restricted to a 24 hours/1 day minimum lifetime. | Account/password policy exception | -| 4 | [SV-86551r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71927) | Passwords must be restricted to a 24 hours/1 day minimum lifetime. | Account/password policy exception | -| 5 | [SV-86553r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71929) | Passwords for new users must be restricted to a 60-day maximum lifetime. | Account/password policy exception | -| 6 | [SV-86555r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71931) | Existing passwords must be restricted to a 60-day maximum lifetime. | Account/password policy exception | -| 7 | [SV-86557r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71933) | Passwords must be prohibited from reuse for a minimum of five generations. | Account/password policy exception | -| 8 | [SV-86565r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71941) | The operating system must disable account identifiers (individuals, groups, roles, and devices) if the password expires. | Account/password policy exception | -| 9 | [SV-86567r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71943) | Accounts subject to three unsuccessful logon attempts within 15 minutes must be locked for the maximum configurable period. | Account/password policy exception | -| 10 | [SV-86569r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71945) | If three unsuccessful root logon attempts within 15 minutes occur the associated account must be locked. | Account/password policy exception | -| 11 | [SV-86603r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2018-11-28/finding/V-71979) | The … operating system must prevent the installation of software, patches, service packs, device drivers, or operating system components of local packages without verification they have been digitally signed using a certificate that is issued by a Certificate Authority (CA) that is recognized and approved by the organization. | As the base distribution is not using embedded signatures, `debsig-verify` would reject all packages (see comment in `/etc/dpkg/dpkg.cfg`). Enabling it after installation would disallow any future updates. | -| 12 | [SV-86607r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71983) | USB mass storage must be disabled. | The ability to copy data captured by the sensor to a mounted USB mass storage device is a requirement of the system. | -| 13 | [SV-86609r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71985) | File system automounter must be disabled unless required. | The ability to copy data captured by the sensor to a mounted USB mass storage device is a requirement of the system. | -| 14 | [SV-86705r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72081) | The operating system must shut down upon audit processing failure, unless availability is an overriding concern. If availability is a concern, the system must alert the designated staff (System Administrator [SA] and Information System Security Officer [ISSO] at a minimum) in the event of an audit processing failure. | As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. | -| 15 | [SV-86713r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72089) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer ISSO (at a minimum) when allocated audit record storage volume reaches 75% of the repository maximum audit record storage capacity. | As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications of this sort are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. | -| 16 | [SV-86715r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72093) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer (ISSO) (at a minimum) when the threshold for the repository maximum audit record storage capacity is reached. | As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications of this sort are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. | -| 17 | [SV-86837r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_6/2016-12-16/finding/V-38666) | The system must use and update a DoD-approved virus scan program. | As this is a network traffic capture appliance rather than an end-user device and will not be internet-connected, regular user files will not be created. A virus scan program would impact device performance and would be unnecessary. | -| 18 | [SV-86839r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72215) | The system must update the virus scan program every seven days or more frequently. | As this is a network traffic capture appliance rather than an end-user device and will not be internet-connected, regular user files will not be created. A virus scan program would impact device performance and would be unnecessary. | -| 19 | [SV-86847r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72223) | All network connections associated with a communication session must be terminated at the end of the session or after 10 minutes of inactivity from the user at a command prompt, except to fulfill documented and validated mission requirements. | The sensor may be controlled from the command line in a manual capture scenario, so timing out a session based on command prompt inactivity would be inadvisable. | -| 20 | [SV-86893r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72269) | The operating system must, for networked systems, synchronize clocks with a server that is synchronized to one of the redundant United States Naval Observatory (USNO) time servers, a time server designated for the appropriate DoD network (NIPRNet/SIPRNet), and/or the Global Positioning System (GPS). | While [time synchronization](#ConfigTime) is supported on Hedgehog Linux, an exception is claimed for this rule as the network sensor device may be configured to sync to servers other than the ones listed in the STIG. | -| 21 | [SV-86905r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72281) | For systems using DNS resolution, at least two name servers must be configured. | STIG recommendations for DNS servers are not enforced on Hedgehog Linux to allow for use in a variety of network scenarios. | -| 22 | [SV-86919r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72295) | Network interfaces must not be in promiscuous mode. | The purpose of Hedgehog Linux is to sniff and capture network traffic. | -| 23 | [SV-86931r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72307) | An X Windows display manager must not be installed unless approved. | A locked-down X Windows session is required for the sensor's kiosk display. | -| 24 | [SV-86519r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71895) | The operating system must set the idle delay setting for all connection types. | As this is a network traffic capture appliance rather than an end-user device, timing out displays or connections would not be desireable. | -| 25 | [SV-86523r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71899) | The operating system must initiate a session lock for the screensaver after a period of inactivity for graphical user interfaces. | This option is configurable during install time. Some installations of Hedgehog Linux may be on appliance hardware not equipped with a keyboard by default, in which case it may not be desirable to lock the session.| -| 26 | [SV-86525r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71901) | The operating system must initiate a session lock for graphical user interfaces when the screensaver is activated. | This option is configurable during install time. Some installations of Hedgehog Linux may be on appliance hardware not equipped with a keyboard by default, in which case it may not be desirable to lock the session. | -| 27 | [SV-86589r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71965) | The operating system must uniquely identify and must authenticate organizational users (or processes acting on behalf of organizational users) using multifactor authentication. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | -| 28 | [SV-86851r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72227) | The operating system must implement cryptography to protect the integrity of Lightweight Directory Access Protocol (LDAP) authentication communications. | Does not apply as Hedgehog Linux does not use LDAP for authentication. | -| 29 | [SV-86921r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72297) | The system must be configured to prevent unrestricted mail relaying. | Does not apply as Hedgehog Linux does not run a mail service. | -| 30 | [SV-86929r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72305) | If the Trivial File Transfer Protocol (TFTP) server is required, the TFTP daemon must be configured to operate in secure mode. | Does not apply as Hedgehog Linux does not run a TFTP server. | -| 31 | [SV-86935r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72311) | The Network File System (NFS) must be configured to use RPCSEC_GSS. | Does not apply as Hedgehog Linux does not run an NFS server. | -| 32 | [SV-87041r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72417) | The operating system must have the required packages for multifactor authentication installed. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | -| 33 | [SV-87051r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72427) | The operating system must implement multifactor authentication for access to privileged accounts via pluggable authentication modules (PAM). | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | -| 34 | [SV-87059r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72435) | The operating system must implement smart card logons for multifactor authentication for access to privileged accounts. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | -| 35 | [SV-87829r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-73177) | Wireless network adapters must be disabled. | As an appliance intended to capture network traffic in a variety of network environments, wireless adapters may be needed to capture and/or report wireless traffic. | -| 36 | [SV-86699r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72075) | The system must not allow removable media to be used as the boot loader unless approved. | Hedgehog Linux supports a live boot mode that can be booted from removable media. | +| ID | Title | Justification | +| --- | --- | --- | +| [SV-86535r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71911) | When passwords are changed a minimum of eight of the total number of characters must be changed. | Account/password policy exception: As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general user-facing software platform, some exceptions to password enforcement policies are claimed. | +| [SV-86537r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71913) | When passwords are changed a minimum of four character classes must be changed. | Account/password policy exception | +| [SV-86549r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71925) | Passwords for new users must be restricted to a 24 hours/1 day minimum lifetime. | Account/password policy exception | +| [SV-86551r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71927) | Passwords must be restricted to a 24 hours/1 day minimum lifetime. | Account/password policy exception | +| [SV-86553r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71929) | Passwords for new users must be restricted to a 60-day maximum lifetime. | Account/password policy exception | +| [SV-86555r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71931) | Existing passwords must be restricted to a 60-day maximum lifetime. | Account/password policy exception | +| [SV-86557r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71933) | Passwords must be prohibited from reuse for a minimum of five generations. | Account/password policy exception | +| [SV-86565r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71941) | The operating system must disable account identifiers (individuals, groups, roles, and devices) if the password expires. | Account/password policy exception | +| [SV-86567r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71943) | Accounts subject to three unsuccessful logon attempts within 15 minutes must be locked for the maximum configurable period. | Account/password policy exception | +| [SV-86569r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71945) | If three unsuccessful root logon attempts within 15 minutes occur the associated account must be locked. | Account/password policy exception | +| [SV-86603r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2018-11-28/finding/V-71979) | The … operating system must prevent the installation of software, patches, service packs, device drivers, or operating system components of local packages without verification they have been digitally signed using a certificate that is issued by a Certificate Authority (CA) that is recognized and approved by the organization. | As the base distribution is not using embedded signatures, `debsig-verify` would reject all packages (see comment in `/etc/dpkg/dpkg.cfg`). Enabling it after installation would disallow any future updates. | +| [SV-86607r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71983) | USB mass storage must be disabled. | The ability to copy data captured by the sensor to a mounted USB mass storage device is a requirement of the system. | +| [SV-86609r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71985) | File system automounter must be disabled unless required. | The ability to copy data captured by the sensor to a mounted USB mass storage device is a requirement of the system. | +| [SV-86693r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72069) | The file integrity tool must be configured to verify Access Control Lists (ACLs). | This is not a multi-user system, the ACL check would be irrelevant. | +| [SV-86705r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72081) | The operating system must shut down upon audit processing failure, unless availability is an overriding concern. If availability is a concern, the system must alert the designated staff (System Administrator [SA] and Information System Security Officer [ISSO] at a minimum) in the event of an audit processing failure. | As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. | +| [SV-86713r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72089) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer ISSO (at a minimum) when allocated audit record storage volume reaches 75% of the repository maximum audit record storage capacity. | As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications of this sort are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. | +| [SV-86715r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72093) | The operating system must immediately notify the System Administrator (SA) and Information System Security Officer (ISSO) (at a minimum) when the threshold for the repository maximum audit record storage capacity is reached. | As a sensor running Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications of this sort are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. | +| [SV-86837r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_6/2016-12-16/finding/V-38666) | The system must use and update a DoD-approved virus scan program. | As this is a network traffic capture appliance rather than an end-user device and will not be internet-connected, regular user files will not be created. A virus scan program would impact device performance and would be unnecessary. | +| [SV-86839r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72215) | The system must update the virus scan program every seven days or more frequently. | As this is a network traffic capture appliance rather than an end-user device and will not be internet-connected, regular user files will not be created. A virus scan program would impact device performance and would be unnecessary. | +| [SV-86847r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72223) | All network connections associated with a communication session must be terminated at the end of the session or after 10 minutes of inactivity from the user at a command prompt, except to fulfill documented and validated mission requirements. | The sensor may be controlled from the command line in a manual capture scenario, so timing out a session based on command prompt inactivity would be inadvisable. | +| [SV-86893r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72269) | The operating system must, for networked systems, synchronize clocks with a server that is synchronized to one of the redundant United States Naval Observatory (USNO) time servers, a time server designated for the appropriate DoD network (NIPRNet/SIPRNet), and/or the Global Positioning System (GPS). | While [time synchronization](#ConfigTime) is supported on Hedgehog Linux, an exception is claimed for this rule as the network sensor device may be configured to sync to servers other than the ones listed in the STIG. | +| [SV-86905r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72281) | For systems using DNS resolution, at least two name servers must be configured. | STIG recommendations for DNS servers are not enforced on Hedgehog Linux to allow for use in a variety of network scenarios. | +| [SV-86919r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72295) | Network interfaces must not be in promiscuous mode. | The purpose of Hedgehog Linux is to sniff and capture network traffic. | +| [SV-86931r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72307) | An X Windows display manager must not be installed unless approved. | A locked-down X Windows session is required for the sensor's kiosk display. | +| [SV-86519r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71895) | The operating system must set the idle delay setting for all connection types. | As this is a network traffic capture appliance rather than an end-user device, timing out displays or connections would not be desireable. | +| [SV-86523r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71899) | The operating system must initiate a session lock for the screensaver after a period of inactivity for graphical user interfaces. | This option is configurable during install time. Some installations of Hedgehog Linux may be on appliance hardware not equipped with a keyboard by default, in which case it may not be desirable to lock the session.| +| [SV-86525r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71901) | The operating system must initiate a session lock for graphical user interfaces when the screensaver is activated. | This option is configurable during install time. Some installations of Hedgehog Linux may be on appliance hardware not equipped with a keyboard by default, in which case it may not be desirable to lock the session. | +| [SV-86589r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71965) | The operating system must uniquely identify and must authenticate organizational users (or processes acting on behalf of organizational users) using multifactor authentication. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | +| [SV-86851r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72227) | The operating system must implement cryptography to protect the integrity of Lightweight Directory Access Protocol (LDAP) authentication communications. | Does not apply as Hedgehog Linux does not use LDAP for authentication. | +| [SV-86921r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72297) | The system must be configured to prevent unrestricted mail relaying. | Does not apply as Hedgehog Linux does not run a mail service. | +| [SV-86929r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72305) | If the Trivial File Transfer Protocol (TFTP) server is required, the TFTP daemon must be configured to operate in secure mode. | Does not apply as Hedgehog Linux does not run a TFTP server. | +| [SV-86935r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72311) | The Network File System (NFS) must be configured to use RPCSEC_GSS. | Does not apply as Hedgehog Linux does not run an NFS server. | +| [SV-87041r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72417) | The operating system must have the required packages for multifactor authentication installed. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | +| [SV-87051r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72427) | The operating system must implement multifactor authentication for access to privileged accounts via pluggable authentication modules (PAM). | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | +| [SV-87059r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72435) | The operating system must implement smart card logons for multifactor authentication for access to privileged accounts. | As this is a network traffic capture appliance rather than an end-user device or a multiuser network host, this requirement is not applicable. | +| [SV-87829r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-73177) | Wireless network adapters must be disabled. | As an appliance intended to capture network traffic in a variety of network environments, wireless adapters may be needed to capture and/or report wireless traffic. | +| [SV-86699r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72075) | The system must not allow removable media to be used as the boot loader unless approved. | Hedgehog Linux supports a live boot mode that can be booted from removable media. | Please review the notes for these additional rules. While not claiming an exception, they may be implemented or checked in a different way than outlined by the RHEL STIG as Hedgehog Linux is not built on RHEL or for other reasons. -* TODO: auditbeat has been removed in favor of fluentbit, check what needs to be added here - - -| # | ID | Title | Note | -| --- | --- | --- | --- | -| 1 | [SV-86585r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71961) | Systems with a Basic Input/Output System (BIOS) must require authentication upon booting into single-user and maintenance modes. | Although the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) does not detect it, booting into recovery mode *does* in fact require the root password. | -| 2 | [SV-86587r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71963) | Systems using Unified Extensible Firmware Interface (UEFI) must require authentication upon booting into single-user and maintenance modes. | Although the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) does not detect it, booting into recovery mode *does* in fact require the root password. | -| 3 | [SV-86651r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72027) | All files and directories contained in local interactive user home directories must have mode 0750 or less permissive. | Depending on when the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) is run, some nonessential ephemeral files may exist in the `sensor` home directory which will cause this check to fail. For practical purposes Hedgehog Linux's configuration does, however, comply. This file list can be checked manually by running `find /home/sensor -type f -perm /027 -exec ls -l '{}' ';'`.| -| 4 | [SV-86693r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72069) | The file integrity tool must be configured to verify Access Control Lists (ACLs). | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` specified for use in the RHEL STIG. Additionally, as this is not a multi-user system, the ACL check would be irrelevant. | -| 5 | [SV-86597r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71973) | A file integrity tool must verify the baseline operating system configuration at least weekly. | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` specified for use in the RHEL STIG. | -| 6 | [SV-86697r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72073) | The file integrity tool must use FIPS 140-2 approved cryptographic hashes for validating file contents and directories. | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` specified for use in the RHEL STIG. Auditbeat uses SHA1 which is FIPS 140-2 approved. | -| 7 | [SV-86623r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71999) | Vendor packaged system security patches and updates must be installed and up to date. | When the Hedgehog Linux sensor appliance software is built, all of the latest applicable security patches and updates are included in it. How future updates are to be handled is still in design. | -| 8 | [SV-86707r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72083) | The operating system must off-load audit records onto a different system or media from the system being audited. | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) offloads audit records to an OpenSearch database on another system, though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). | -| 9 | [SV-86709r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72085) | The operating system must encrypt the transfer of audit records off-loaded onto a different system or media from the system being audited. | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) offloads (via an encrypted channel) audit records to an OpenSearch database on another system, though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). | -| 10 | [SV-86833r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72209) | The system must send rsyslog output to a log aggregation server. | Syslogs are forwarded to an OpenSearch database running on another system via [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-syslog.html), though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). | -| 11 | [SV-87815r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-73163) | The audit system must take appropriate action when there is an error sending audit records to a remote system. | [Auditbeat](https://www.elastic.co/products/beats/auditbeat) offloads audit records to an OpenSearch database on another system, though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). Local logs are generated when this network connection is broken, and it resumes automatically. | -| 12 | [SV-86691r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72067) | The operating system must implement NIST FIPS-validated cryptography for the following: to provision digital signatures, to generate cryptographic hashes, and to protect data requiring data-at-rest protections in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. | Hedgehog Linux does use FIPS-compatible libraries for cryptographic functions. However, the kernel parameter being checked by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) is incompatible with some of the systems initialization scripts.| +| ID | Title | Note | +| --- | --- | --- | +| [SV-86585r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71961) | Systems with a Basic Input/Output System (BIOS) must require authentication upon booting into single-user and maintenance modes. | Although the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) does not detect it, booting into recovery mode *does* in fact require the root password. | +| [SV-86587r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71963) | Systems using Unified Extensible Firmware Interface (UEFI) must require authentication upon booting into single-user and maintenance modes. | Although the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) does not detect it, booting into recovery mode *does* in fact require the root password. | +| [SV-86651r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72027) | All files and directories contained in local interactive user home directories must have mode 0750 or less permissive. | Depending on when the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) is run, some nonessential ephemeral files may exist in the `sensor` home directory which will cause this check to fail. For practical purposes Hedgehog Linux's configuration does, however, comply. This file list can be checked manually by running `find /home/sensor -type f -perm /027 -exec ls -l '{}' ';'`.| +| [SV-86623r3](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-71999) | Vendor packaged system security patches and updates must be installed and up to date. | When the Hedgehog Linux sensor appliance software is built, all of the latest applicable security patches and updates are included in it. How future updates are to be handled is still in design. | +| [SV-86833r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72209) | The system must send rsyslog output to a log aggregation server. | Syslogs are forwarded to an OpenSearch database running on another system via [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-syslog.html), though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). | +| [SV-86691r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72067) | The operating system must implement NIST FIPS-validated cryptography for the following: to provision digital signatures, to generate cryptographic hashes, and to protect data requiring data-at-rest protections in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. | Hedgehog Linux does use FIPS-compatible libraries for cryptographic functions. However, the kernel parameter being checked by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian) is incompatible with some of the systems initialization scripts.| +| [SV-87815r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-73163) | The audit system must take appropriate action when there is an error sending audit records to a remote system. | Hedgehog Linux uses uses [Fluent Bit](https://fluentbit.io/) to monitor audit logs and [Beats](https://github.com/mmguero-dev/protologbeat) to securely forward them for storage in an OpenSearch database on another system, though this is not detected by the [compliance check script](https://github.com/hardenedlinux/STIG-4-Debian). Local logs are generated when this network connection is broken, and it resumes automatically. | In addition, DISA STIG rules SV-86663r1, SV-86695r2, SV-86759r3, SV-86761r3, SV-86763r3, SV-86765r3, SV-86595r1, and SV-86615r2 relate to the SELinux kernel which is not used in Hedgehog Linux, and are thus skipped. @@ -528,10 +543,27 @@ Please review the notes for these additional guidelines. While not claiming an e **8.1.1.2 Disable System on Audit Log Full**, **8.1.1.3 Keep All Auditing Information**, **8.1.1.5 Ensure set remote server for audit service**, **8.1.1.6 Ensure enable_krb5 set to yes for remote audit service**, **8.1.1.7 Ensure set action for audit storage volume is fulled**, **8.1.1.9 Set space left for auditd service**, a few other audit-related items under section **8.1**, **8.2.5 Configure rsyslog to Send Logs to a Remote Log Host** - As maximizing availability is a system requirement, audit processing failures will be logged on the device rather than halting the system. Because Hedgehog Linux is intended to be used as an appliance rather than a general network host, notifications about its status are sent in system logs forwarded to the OpenSearch database on the aggregator. `auditd` is set up to syslog when this storage volume is reached. [Fluent Bit](https://fluentbit.io) offloads audit records to an OpenSearch database on another system, though this is not detected by the [CIS benchmark compliance scripts](https://github.com/hardenedlinux/harbian-audit/tree/master/bin/hardening). Local logs are generated when the network connection is broken, and it resumes automatically. Syslog messages are also similarly forwarded. -**8.4.1 Install aide package** and **8.4.2 Implement Periodic Execution of File Integrity** - [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` utility. - **8.7 Verifies integrity all packages** - The [script](https://github.com/hardenedlinux/harbian-audit/blob/master/bin/hardening/8.7_verify_integrity_packages.sh) which verifies package integrity only "fails" because of missing (status `??5??????` displayed by the utility) language ("locale") files, which are removed as part of Hedgehog Linux's trimming-down process. All non-locale-related system files pass intergrity checks. +## Hardening compliance issues - work in progress + +Hedgehog Linux has recently replaced several [Beats](https://www.elastic.co/beats/) forwarders, including [auditbeat](https://www.elastic.co/beats/auditbeat), with [Fluent Bit](https://fluentbit.io/). While [auditd](https://man7.org/linux/man-pages/man8/auditd.8.html) logs can be configured to be forwarded to an OpenSearch database on an external aggregator, requirements for file integrity checks have not yet been implemented in [AIDE](https://aide.github.io/). + +Until that work is complete, Hedgehog Linux is not in compliance with the following items: + +* **STIG** + +| ID | Title | Note | +| --- | --- | --- | +| [SV-86597r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-71973) | A file integrity tool must verify the baseline operating system configuration at least weekly. | | +| [SV-86697r2](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72073) | The file integrity tool must use FIPS 140-2 approved cryptographic hashes for validating file contents and directories. | | +| [SV-86707r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-07-08/finding/V-72083) | The operating system must off-load audit records onto a different system or media from the system being audited. | | +| [SV-86709r1](https://www.stigviewer.com/stig/red_hat_enterprise_linux_7/2017-12-14/finding/V-72085) | The operating system must encrypt the transfer of audit records off-loaded onto a different system or media from the system being audited. | | + +* **CIS** + +**8.4.1 Install aide package** and **8.4.2 Implement Periodic Execution of File Integrity** - [Auditbeat](https://www.elastic.co/products/beats/auditbeat) is managing file integrity checks instead of the `aide` utility. + # Appendix E - Upgrades At this time there is not an "official" upgrade procedure to get from one release of Hedgehog Linux to the next. Upgrading the underlying operating system packages is generally straightforward, but not all of the Hedgehog Linux components are packaged into .deb archives yet as they should be, so for now it's a manual (and kind of nasty) process to Frankenstein an upgrade into existance. The author of this project intends to remedy this at some future point when time and resources allow. @@ -609,14 +641,11 @@ $ apt-get install $(cat *.list.chroot) ``` root@hedgehog:/tmp# scp -r user@otherbox:/media/squash/opt/hedgehog_install_artifacts/ ./ user@otherbox's password: -auditbeat-tweaked-7.6.2-amd64.deb 100% 13MB 49.3MB/s 00:00 filebeat-tweaked-7.6.2-amd64.deb 100% 13MB 65.9MB/s 00:00 -metricbeat-tweaked-7.6.2-amd64.deb 100% 18MB 72.0MB/s 00:00 arkime_2.2.3-1_amd64.deb 100% 113MB 32.2MB/s 00:03 netsniff-ng_0.6.6-1_amd64.deb 100% 330KB 52.1MB/s 00:00 -packetbeat-tweaked-7.6.2-amd64.deb 100% 14MB 59.2MB/s 00:00 protologbeat 100% 56MB 38.1MB/s 00:01 -zeek_3.0.20-1_amd64.deb 100% 26MB 63.1MB/s 00:00 +zeek_3.0.20-1_amd64.deb 100% 26MB 63.1MB/s 00:00 ``` 12. Replace the old `/usr/local/bin/protologbeat` with the new one: @@ -656,39 +685,22 @@ root@hedgehog:/opt# rm -rf /opt/zeek* ``` root@hedgehog:/tmp# dpkg -i hedgehog_install_artifacts/*.deb (Reading database ... 118149 files and directories currently installed.) -Preparing to unpack .../auditbeat-tweaked-7.6.2-amd64.deb ... -Unpacking auditbeat (7.6.2) over (6.8.4) ... -dpkg: warning: unable to delete old directory '/usr/share/auditbeat/kibana/6/dashboard': Directory not empty -dpkg: warning: unable to delete old directory '/usr/share/auditbeat/kibana/6': Directory not empty Preparing to unpack .../filebeat-tweaked-7.6.2-amd64.deb ... Unpacking filebeat (7.6.2) over (6.8.4) ... dpkg: warning: unable to delete old directory '/usr/share/filebeat/kibana/6/dashboard': Directory not empty dpkg: warning: unable to delete old directory '/usr/share/filebeat/kibana/6': Directory not empty -Preparing to unpack .../metricbeat-tweaked-7.6.2-amd64.deb ... -Unpacking metricbeat (7.6.2) over (6.8.4) ... Preparing to unpack .../arkime_2.2.3-1_amd64.deb ... Unpacking arkime (2.2.3-1) over (2.0.1-1) ... Preparing to unpack .../netsniff-ng_0.6.6-1_amd64.deb ... Unpacking netsniff-ng (0.6.6-1) over (0.6.6-1) ... -Preparing to unpack .../packetbeat-tweaked-7.6.2-amd64.deb ... -Unpacking packetbeat (7.6.2) over (6.8.4) ... Preparing to unpack .../zeek_3.0.20-1_amd64.deb ... Unpacking zeek (3.0.20-1) over (3.0.0-1) ... -Setting up auditbeat (7.6.2) ... -Installing new version of [...] -[...] Setting up filebeat (7.6.2) ... Installing new version of [...] [...] -Setting up metricbeat (7.6.2) ... -Installing new version of [...] -[...] Setting up arkime (2.2.3-1) ... READ /opt/arkime/README.txt and RUN /opt/arkime/bin/Configure Setting up netsniff-ng (0.6.6-1) ... -Setting up packetbeat (7.6.2) ... -Installing new version of [...] -[...] Setting up zeek (3.0.20-1) ... Processing triggers for systemd (232-25+deb9u12) ... Processing triggers for man-db (2.7.6.1-2) ... @@ -757,10 +769,7 @@ root@hedgehog:/tmp# ls -l /opt/ | grep '\-rules' drwxr-xr-x 8 root root 4096 May 8 15:48 capa-rules drwxr-xr-x 8 root root 24576 May 8 15:48 yara-rules -root@hedgehog:/tmp# for BEAT in auditbeat filebeat metricbeat packetbeat protologbeat; do rsync -a user@otherbox:/media/squash/usr/share/$BEAT/kibana/ /usr/share/$BEAT/kibana; done -user@otherbox's password: -user@otherbox's password: -user@otherbox's password: +root@hedgehog:/tmp# for BEAT in filebeat protologbeat; do rsync -a user@otherbox:/media/squash/usr/share/$BEAT/kibana/ /usr/share/$BEAT/kibana; done user@otherbox's password: user@otherbox's password: @@ -788,10 +797,6 @@ chown root:netdev /opt/zeek/bin/capstats && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /opt/zeek/bin/capstats chown root:netdev /usr/bin/tcpdump && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/tcpdump -chown root:netdev /usr/share/auditbeat/bin/auditbeat && \ - setcap 'CAP_AUDIT_READ+eip' /usr/share/auditbeat/bin/auditbeat -chown root:netdev /usr/share/packetbeat/bin/packetbeat && \ - setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/share/packetbeat/bin/packetbeat chown root:netdev /opt/arkime/bin/capture && \ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /opt/arkime/bin/capture @@ -817,10 +822,6 @@ root@hedgehog:/tmp# chown root:netdev /opt/zeek/bin/capstats && \ > setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /opt/zeek/bin/capstats root@hedgehog:/tmp# chown root:netdev /usr/bin/tcpdump && \ > setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/tcpdump -root@hedgehog:/tmp# chown root:netdev /usr/share/auditbeat/bin/auditbeat && \ -> setcap 'CAP_AUDIT_READ+eip' /usr/share/auditbeat/bin/auditbeat -root@hedgehog:/tmp# chown root:netdev /usr/share/packetbeat/bin/packetbeat && \ -> setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/share/packetbeat/bin/packetbeat root@hedgehog:/tmp# chown root:netdev /opt/arkime/bin/capture && \ > setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_IPC_LOCK+eip' /opt/arkime/bin/capture root@hedgehog:/tmp# ln -s -f /opt/zeek/bin/zeek /usr/local/bin/ @@ -889,9 +890,9 @@ If there are major differences or new variables, continue on to the next step, i 24. Restore certificates/keystores for forwarders from the backup `sensor_ctl` path to the new one ``` -sensor@hedgehog:opt$ for BEAT in filebeat metricbeat miscbeat; do cp /opt/sensor_upgrade_backup_2020-05-08/sensor_ctl/$BEAT/data/* /opt/sensor/sensor_ctl/$BEAT/data/; done +sensor@hedgehog:opt$ for BEAT in filebeat miscbeat; do cp /opt/sensor_upgrade_backup_2020-05-08/sensor_ctl/$BEAT/data/* /opt/sensor/sensor_ctl/$BEAT/data/; done -sensor@hedgehog:opt$ cp /opt/sensor_upgrade_backup_2020-05-07/sensor_ctl/filebeat/{ca.crt,client.crt,client.key} /opt/sensor/sensor_ctl/filebeat/ +sensor@hedgehog:opt$ cp /opt/sensor_upgrade_backup_2020-05-07/sensor_ctl/filebeat/{ca.crt,client.crt,client.key} /opt/sensor/sensor_ctl/logstash-client-certificates/ ``` 25. Despite what we just did, you may consider running `capture-config` to re-configure [capture, forwarding, and autostart services](#ConfigUser) from scratch anyway. You can use the backed-up version of `control_vars.conf` to refer back to as a basis for things you might want to restore (e.g., `CAPTURE_INTERFACE`, `CAPTURE_FILTER`, `PCAP_PATH`, `ZEEK_LOG_PATH`, your autostart settings, etc.). diff --git a/sensor-iso/docs/images/arkime-capture-ip-port.png b/sensor-iso/docs/images/arkime-capture-ip-port.png index 925eb27fbc5f247cc4eed126ca66571822ab577f..1593f5cee5ee08f3cbee1e481f13ee07d3ce709e 100644 GIT binary patch literal 22703 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 HgMj}9*QfZv diff --git a/sensor-iso/docs/images/arkime_confirm.png b/sensor-iso/docs/images/arkime_confirm.png index ec2c2a7be2b4edaefea91c825864e761002a04c0..2187341372fee2830c5888ee66414c08c98972db 100644 GIT binary patch literal 32120 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 literal 24564 zcmagG19W8FpDtXnZQHhO+qP||JM7r$*tVT?&`CPBZQK0P@66mgcm6Z;tyNX0YS%ia z_Sv=1etr+CekjUIz(Hd}0{{RxDM?Xf007wH>-iHT@Yf@Gz``>CfaKw=s_Ck1|kzXYewkmvvtwJdolzrVYE!txu$E~b{o#%dVodmMTx z?G+77-nANT3Wyxu-<$%E$1V6iQ21TlrGG8uHAdx+&-3`e z>I->NQg{2#MBEkH=j8<(w`qLm$(J-~;vshQ9?^Ge9}3?N&N#O`}BVOsoK^lp-zk)VsjSEoP331uT~g=;_UPgHj(V0 zwcv(j5Nq~cTMk<%Q$xAlFAOEwls1+6In9(#OMGJix!P-$Z4)**O~cR>c5RILWqZ}{ zVW;QWzhjz9y`4ytQOd6s1($A%wx8J|Hj0>No7Y&o`bmHDg08Bko3`!;Yzoa-GMu}> zg-#T*|GawpO(v#>ult96bndAWi15G~AxIq|h`unj(Dy}5Hqaf-KMEH6O#7U}f|O*{ zTkvgCQj+q~>>P`ht%HNem#N>-k(CmrNat5VO!sw53C5GLPsozbq^Xn}=Vqi+Nwp%v zOEJaW&4#Cx zByjwc`B^5J%}y#C#=Cc_V8`w4=jF$w^~qqFD^%`7mRa6Zr} zq>?7J$U1RCagA&QLg9Q(UaJ@LJyGuXM>gF=fIr z@m_Ed*G?gvACEDaa0`iFY713o50Q|4p=L^+VUY>Z{gZI{%iNttDr*r|(O_ge+pTV> zz~&pyB-s+M?TZ==6BMKRTH<$2Kl!41xY7PHb+ow&`Udp4rns}8G*>1dB&P|IKS(vDr1?qau9=39ZK2J@_-yCYh1*9l=iZ@6r=#PLpzGBO-HUU0 zP+sv&aPrPX^L$R7iohX%pr?^_{^sQqo)|CbF!@M~vk4`kxEG~@e`&guORG_~M5NX! zvP-*jPHtqsVmyvvuUSob$G&t2J$NyVL~Za%`qpI_X)G0lS5q&=bW`8xctBj2!Pm@p zqN?027-|e%5%;wI7Dxz`#f*b3V|Ljv%5uZHqjRS7R6goYH>r2(Ln`PNA}mj}F2r@7 zyH-V3ZhZ=jvJZL{%AMF)6z_-LK`ENC+EuI$ zDW<&MrgYt%om-W)guYY0FXZz(!5<-T)86^iV)woDQeHc05?EG(A<(q386Wat%KXpu z-N=g|DzX52QQdK?Du$m>>cS%R*bmCgMbOqs<|`VYt%Wi}SR04jYf*_;6=1=IiQdfMbeu0G^}3zodi7@e#H3*ff#*gbRWO z^9tD(v#DwFO|_QS4Eq=0^C$QD?fKsuL4}vPLY8eb6Bya*K|`x(v-vmes4OA7YfcpM zXM{3nu@_(=bp*puM~Be�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 b1In`tCs>nG)VILdh%nL;3gV@rpM3v6-Fwi^ diff --git a/sensor-iso/docs/images/autostarts_confirm.png b/sensor-iso/docs/images/autostarts_confirm.png index cfa8406c2bd08e91017467d3dfed426659fa9f2a..5bdea7d0a69a75b9f493527396cbca65b553e9bf 100644 GIT binary patch literal 46567 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%0D=aUdQZ0-xLB%f`QTcl(!>u@VsxF$o#et8c6l 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 literal 34796 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 E0IJq0EC2ui diff --git a/sensor-iso/docs/images/capture_confirm.png b/sensor-iso/docs/images/capture_confirm.png deleted file mode 100644 index 826d6eefec071ac5094e2158b22c30786d14ea7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97221 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 q4E)Ex`GL<2C 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 diff --git a/sensor-iso/docs/images/desktop.png b/sensor-iso/docs/images/desktop.png index cbf1c3ad2834e3c32c0c3bbed933566e7907d467..15e7a2d28f4f699cb00110b5050d9d89e38cab1d 100644 GIT binary patch literal 420149 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

2J2Vb3th|4gN)t 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%0AN%irAZRj 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

1NrEi0I?eZNh8=iPIT{nMvr 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

CgIGPmDCDR7Z>$AD2tx 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%0A?6}2>Rz7~PUGT_gO!g1`Nxkl(mCXZ~% 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 literal 301427 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�Sk+f4vm64G_kAnhwoi>A!#bw@U(q-=vTxIOva-UG-)+;&1x|6WNuUm6PG zp@|XcbXFajV(aobyYvmh~QMUcYU8$$LNsnhDk5ggi!WY-zv)3)B?+1h?4?E;9GYP{< zvljo&8yLbiCA83;OTM7Z1>uG$NW=>kqwx0K#1_?9E|ja@X#&ZRwvMz2QKxz#mQetMlkgFIa;s%DH+H*kve@xM&;A|hEw$`~i zz2I5~)PrtUhgRs9As7UWm-T!>=p(C;~7jc+!D;s_=3a7F7c*8zU4zU|UV>hIL+V7kDv@Xai81;yBKbf-012%=(^NMIZ1a)pIZ8Va z6}L|SP^hBRasU7h$Kf~}hvS_E0s4OrDPVPG#JLM+aqfn*7}qOi@l%xEYg+Vw*TyEv z1E&&Ux81ogD6RcdMu3O^B9hY(nTa}o!#PaTjC#6jzZX~ry4y_sCa|=@UN~6#oM$}!%oF&=U;KMK{NtY>&okmG0);moafmIXEd>mN zAo#f;3cD7E(5mrblRR1|no6|gyyPh(j~O7~)mL7^OD{kFPY%6AgrEQ7WqkV|{szaV zS8@LQ`3BIGf@wF|Kg#|qvt=7CVbyA_Rz*mzUPuGFB2%oU7$|Kq> zArI2IZIEq~?KZd}c0*PdHYutHwG5oh*YNk>`zEfubs7Ki5C0SwZn&u%?B{vH#fR_5 zD?fk1HgJVnGlm~h^*u97OLh+_IAhhBmc->GzIwlP;aun#*$%XB)$m=PytntLC8JBi z77caI#U!;l{Ad8C;o>G4cC6%Ln&Rt_`ZVx>E>H_@KG!@dK4+mD&e|+4m0#7@REdHD z{5flu>urb*t$sDy=@^~W+Mo$bDj2@0G2k6p#FZepUYuu zZ3w895NiAXER%KsMb|GcOlxA$r>#912m!10%7%|NNJk3_)%5igQmg!mJ+R{k4o!de z=g+Gqc)nDLaC8!NktYjts!anrbZNsu(h9m5OkJe|silld`w3N`c9n1aTA@}M1usK% zY3(iqP~T&wB5Nl=g{AW$unMY3rb~?xF*>j>wr7E|y)i{=8VE5U)PO>z)z3LucogMT zsih6Q&NkFQBUraPbTCF=A8CM4OaiR*c^VBIk{p6k-0)WolxRa?wLBnn$|36PO56yu z2qzUwL`AbJ#F!eZ4FRhqZz5;1{0D7+XrYs_%Rb?XNywVT#6d1ILWo8z==WbrZJ=t^ z@V^G~DG1SYt(9X<$Ttf zE%a7DZ!VmZ1Q61Nbo2jl*r6Ye_k{xBa2$^J%jFvO|3^qbS|=RcaD?+Wp2gYoXK{4q z$cDHosJ`}v`v-g52nS>t>^N|a2mjqp26~Z(mr{}E;{3_Luo`f5W{r8y*qm;W=T^Zp z?`HOb=E}8PMT@9|1%&}Y6>wa&Hzs@i5Cb#yxnj55;=>>P2tInxC;m~nHUM0@^alR& zKmG^&-~ZSDiRYhr))+M^vUwAxUgiE8fTU?yRLG>~`Y?})CCX7)wIGsz^XkgR#n-Kc z81d;(eF4KT{PN-dwU_YCZ~r;2Tzeg7&K#NVzt)O5&)97zOuHSn+Z}ehot+yE!ZJ2N zq_V@v-}{`ivCjOfrs!u04=i19-#pJI56vaphFMh~wHC`E(C%UjByz!Hm3Zh?Z>kQc z$0u*$`InwTtrfT4atDSq{No@1aT|gT-^EyT-azvZPhAzAXRI4&(CPv0*DT;iDVXO8 zue|aCUViljoH=t2=gyo%trf4o@fyB+|F`g?i{HgOPffZh=TXmrF-*>Op&*F*DoI%w zm(8H>O_QIi^QbB)U>mIHD&7_zVabtTfl70SHYs;Qij-QxEkaFQj?J1LJ!4_93mJR}o~4CLLvI7Do?it8t2@s&a2nHG-SE?^bBep~OD+b2ddrNS z8wDFxS{_^$i>;do3!s9!s1;Nl?*O)NKjix1)$OAo8|V1 z4Mu_Em|DT>Entd~_R*Rpp*6JF z^I6nfOB-3sR`9`r9z<%Yg7yq)uVdhd>_b%X=fMmTJ7CUSmAu>TFwOa(05}|n<8T~~ zcVzev3)yVq+CP=zTWwaY$l@VRg7^lN=2K%F^OUjMZV^Ik)oL<44a0yKCuDu_=7KVp zCebax$<Rj3et59Pry|h==z{hP3weGGXCZ-{|ukJ_p|u$ zop{C!{EOG+-a;F)J1!~gf)|AcGDmxa9p zW|8qT>yWY8Y%y(jm_@E_iOAa2koS|7ce_d0-}XQsQUXo<;LfEq?=iI?M<4E_o!2o$ z8~XB`O@{0TZ<9>YY<<{1v`)YGYuB#gyAS+lJpHpr@Z~Rj9UuM3r>>g~Kt$N>HhA%+ zXR+Jv~n)WD9=`B7mW-vG09 zTexS{@Gq^7OR!;xlm*ve#|_A>lCM=$^0`!>aWEgWZyRWSf3%vk>s&h?2q?9*CX`SG z)CgVhS*HjJU?qZ64XAQTf3_;0(wO?}j7lc6CnB~Q$-Ea`gMtnU#>`1(K&^x!1e9En z=WIcL)iHzQ`@3W4BEW5k76F8^+Sb&d@^)z+A@U5flXA;sG z4ImG#95S=UXp(fj&Xt)D5oQ}uIeynAzp(!3KpsOhWkCo5HP(*BRz*+F8KEq*2*>~- z2AYZiI36t2&#LRVu1_@=Vf16K1kfO0`LlM78JitleJ6*@ndoS-UVFSPM(RK}1@Veo zqjiAyYkCY7nFwhZ95E8Q>$9k8fY1%EE!2*mpQ=((#ay2G97F{uVzu=+Nz)FT@+nx* zYFoGMo}~uv#u5xz^NKBdFD18izyWYgVHMaaP(oiJDA!jh1>-QF)*fI8&j0U~4@qpH zIWv1tP95g!Zs&P6wWKP&JUCQj|Df$N;jZ!H2WR!+I2?!LaJ)@QmEec}*jVeBB8GLs z>S)C3XoaJ*N77l}Hgn@Ru*5PY9x~@yq{-PH*jkt5!+UEf*qm;$IoTpl1vMA`wP{N(39ga7&8{BQW^ zM?Q{mTwynD@%kITz{8LH1V8xRckuFaFJRhC=Jg}->W36iregJ4ss`|^mNNg|gB+3$ z_%1-J%6l84$#v5>7!YD9!T>)0iBIF-{4f7I?)vaO<`utmtQUS)c!GIpQRU`zwhFh#OsA#DPxi)JT9e# zVI1MpnRJr?KsID86pE;MT5aONlA!5!m9{ADU zD% zJP?FoZtNCZ2qYEi*xBH^>AL|_hh@9H)kM%X$*LG=p^3o-j*%tkd(XK_mu+5i>H{C_ zQ-yi2k~yNk#X#CZh2YMSm))zq$_MBLC#_zBwB!bB^(5(OcDM0_MT`V zU|4`ne*M%Cyp|Wh_q5i6HmN$ARm=VPWt)jH!k*1{-ERy{z^T|IBVIHG=^9>{ELP zIpqRhyP~3yT3pY_doWiOEZ#cf*Uo6yP_&xDmKgy1GqzUB>-*A-hk)TIVK^GFIlBKy*5aa1>jI60S+P% zt5iD4z7krO$ES$DV6E06u8<-QIC|^aRs5%K{sr#(@JFy(t?|~iE4Xy&4V<1HgKCq| znh!LzeqRN6oDJD^XS+I{5dMGm-fYQ|97z^agP$e#Tx#p-xpOyCDE!R(eSD&j4-~$U zmv_2*x+^Oy_gKz>@xdK{nZW?}6A_h_-Qy6c?u>}D_yPya)YMe5-EXnoY%pxXs5Cu! zq7f!>s4$-Yu%RpnR0y$?|2Xton3A$FnV&3%0szEuYJ^Y@EC;v6dW^(F!lF7l3>$1V zTfBe&9{>CQ`M=@+`oI4VTwYw`>gpP2`!js__yK?V^M6-DS0IsKlMc`cR+uiArbkM- zv|OX2-d>*3DG$kWpNbcE4(4S7HuirqSfN~$DAPj_3eM#@80QM>9?>I!0SH`FyK`ck zeCT-;OdJ23?h?gu9@2CaQ*ao|7v-LOq{KQ-7H-pVWGxOZOn@VoR*s06*9VZO3Nhz- zQ*J*^c2=bO$O8+nYO|sefk!8HZBWhW8JiMF5=jV+vnXU+N0IzYH%WhY1c&iVvX3^g zTE}U+?s|=)GKZKDroR&xp-WrUq#+ar!}R@_g89f1Jd`hGnsgT!)7mtC&$#4H*J22H z{go{OOleI{ConkyOpGuZNI18o){W`lr**XuS7e(5=eJJ^y76hs+d6m0w{M z7%;K9;@E?X(H$X8(e!Uj|4!BNan7>ZSBXl`dbVBz$=tJOR0t=Ta&AJ4A#etEa`GF5 zO1c1TrW-WfGYcFQ7=-mDH~JHtuTcoPr6=u8>8H|iAwV@~fj8n|WCaKYO77>6V(rTy z$t2!46!0V^yUa!XKf9(-Ir0o5lAzK^!BrMui&(!Dy8}Yc#616_IPH||Cg4djQ$hqy zb1EK-N`Ct2p(xR(@IKyr5ugdJ@G z0*>K0#%?1QWwHh)gjlWt4FuwGuOY^?2XVQEf86}1HKSU`I@a;~pas0(H7=|mD%7wx ztit=2`v`^I=?Ts~tCQW}?qWOA$L^0x-9L#&smMPEk*KN!49x_f z0EBI^p84^g|A2q~kN=|R^fHN0RKE}J-{G%+`U^h%@}Y?B1Yu*urMfTCp)3#693^p{3mQSTLA*;iq+lSXMDQ-Fa;VVaSRiUF|jqG=(Cq|G<&Fr z0o&bn^0c0+OQ~8)B{-Bc`CM7fJ+FGMlbE=LdP&*#M_Qt#s(fmN(9ckz@$Pr$xV*T* zcC%Hg(52j3Do-Ciy~XX_Cv$wpCmvGhFJ=|(ELg?G^STIHMNxH}gfNFKE-$Zfc6Ko_ zHSY2G%SYVZ-Kt8ntj2p#W1cTSq175OvP``fc2I?)Ts*0>=X;vl$0&Ml%lSaiK{GQb z`PJv_NUDo#A8_mAEvx6!@>8l|O94YkZKlDfQ75n}vQog#b6Hfw$cntl{}-Ssq-KD4 zAEZ~jWh_X|0CpB@H3f?vhy=o5D^BASW; zAY+f*x81t={u#xY;H%JuJwji zb+vW;qa=&#__oXcUPYefD)vypT-jL-N=^E2RK2GYP;%q@Mb9jwv2og9mG$d$kL;Lb z;J^pmPSn=J{n!UuHo?jJeJDafIgt>-))@3hMVUT6jLP=M!&o_w$I-)^n9RmL(PLQ$ zY)Rm(x(?C5P=y{mX?aHiKTNF#`z>C5_gypalL^d=moIT~d5K?seuJO?^jF+{z8$}l zsh$@`7))LFl<@J`cPH;*q@xN@i6%k5K%hxE`s$~fv0pw1d89U82C&_pVS9hTyZ3L# zYLEyXl7L(KFVR?QW{CiUHk-++j)h`3RQ13nf07=bF&fzdAcCSC{0SPSoJ)`*Mq&(` z4Q{Sq;cRyWM8d{uwWRP#X{d|v)A3qhX0of+fQu-IaBS7_A+jB_Q?fm=#FJFI; z^Ye=wFl{$GY&LuRa{pI+`0&2u6EbOTM7~PJTDBlW-J+1}>7+QE>S>Tkh9U}ad6^Wl z<7xg8f#?W%(9EcxnW(vML_idt_W7Ad9b8wH)>H*L$_k)9r+jaSix?ZRPH@QqNzFP^ zRQ53ep)4w@<@G9A;9hcKmW8pbC2(RInHnSo4KY7RbA5=XP^4F;ahO9`Y zy>B`BuQeUY62cX@Z<&Tgt-gr1vbpJYzSzQuTDGf%R+|kfPYJREk(*JKEF&09pZnb^HS*nCtlazK68rSGpRkUZYA{ z(?V?nAg7|;1Oi&eU^YoclcbP?s${Jfj}h_Vh+((M>hv+zjWHIbExVX5idelA8;{5y)5BCrF<;`Ca zhSdKZ3ILG$v6YCT5IjTiz&>mahU!_=i=}{Ap&XU~FID(TAQ5saitVGi>?1E}J-S(@S7x>}FpRn8QG{XSE z5H`5Ed5sV6Kj7j1zDA54q+@KgAa!jlz@h*EQ%$V{N|D5y^Rwql30w<2(czJ)&#lB! z0a7Fq6E&4F8>(R`+wLZQqnK8ki0h!!x}ORW;xq;EjRo=}5FEVV?)(7QX! zbp?7mK)YJ=4M0~VGLju9lAY`hLwa7h38d-);3`qqphcB)33~MO2bs;1Y(bzZnNkV1 zT4PI6%Jx|XY2b!5*dTlHGkzf22j!Y4*IWe>n&eo4+XMmB$V8H}O=Ju7@$Ng@i>i`) z%KM3AGOBsTjrh%}=v(kt-V?R1i2GeaC9a+|7W2P|UKWM`qh@BXnTuq=Ff#0oa!=(v zD{TYvK1i^h2rg4K7XTatg-lVvf&=#2Dh8Txb%;?jMT&^7fT-m2fW#J<7yxTVvW|7E zjI6EH&`Ia0f09;?cz{CAL-o5)pQCur+1lECerWOl3 z!egSR^F&-Ev6%ykTB$2NqFMqV&?FW|8Z3|^dO2{Afy|T;5fLsfF7e&>KViGwscRlp z`3uUDD)so@-`@$PdX(N`siGa(O+YlRV}YjeuQxAW;)kF9fMM87fi_q7db{1>{Okhv zU+zi;*nMWl;42<^3Xn{YWvgq_cCCT-mE=_f_|#^<6q~Rq@D663vU!u3O9WFXj3$A_ z{BtXV>Jr>G5WbdB3;NGn?)8?fwT8xAuKVMbU*gU}G>0MxfTH>nH$KyooJm!C7Bu#( z0l*@m66^Uv^s5USIsf~_@ex-TX!qJ>Jq9xuI&)cSg-GUq1`AoUijvktb^lpEL&%nQ zh3?KayA;eI1)#D3y`sJ`IdvmS0y&0Z$O=f1=g8jQTEzjf$@+NSt$m|vsS}umVoeY# zF+Ta3(P4X7amBpm%L!pA3wa%9{i6W*HSsRi03sP&Mp<)`Vsc49ft9O=ecmQ}RdLC)n3sTm;%StA1*gh_M+g4=8j|Ot;1pbuB<%p#7*!c{d%|GwG*FaoSNDn2K@MkpKy6~g+Kkj{{tW1yzk!^Rxr8JaY#Y6%stBA zkdg88i}P%uH5>g;oBqpJ-{JQ53+^9o$4!(Zm6uddmcyy2OR%b+)buN7Z9Elel@3Rn zFlS*aE{PY33RMP#V3UCH%dTGB;JfdB!e+B+-#b=eMgI5kI9U@#4N@U18^g3QNSs3o zm^r~T5pG_jw zEu~r1l1*k+-$VI1+&gX(AYGKNCGFrM5hkjefh$&>047s=9E;yu2L#2YV&~d>NQyHL zI3+O7yv)k~ld-m13A(D3%YW%9gZRV78%qivVDTzG_T@4mum$G*}vI`vA z8>RLcHqW$3_{;G-08ygV~SdAlnwi#+8Ye&nD=9G4|1CWoDEmBo3M-vRpADc6|15psy2Xe zkD4$q(x8gPeah*u3Y%5{U>)mN$3Mtmr)P~%!ULX-Bw#DlB-x5W;g-i<{mGGjRBs)~ zGaJZM->4MACkwqOmBP)Lq<=;pHPMGKs^d-;VM&ZEZ9>N=eZ$jcY&Jk{oib%zgQtv( z%S-&%|Mh>yU;q3U{Oy1I8;{mO&%ZZ!H6JB0gP@ zn-?$f-Sec|RGCNi+{N;W$4uO2^jZM$5N+j&xSOdP#HO9B2$a=N z18e3xiO+yI7ZQn-n*Qv77-D{twriBnRi!gP(6(h3O=0^u1W9ZJR#{?lG#cLWF+m3gAN0TeTt3xF4&fAF8A58Gd%4MnE3)92w<}$(HvMP zP+?{?K+yuOxU8Fu3$ojGROQob=8UZ`$T?sbPkCP_L2-w+K&-@}sR4Q><_I@dG}~%J z#hF3&YH=fy)NT!MQBw)|7O$TI9;w!}w2wyJ&cG5_nD!o$EIZat9qFW20AL;KSjXRW z&i|ypKkel+A0)Z!vidsF7>PwM*tB`a(HM>bOmGFQ)SouEI z3E|WxkgEUfOoHm(42G*z-3yp|io~Nu&w!u)_)oaJzQUjXpMS;Y_n+a?4+M>QWHCr@ z@VcKaZ<=wm=-F*|i!u${ez4o^@Z#ln`1S4Iz_Hjy1sbONG%4+2VI{oM};VQ42x=6CkKsa{6X0kP_>kNyQ^ z5kSh{pIu(yr=R|5YA2ajuO0z_Lmkw{dJ<;M=Q# z(IO5A<={b+;&fHzW|MS32ZTurP*LVO1E&R_g*w??bPPQ(fMM=cd0vPX9*?s=c)29| z`M#53P3f^x1K0HTiuu5rSz{XOReCFR1)%NSn?-fD3$J7h5b1t;>0$$&h!L?{YVVT0 z$iJ3UIdk|RkOn2DHLpT>1b`t0?G&wERDqQ+tDTzEUT>=TL1(!>Wvl?eI@Ym{Z*qKX%}0Kw z*OB|;vdeIsl&A$wy;K}|l%2-N5(vUCJE7iTGK(HnV53fis|dAJjwldlL&YPP17h+c z=1HJX3fL{VN0SFSA31{tMag+SNSx~sAPTs?xxwy#+2e12`8WLXmp6!qSmO}J<2o@K ziZVKbl>+kwhJ=u5?@RlTStJ=ZH!twz%SYUP`JyURF>0Y73Zidbf&c<1(!$DxhR##Z zUOta}5R-0$ROp7RgIVD#5d;O`{Nf6)zx%%U8!xyw>;|bJ`*5?!I^5p>UZ5&Ic(>o< z$3OfLgK9~bzcrm*kA720 zTC@T`Tw6lL26LWkrPwZ z4xiIuvdMPj!l^IXHxYrtDBecKHinTs+tWgy)o(e`gh?RaG|^2fUpUOhlt~SoYbw4&wg`v`#t{YU;Y^vmzVhK zzy1ZcpKhzF4U9+mXt!6W^Q45Y#wu1A287}9Eejz8+}ymv{oUR4B|-VdXNByE!ma$K zLvUkiB}xa3z)J9XRJF4JtIXQYMqMS@?Jw~9^$!T)=^;S+?kF?>WVlx>7+Gakwos9N z7={gg_~|F?_h+X)cgA;G2Y(5i630U5P*A2Mtf&~YgTH9-Ha|AjOOvpEt27|k*sYIC?f zY#|veRGq)s4Oq#H)grfsL7>`}2sOZBY1vi6)Xv@2`%RgZV1D0YQh2@j6+)}?bCuNF z>m{{sh`Q*SbWYJpo4DLE8Inu}rizJSsr=kixCFJ6f59Ls=Rn#$qxl?)p7#V8i455| ztEyH5VLDVL!qo+9IC;zlGwj4P&U&YkUHN>-$;hay^>$q`wwf8t4aM<>8VJU$J_>0i z)U>ZMQ(-fbqi~|fI!+l%L2Bdw>?hwY~$-S;8FWKlL@FwWoo3X zkM098GKeDrg7%PSC)hH9Ll^>h!-xmQ;o;B}*rK`K(oXO-3>&=q{x!}n&+)fE{RQuS zem8mvhY}ozfs~aIO$j+gAO;9Ee43KYAgVr8eXl*f`fr5u^GlpxT;j{;Pul8ExHk|Q zKGiwc))@-RjohjSE8ZbVS1ot`C&k|cer&gUyn6Nhq^NI2thj4m=iSR}FDZi+s;Tx; zkWdHST&kxO@apwM5Fn}q4i zm9(l`1{x$Ipgt6uvFw}&0TjU0%(&q)A*9fzyY{lqR%@n;GpV30Obx8gzq##03o~F#<9FWrOQ>nvWYC0SS;#O(=Jlm) ziQ&q2EK%WQ!-i4MtEBfs1LKA|Gug+o?pz~kC+t0nk*UhuHkgdyM_DnZB5(v!Nn@B$?}AQCPrFjpV49LDrc!vF?9E16 ze9TeUNCBtpNuPiTn9axyh9cwma2%`IVLX=m`}<~czqrEE1Oy1@=NI_r|NI|ue)R@F z|M{;t+&>gQZKBc!kWl?N20>wJcZeJ_&2yxfcM?11S%89Q?4`f`@)_|EM-U4eX?Igqck%_3mR)gF0RUcCaGfPDVAxD%9%OD%hUE$kxsq2xr8r0KZKZI+Spf0r3@3d^Mb zHmC~zb?vCMu*gEG&W!sS1t%|db0U0I4|7@5s`+Rc0aZY*XTQ81Rr0SyEm7#j9_<`Z zj1YA^Y?9KPOp{I`m^+)2-y5LR&*4+1b!C?PdnC^_w38ZnFG|(8_P4LVWom#%!?iMJHEU~4rKai-bi@?Pkr)=5cHh{oXu?Nid zrZgSgrJ3!zPTf#a?qwOgL9Jb3fr6~@LNn_qm3s;3{(lJo*p>zN#+!Au+CL35Zv_C> zv5s~8{Q?8jf~2b#HkIqY*6=|9vA0bM{~Shdatc9LPo=$FEEQb}lZ_4PM61pebb!Iq zD?ar=rUWhRID^=TVtrCcNq?k&kMDoDy9aXw(eRsH&tcf$`yYSA<<%wr?N5Kkmye&v zmV|+_$e{#IMs@=uPJw6`D1Qz;gV@A=e}?n(OMLwF9>gIBr6`+SAbL;*8*ql%pNmaqj8d*N z!Wcc^!ZZ*yS_4QjU<`oB9To$5H~<8I+`!JL@$3lwS=7ab7>Ng zReuRM$tF)sg&luUX#eQV`4s?I$2!*WZ72E7C>y?b6m_E6Z*=fv(Z@$d3=9erbRA0K zpQ!uCqp*OHCbA@|En@TIIQ^IG=#CMa?U1YeF-9Ej4pXo~Y7@%eJD~VUNB`JMkjc2e zyT|?AJ$78W=j8i>8Tu&K0u$4brVUt+jw>$`vkHRbm8c02gIJ zBFHMe%C(8IjWM-OaSmirT1O7uMF>7tPc8`%ViGx`mdJ(Zqi+HLE{0$&plh(J%!8-f7w2^e$H!8exZqtUG(fciwyr@$CQKql?f z)aEd4#<}V}1wAQvh%~8&Mb-+&DM5}j3HMD&Jc&(OdX@(#I7u7Qq+^f*#>4#qZ-0J+ zpZ@ue&Aw@A6W2VDw?JgGfLM!1VR*nwxmf)+FugTQ$4pbu%M9bf4qbyy>GYM&2+A~xOz;@#%!AZO+|Lg=pAmHly1uieIyK`mPeIQLL70F6)tn%106NKOs zMWG%pzyzjtBwf*JmDQRT0FtiOsSKC3W*17oyz~z*7FL=OK>Q5LBRz4ks~iEQU^_IZ z`BEKUXISpMp+@zN+0&Qj1$5k2pE7C&lykmKP?|g6M;)qi<7c8ijlDRHu%qx_>_bON z46;zHOyEfg>-oR=c?+WLNvWvVD))$62(bX&{CL zfF`Y0xnj4Je`@iJG-nk!%>q~;s6AT?sZyg@WY{jO0rpyBlC>42v~Tr9Jkik0all+_ zfmr=492H176jWfArzOMw@sMqsny%Lh0IXvj>-hE)WuR$qzaTSce$Tf8X2=bjBZH3- zk$^B69y25WAp4IAG)zWplSm*KI3ACa-JnS5!?dAHtp;HjKbr=^fKXg@20{$u_feuT z2T|iV&R@uPzx;|){VccMQ`V+_ z#kwVS$1>_Sv|I`Bs31_MD5tgpP;XIQ1PJ&EjV#orf0qE9{bU+5){j!Mq3tJEv?ef@ z`~$w>d42s||L>NA*8*^)0&2X1WUKF2iflSbiMJCb2ji>-^`FpDrC;>5vjInjS^H(Wpb=Q2bJdsNKaB!o0 z!M0(l_5e5l3fgT_q_vWy>rWAGWS#U^Ef98|k}!@c`=yBhYHcCw660N!=|i43`dP<1 z*0GLn3Qgc|`}hQKt@`{^#eYir(`GVOuH&eFKl$5nMDFL$8wl&&k*41GgbE)XjyN8U zqdnke01c!l$YBy344dh{AOMCWwC4q@Q^osmc)+i}yj4Nq{HXKv3#O&oV?gu%#+s zBl6}w;p+MYcDpmTg`#(DJ<+|^Js38dVrys$O7<;jt|l#um#S zlk|K%%sS_DJnWT{zocfe=X!yfrcFkS430hs!=a<=&up$Go!rs>PW{)jdZPuOnwUbp z4A`<<>@&#Dyx~5I!H#nP5xMIUxN!lz*GVl7uiKi9T!(WnD&0bI(z-c{w)g_McF5zW z7L&j`PjU_rwYa6NOqLTaC(gYdcyV#0HbJpzO<)8yW+`;rlzWZXxc-u zc>$O|?%UJ{!pxi{s@E~*#^OQccq;uC=32YOnKR_A+pyP$b;2)VIyQ?3SNkg$NQq@k zSQsSC^Xmtpt=+IP0M@aNb$okyJ6bFNewIohf6M3G^CyR<6~<%Pa4Ez|Y)%K|smQIA zg^v+OW(?cG#1cteI3>)5IvtOUhzJ^VBbxT^os!nW$O3rzx+u<{uK2(F_j-DaY=9sC zu*3Uzzv9FDcQ_snV2lm`Dh{E?Rl!>{b)tal7ccPX!v{o%4p=k*B=6tM$rQy0C-IY! zjuDb7{okA^kNe#jE-tRR$K1QNOF@9K6=9k)5n0&JPTZuToO-G+udZ-$dDZ#cz8gTL zEfF-elMEGHt16RYLM?BGXD*LQy?QRj_6lU_JQAQLTLkht!0hHbI@>grX>ilKn@&2| z>ZBW9@VZJzjEbV0N={WZmHm?WjJ$xqk_-2SLibhNZI#@R)qd93>|242mdaSj=a%K$TP)JD2t`~ewb(B z=GRJVC6da}$xnO?2x4UL-C=xhR4OvrN>6U`G#y*jf67IGaBL44fr+~hw|M*WFZl7F zege_gCz}n!1}|TIhx79b{QCA6eE#$i@nG%qo?ka&zdy(R{2ZS@ewqTXDNxDG391B| zZNDv%*SqRG29lhcK!7Py4k6(B>ZMElf9^3_R1P@eAc9~Kz&QQh!)Cy%*WY#L#wj`k z35bx_lO@O^`;Y-uzRY5P;&r;Z!nIHPLO`!4q;Heg;{Rzh3MyY{p%^U%!?;hYt+LGK zLD?L;?o()qgI8J=t!rj35c7gWAJoTyy}tPfKLJMDCXg-7TL>+BT>{OU@8}sSke7>g z3OfQ{@;P$#ZDpUdq3~Cp@`m~^g(K@+w6^_&5HKYPU~ZSQu>$gk#sxJ z?Jxd3koJDm(J81D_oM0J_oN|AOF^rhM}m2-IwjRD45N^zLtBxFx~JpEb-NE7R+O5O z5*$VAa>^<=%>!FA$u7yYOp2eX_K;J;Hpi-yv|dGRqlg9ZVXM!Gv=)Nw`41fs1rER| z7=Y}seVDCXVd+=U^O23UC^>?ZHKUAM0*BKVZcYt=rORXUc}>0o2JB}AZ!s`l&Oe!V7&>(-d3iUnL02O$c zU}S%Gjvs#d13tWek9WVm#o_)wU;4x00WrprzTObcnM*$Hv4#+Eb#sHyA3iDyWwrvG zt|=S-KA8Z@COWB?S$YM_`)m7nFV3&9-R+xVf30&|dJXhB4;Y34_sX1FB&1fnFc7X^ zyu@yQc5)krvhFhP4bI$mLATUe5o)2Yxn*a37I@Jr$`Kt#&-~6vBnm^Ud(ew62uzC! zz`g9WW1C858E9>E)&AA8;j0p=3Oj5ru71M8jy%2*qbJtZSuks#mlxRNzg6yUwPh)~#+; zZ$CLAq1?XiwVMZNVa%36edm@MS5CLeOU_nl6H+BW%Fc5&IiJ)nePkxS7TmMi0iDOJ znlm(a9mxCsndiA`lc?t#TZV@L0%mnStX76$Tqs*XoInm$as|B;E}u^1)9EEh%L#fK`_jm>P|>-V+Wq$-2~FJ8XH#l;2Q{rVOkKYjqm zh>!0-AjXInFJEE5KQEPFURv(us&5ovTwGjYv)$ovxF3VP^fBq0qVD%2S3(>@)Mp-y zNWuDUx6P{hKF!kqoxYxN;kl1N|7Npsqqm&sh&XGz+u`QL%f@}{C&lvK*y3LBY#mdj z%u8tFr0O4?B(+LZPFQcaPQ^hjP(_5XtosDG$NuG+3WSqj^%pUkM@nsS+Wc6P89J2# zt9oz2M5Ysux2igDKLIo-gwpDmL->0LK54~nlFSlm-Di`2Aw1_^Yg^%#)_v@#wi_$J z3^az4$W!GTNp*EqIFY#Xn@sXWR+NoZM#}bj>jP;ZQ5ICFtNtt)2Ue8LpJ;kvRl5q& z%p4%0UT=U}E=i@dpreX9!1Z-C31N1ViO!nMa7{AY=cD`l8w*OFN8%Fg-ijdF^@6-- zL$1eJm{qu|aA%FnXog*^4Hzt02MsWf=CDPevfP}FMWqi{t$u(Owu52)JLD=Pyfe=G1v3v*!A>w$9nNCSj`=Lwp|J|Ek@#6I>>~_0O zG(MN*v?2mtaB<7n?soX@haYiqd4;#XyutnLEk3?`k5BJE;_CVuFJHgLc4r0Y_=Fod zj$s&Zb#slkKfeJJE1M`HQh_L`h@PFGq-^Bu_F@(~_!txqxV}!*e?H;bq7#A5pLYm@ z5O>oQ;>7Y#LDtQSmlI%c+WqVOotaC!gQU(k`Ze>fV+pcJS;5tjaMeYes=O^rMMsIe zB!{Br!%nblsp&1sZw9S;*Q=geO;zhgq%33UilHrSwN*fBQLIMN(xPI`gzYUWIR)Uz z#D;w2RdrU_$|iS?!lAxb9W88HOaN_}7T_5?)U_o+b7aVHl z+iL0e&ryN7Q=-gTX|H*&*lZqT0XJT_%sRQWoAi1ji*k+drWdmh+B005ynLpW^9TAB ze|_BbwdU>~V`%tOA%=-TOjV18ZYeXx4bplF5CC-fK0#7l;{*6=L$xI#zRBuJ97Wkv(iPytxr#8aKcDMb< z<<%9op@z*3I{IYbP#&%f_ ze=GG-IfE#X(70=m16O^@8%4&Ct748vkHv_U%gplH41UKr9s4V>S?5*+Nba;TUa|Oa z@v$=@F+=9|D%BkRNsiy%24)~Agi1Qkiepp??qF%u@X1OkC&MS~)Pzy#Xh8TIpmg;z zvPz5MF;)WMl(T}7er&{}nuUU+Ovaz`G@~5(dgE zO?>i5BdEF%O-SICJ^}<;_gO$cGvNlb7R&?fW0uDsZm93-qUpAT}Ig z`||-w(C-S9f$)v) zk*aT>ev<7Up)JG2(onCr*7AzW>nD4Yh$?l*0_Yq+6hWBRhMYD-s4ec9S8z01fHr`X zjGsPTHfz*1wjB5TELYy6`ikM?+v3wu>HbLd5RTFiZfr@}pE(Q$#^lD5tr1qwW0q+l zhqT}#d++Q8{#4y!@u3=d&DG9x&xa#aItOhuph2H#$%=`CtOMhgVkSzLV`||hzU$+l zY=+4^(h*u|pEpblu>LxZvOHWa9^ucd$M|=}=8dzWaa#Ob%Vl}7p`+kl|55fjs<{9k z;o~~;#%;^9&vxxYr*-e`SM}{cB~f4Z!#g|6O2Bc^&RFX|Chz>YJISA^41Tex!I&`s z;k$a$*tNX;KoCnToFA(Ch_DP8cfy~+cySmW1Z*_4uoO!romJbesvBymE`YsP+||y5$e(C3%e%@QI@4WSeWb#Db-e7{G>;D`=ZKSl2Grl!Oz^iE-J5Ro>d6s^WdO zkmj_le>Y*^70M@U+;TWs=V2gW@@Wy;?r{u50{w(Ctc>-rz(?QXAIm8WzTsOVguM2IdX=2TgZnH@hw*F=UXXqkp550 z!|Ojf)SHJX6}6X~PE{O$N1d=eYK9f@s~8teUfmByFs`^aF@o|~gz#-R%($Rc!Dt}a zDy z10ro-u()asKw#?n9IRDbbTmTOmpcUKk+DUM)uvrgl83YK7pGF+Qu6y3c1u{P-r#pT zN;+X1!V``GN3R%AXgwtUhOQj&aFUmu_PCoU=-;()zE-R969~nv$THS1_e$JfbTkOEi2lw(cgRh_pKBbWmXxOw?R9r6+G2p39BS{RYA{L`jB1j z(jiUU`Jeg|)QSazsp*cu4Id{63Q&F-W4J8!u29LN{}zhMXXS$uet2qB+sDe%ia~QD zH$t#$A%jIN0UY6~k}wBBvZr&)szo_~B2%_589>if7APrz6~KOZeoTA4?QZ?hI5`79 z2s}S00Nu^I2jNf851$ON;l7(Y+j}Ry??~4>J%dZp321d2*XoAVp4o$S{cCGHJ)8a& zVo}tu2KTY@OVG#**9d4s;dT8>O9ylZ`Xf3g2Thz1ftHEVYxfo z`aUlu}Ob%tZX-0*suSrxT9b1vkMdga$4!zAXfSNJ}d~l3Z zXiBB4gB6SBcKlFvB(?W)t`M0#iI;=wksKL4PTWGi(&5d(`^3-C^ODKHCz>@I!FxHt zwv1KvkNtm$s=RrCALD=0X!Fn5D2u1LU?2xuE8vQb86))GdMhyc!G>w~d@CF~u8Aa( zBxUC{msLCStmSP^jP&ZES7~b|L!t>zD1WSs0m-XRAX428wOo|Ozhds8(`@^cBmNDb zisxc5Q+(m$9EaYGx{3snb_pFc%wcYeLtwg~+g_uY-y{Bp-SyCo!|uqR9lt)`zfY+v z&lIa~#8E!DbD60d2BV8a&`M&U_WqA$tvYy;fB%MGg^q&JA}``Kj_||Vo~M|LJT`{x zJ{{G#;vEIbNUHn8+A?YmZr8iubteu?re22(NcPN~Dk4b<@sBG^OX{eIMNO$#8vVLxqYq zu0j0}A7CHkvOwRli9TV>B7q7+9{wf~v97VVrGf5-QSIHd>s(!n6`I=(33chKloMr& z#EDbKRTG`{)*AF)L@cb@%uq7aQ74Xy2w_Z#cYZ>>IFv^2q?ZU)d23`RMMvb5VOsq@ zDPSReS=u36B2%f?il}W)WnQEisHJS=Yo+vcDMZWLCgQrPGI<%co{m^ez5>?U#ME_p zZ%J%@L&yqCMOCt>l&C%)@UX`J23yt)^J^#v-}Yp)UCY9MX>yuzjKYyGA`mI;;c;^L;A1ZD^0#!6e zFSf-p`KxB>eZ=h3i;&?f0)SY&PfS@aoVl&Z$uW%;6N9@zUNh2ni|foySUQtlK^!Daz?@rlFVj@P#1pVHD zOnE}as}6NLd3zV{gl`{soLS0uy^^pHv7^CoxNgOv;zr3oNK`|A!Vhzoc!d5> zyXNP5iMbZ0Sbl^tJw08&aosy2zp$KkgJJA3$eX3yh)nw9W>_OccXp~hBP4y5wKY(Q z!Qn(pfCHnUyh2qALN8j5@1yfikKrAiv%|wqv>cs}^B=L2+|_Jtm<<<1y<_dx`3Si+ zg+%(UXr1)787^B43>ssQ6xbnRYLHZRZ?$2I5k$13!XH%y$Ho}OJ1%%^E5eG z%;ptE9u4+SyGjQ~p+VM$#2;kMhzA%1)xVnupUfJ(m1!R8 z6)OmV5@|?2+rFE}L~D6jX>!ZUYG)s+5xKplPER zi?OV`xc=Ys-T_D4#Z*&MJTbc-O{x%r!WS!plP`h8j9`fs^-Iz+yi#KyP))#Ne|VR~ z%SQ_|%@(Bd?o!;DF%59%Cq%=8-C&06tv{C7!~#B)~PRTCa-?u5;Jt866lTT zNbtTE(*59H%j#Hub9b*^hYvo@#8@Z9Hwe1$L3KTx$x!fUhKC6G`QHs%p5RXa^ZYK? z27||&z~h?$XBHCZWx~&mmQjUEa7z+jVdZQF63n%A_y>MC>{zBvuRbx_Je&e16vZyI|%ER6i4W9+i6UWOg2%Bx=(`MH)| zriv15JWTFJjmJ7e#nr=n$R;Q0Z8fV6r`48BzF{>swvpiNx!!&|YPO+Tx}DRQ09V)C z)f1^|MOSluiJf^2j{b<*6*6bMZvrIM^lU|Q{)vi&#`h|TRZa5H|)4(XG zLxfHhDDZTiQx@EcfW`*&InlIf(b=sZWhlsfb3VqbKLehW4|9&kr)K?rtSzmvlZ2WOK8UJ%da9Ge6*LQa;*-}`(-_Vo1R=Hq*Nyc!*V z?!0se$Jx;QA9eL5=v)W9M|3i^aucG6j+HlQ|AUMg!vH@}p7ZbAIcy&CUb9kqN4C-pxyB=qe){=)_KyeCp zrrh5jL1amOi6~T>$N`hbEyXiQ7Q16nj`y@W9+7~AjPrrEjd7A=dOlKLDd4{tn4c+a z80tE(Dd~oaf0M?VTXp9x4p_lpRndMILKrV+PJk!`Dof&K~$0-u5P zugHb`Ou>dS{e~_ms9*)u$iECxW$H$ps~#sO&^nKBV^Y4 zBsTp&-{rvpR9nN+M_>E<=r|`hAU#B(`|j4atLrP&I2dN*d6`)*o(1{Ro#Mw>VF=C* zhW|}-^SdgiD(FqJMISLehG7PNd=kEGt!YAGacx|#hQ(LJROl497dJC;w02jtw|Gy; zd=Ra;`J^`dofrL0Xa5-!#?mbp)TTCf7O@nNU6YT0C3i4c72+ezK_Vf@p!%V#kIr$ehkcP z&LOyNIp@(gLw;XCgj^wLT)k3(um51$b!}c!YhQF$?50B2D)jD{`bMob?F^R=HG)7y z*=OjiVB}fumY>@pL}hE4NW#3z#Bj)9w8y)~W-)c|Nux>lqhm>0gm(ddK&!6waApr4 z*YH1tdK0eGDwOdy?M=X0Ca1sp@c^tp}hM@Ma@Gd#kKBTN9s{dnlQ*0&d5msQXgY8 zgdKo|AE2=ifelra#|ttk0fa$Il5r_-g$ri$Xb{-ZQVm*{-;ONld!QF~xImTg%0UDG zDv=HGdyY^8tF9orD(eq4%F`2tRKdvIGE1(*@$6QQj)rtI=3iIew;UB?>5goUevIuT zxCA856U-LlR0Kt{x5b(|gS!Fyb^GFHh65XeCbNq30fAzB-)*GM+6ihPpHYaPDk?q} zG_DJu8f1Rb(tC9*l(=siAjNJ8#KtXzrtOF8Q9xe~Az7pOikx*{*DZN9{pxD=fHiq;T#SZ^N9=+7^B&${9o? zB(JPDRC9N&z+x6)ZWykqC6u>%)ayPG0auU}zQHbIYprpfq+V)_OBR+u5C^=aCR|WG zyCR2KSwVR%fWF=BO4Yxf|1L|GIFg!!*72wI%Q^iAvXMw={1B*JfK$;0e4qAVMG14F zRHn+&9Y{C)_K{NRxV9zBSmC>ZE)W+H!jQieA>GaR6a~HedF7Bm(C4~3C~$PII7g!7 zjExp%jBEYgy=!sm#&b(Z?7P*~o96@SZ&<2U?L1d619Vd*5#Dh*L2wkm)w&a#wPZAk z4Oy>r&U!=@4=(rPOg&g_$)+2;YYT!-c6ANaN zXdu*0q7sdUWlg1+qX+KJM~DF>a_L2|btK}*+#E z!XTG{-Ues(d)j?`p}M^Lw#lo~Mfxv)yg+~N&z@WYSn>1lMk;d)c#b}V=R6+YnoaE_ z9V2k3wJ`A1Fs^FdeGxLLAcWkZWA3jK5Bm62rAH=-35AvHK1Yi_#O95irAHpb z(snzJANJJlU;rzL%bZ&#e;E`f%)6~e-gYK z(^hqa-KSw#l_P#H8SW${;`1MQai^YoezAyBCWO`RHqn$h@0Qp=m7$EkMXKaZF_J@4 zw7(M~18ktA6dCk;wQQhPW$OfN+j(BQp8Q-HU}Vc5Tu)BA9jM?{iwuD+K?dWok!*!HX$cjuP+{7IyuU4ZSoy zd2~ftjUT6u@gqDXH>}>szR>uSIX*B*V5PxMcPo>&H+!hlx#Y$QZbNpXre}d!?Z=p@ z1@Dz8mVxaH!xwoB+a|m*iL$5k98ShpRE3Wj0UJ(B~Kh_=7+vOko4tz8^;oKJ$fjhJz1RF zQ*b!5e@_jAfhQ7I#mg*B{zY>`j#pHICW?kjPQ5IQ4UOrS9|*x5^D#4e!15&k20=)6 z)dPwd<2S(#^QfwuWpudmEB!e_c;t8Gsrd5qtu^_t;4t{@;=y^h#kf0?ao@{uaYt=j zdx;`X&!q>KwyFe07-i_J-PNevU(Q%vLSd!fjo~f%t+Z%zOjfSqndlo50)~HzY*ZF3 zg~l#_yvgc4Z^~_|gzr%ws@@0vp`xr-E%zZPL!MfDd#@Sd1UQ_2{UJSEOzeX<*M+ z*@^H=^|Yx^qYZGiH~dE5UdcJ-nwqr=u>a9O75<84ghg7p{dZ`1Ekyc)Lm-8$lHuGX zL>d->3JZcyP2$F|7Gg>s!P*OFiymN%wNrcI#7Tar!0{SkR$+_>w7i)zidrr_4RPDI z-ExCtBs6p2uR1*R1Pd8)|83dsK=0f^=fVj?TM`Ehuhjpm4IiK zM$XUf;Kn7f?^1VQfL{J^7dI*UcZ` zN3czQLo*VV8uHzU*s$2*=lDnvVrhyr$XDp)xW~vB=l%LkJ?asIit@!UDx18yCs8cZ zz5dh;saYEV_~WKDc5F2qixC<~)Npp{|C^0<+75XA*^)ySw;@D~$wfX&$ETTCAn*J! zsC@g%1OPO!w?aV+(X#D{N#Ha;R=9S>Ug_5mcpD(4?BB@%VDeNcDd}qB+#`gD=wMGz zo~wB|)ofS9aNDG>9~{ULb$on-A0IiyRm=QJ#QAI#SD35b_<`lAl8JD$N?VMawhW>6 z(4^&vl$}BJ+5@`UKvi)exO4lt5**mN_T0-Us~1L%TV4)U(zU`3>G*jaarL?>AJDo8 zrMjR52UMoSpUPmG9!Z>NS*+TEF7+pDKi=S7oL3R(kM$o2qYl-mddZi)ra5a$r@%an z;KoxE_M47arNLk}P^#%3%xdU#g@lG<>#9FCp@|M#C{9-};#oiSsS44H#(Zh8l^!a4 z3DO{3*uNhq@{#ekKCkKHBQt7~5gDUohBDJF!?{u9R{U570^B{Z+xJOIHbTp!(`M%h zs@%ReF;2RDU9L|s7|jBDQ!s%uMAX;!mr^l{KVaIH;wJtpBw8#$M=*r=NFg{DngZJV z5)yP9^uX$-(miDi5(GGOb-!d9ZCO(PBfgIbQ{Eobsi%;1x{s+`PvpQj7RS^B7AO#z zr%0gRJGw2uuTU2Ii(lw;`Mh2=f|C&R;!(#D(fE>f0z68F( z)iKR3?wS<3=6b&%OVvFLNj=IO)(>mqRjjT5z%GiO=dSSZWsrHVi1-92Iar3x$||e* ze*Y&aK_(PEqyj~)ltS{n6yS~(sWwpK2oYVhu?}xz(TC0jo0}nKSG921yo3(5xSU!i zO-w@1iX&&wsP0u`cQL`CIuO2zmU4gZHhf`p{F>SvDECG9o9jH1ic2vPt zddKvHI~Ydtf{I^Cen&5``I2(PLFX1z7AY~MXUGsXW}Wo6TIeD;o)OnJZmytMgL@V> zsLm#`0NJbj1@HeFuOEP(GZN22qe{^%-{aqO^5wL|Mz2`zz?^`Xq@+rp0@sbBZY!6vOp_SmTPLNENQ4d(^9l5~WHPRcJgEoi;Fko@+}#3&2hA6CMy^%9h(6wM1r@uLJ0X^;gGA4x z2~ACo+V_@Sel2J#njS4KfwDx&3QV%E^RE>PPd#_nVbkwtv%QmVGD6_O%Qzuqekfvl zi43X`Ev&f3krjXelZiUM__rDNmf*$P74_GR2~)Kulw(#}%dnU!0pP|;nhWPO7Zh_D z9$rQ|XbpsM50Yc+lV`Z_+8CA2{;Vv9bM{dCh+^h>rek-X3`9_zINl zi}!fHLP=Q~7x7{lifsvXo&af3yduvWp6@Ho26#nCuPKZcAsjUyoSFJxa&oD{W1wa= zIXo=E;Ytj)vokt}Ug;2Tu4jmGpGB)!S2x2<#)?bqy1%w&p!CqT`&n>yU)pmtC9$&# z9J+g|u17O?+xMOyTeNX`M(j5+NA1mGS<49N8oMSgnC)GriQvYKExye#T?m>pW$|%> z*Z13d7kaWb{^81TINc9Do*B}g^3qBZsR>OUu8CZe61SZ9n+wJXO*~(^WAHabvcRvZf zj`tY(A21k90yu=k0w-$P0DqtlmtNFR#B>2mHW9Py;Qw2hyLYSTfjj*7ty$TA)@DW+ zm>jWHM+&eKw_5)yS?CZ1v6B}d>Ep}aOLd9C%MZgFO8F{thpK4e*^z>-$1$J_IfM%v zMfi!(C^-iTGG1V1`-+#n?)Xx5;23$9DMlZPN|$)HiHdtYW8(yNifi>vezzUI`_xM3 zd3yNAzIEyzapQvL(Y&T|E$n) zp>T=)H%Zvw?p~K`Lpg)Nf>zf`6OJwoQkEl67TD(fGxWEk3YSCi4>MX@vVyo07147;OrJm*vPU-}hH+CMhk{E{K)s1Mjlkdlgy6xY-Edx%K(* z3mO<_bbCs+>}?SJy_)Pc)`mmxX`F38MG1B)}IM6c#m2(+3uBHB*E)}4oMXg?S< zaeUJ*>hEJ(WE_MNz$-2YIvT{YayAsV@$KxO(lw#~HxmL2^0{NYH`r{lPmt@()9HspT7I%UXpbhH#uACK? ze#{+Al>|A`+&T1Z&HCr+cjr*#tJ9FRA3EtO=X7UxBnVHPc+kuK%?ZBPs^zWl+;F(; zuzF4Jq=Z2Fa&#wJ1R(O?1G+-O$GeY0X5gcJtm*Uy!bFbr^WnHP=eHSA$6=T2QfXxwRGnf_kxxXFQqCyR_> zCf_Jx8gRz^p5_(o;lJq(AT$%5YKP`O2xd^rGp&aWF%DHih!&n*kp+Lfi-iECul6vJ?;Fy2fpXgx?|OSV9e z$HLkaBy9(UBK`dNWdQj;5;VaMw*qdbM%!42tA`Hb_VbDl{*+NH$DY+}8PXIbB`F5` zG9`7mbnB3KGBLnZcFX*fi>{MFX*SBaSx{_SQf#hN;YgLTd2^E0#;`_0Lb_+yFeQ0; zP0FDZKYP3|giE|7iihy&`6dsiZn3AA!Q60Yvplz=l8~#ceJ= zlvuRE#ziO>aT#kyTMc6$NT($-H`G%CehGPNm5N{17 zI&Vv;M9!z+k>+A3dYFdWOg+A-g4X}1TH#0x7y^p%j1Q6~>6Vt;dh ztPs#SCQSuQxAfZ`5;0-%+!-5;ktQJezH9!Ia>IeXs5h&03b86coCsSM~x^ zZK}|}1>Vb2{D!C>{i5Bmc#|i&a%M_&p}H+_jdbL-1~bea=0sS6f0tQ(&!qr_yoMZk z!`seM_3YuxO7-aLwyq6J6#IxWsPrU%r_dgsloi<#N6&!o4 zZj81Z#y254@yCT+p~&OW$mCqLYytll0p$L(`B13v%dDV|#(E6?MND}?Q#x%`pj*5Z zQdtek_>X~;OT@71gHREPT$DNwn5Z=#wav+areYOPN|+oKW(Y!<5CBhtdSwc^6EHGd z$!6z~WwHN}?Eg^uewBR9J1lz5qTxC7;#d0aUv4l^jvX}P+?|@OhzqT!zq7ly2V$NF zD&2gfQN~GBA?*>(-dL}lJuBmuCX5yvei>zegBcNm{fc#FVjkZbJP;@v>|$-8Vk3QA&2)6{%sZU$fc#?akRr(Eh%u<J}t zAoNj78g&d~BSVp!W5o3>S86uPB-l#Jw*ORsv(E$ynqG3^{i)8C=7gtaxYHkwxj(ix z??hDCAK#hwv_M7>PMsq=6~O%KFyt6L{;b36Nv94qNjZ~=zMY+W2UGjzx2sPk|av=P zrg8W;e+OL3%WoZ=GEtqZI8R?c7NV>Rp-TJl_@dCg&8lKx!Mw|!5AO`Uw0Yj&&0iC~ zb%AG2wy^|Zn0)_Y{v#LaV|TD2l!5~KL%u|wv`V%ECYC(Vqngzoc5q0uPbX1K*Z{yW zbw@*uFO;H5CYoXtrOP;JJ*6B2AZlX)OA9ab?st+Q=Fb|?ey`EJs|ZEMp56B&qRwc2 zdn!<2x*dCw2MrB&o`4W43IS0=v#Ayu%gM!I^i&1e2Ioiy)A{b!3$- z5nmfg91AIoPz>0oFzYhb%BOW9$IyONJ+HDJ{W$VDpzMql z-b$x$e0%RujZIOuA|Q1ACfp|P6gkarq_Ixgh|d$#L-|)l0tp*dXaJ4h477oWO>rD* znW(pdh4lFtQ~GBzJc92j0nLR4&KwYBJAD zzsNF%v@D>TKeh-+kS2pA*8<4TW7=J9Gh|&f^(C2fE%QVY9oGJJafU)x&+@+U!qC1v zB?|i@+I-yP_5aWzQpr~UCz`fo#e+tJbdoZ2(Z0LE;g&Tp)h`!eVO2!3CYKix<0u@M z4DuU^UxMAsUPuiu_aNT0scuB9(sMcmlSU59PxMjdH;((p8GbzG+dqKWWKJQC47~i- zV!e=T`hT%4d{X~jLdq^*!Y(Y6JsQhh44@1K{86SNoE!FJfq?M|ACcK-UpAxs&9$Gnw=b7Cgea1FUEHo20F8v~ zqmonV6xW!`k4+7~qhI$vJH_b*Ai%OW@xl)oufA%T#i(TEBRTgXnIvyDZRa)ijEG;f zFi>~Jj;3R|P3Y9$ceH8iDvGWT^ZPJ0y3c5mwu*qQZ>#mhX32Tg%UaK{3~NOiO;_PKA~*#^tE2&oEFTTktC`<{X%9H8vjr4 z+YRAO9t*qo4j_)_vCN6PX`&()bU~gZ#29ax1ZS|B10hPQ2uVxcFPXQ}-1sJ37`xQr ztqoGUFWPU>$PbY(>_6w;96GNUUgB#;U^{E6oLs^91QM(DvHo8&r_n&~p=Wv=YwiKA zN)eh&o=~U~Rg2l?Fj=s41TUOYH}&&^8BKasDQ?2(Ar%PxK@sI)MNg5oFilE&Y{Nz9 zxQ0w41mj1{A1vVp@DsRzZ+7=e@{8+r@#dw&Ul!?GT3#Xrpi$4g(O+Lrl?JSsZbR^Y zy2nY^ootWJ{OkI8bU;d~XQ01#^@t7PqpuE_boHeuIcdv^WPWE?o2M5Q(nVECKVy)M zseG2_%r@(05ZG#y3D)|kc(0j1u|r_*$Xq2ao}w86BaWrXm+dfDBX!1+^X(tc4x3Xp zbkU(gX7wpXhOM@Bs}W=`$)#+XfYH3&(^9(&2(Zz~Yg5jPF&-Xv2axd`=3nNqQc)gs zmR4y5!e=hHv9UR*QLQu^}(f!$z{ZtNkOa3&W`#f9oX^!&A(w^*ekRBFk?H#5l3j zCS4-bN7tEZzH-BmbYRc$1Yl(54K~s-N@v^ZG)BCRTKXFv|J*tEhf|KAtCVp8f(LZh zEGb)89Vd~o^!*yzz-_x{3+q0^^H+{e*${{Dx-Cx!I!LDHDVjPGRO zHj(SK`}R|lL2py-XFV^pY%^ABw(qqM|Ko>i-f6c7NT_^whMy9j2jwvd}l~Sun%8qQnb%Ga|E?tnV9awqh)_Vu#Q1SZWYyTwsjbXg#g7) zRbQBwg%O)WMCldiNMNSB_sBSoCIlz_q-$ZoF9q2cF2jsqmtpR8ZS_s(( z7cJmkXP>eF6OS5&>pd5%PxBu5d@^fYZj@FV>EAx}t+oSBY+bL8wl4phRsMou^0K44 zEvxw6)$VlJ%I#=*01Jr^Yh3VE3K>|nes@Urr@rheJo$Oy8BhH8?DIGZEX5C|wU47; z6fX5dcj!z~XJ5(eKVrtejA8a~)GaaC4xD_&V?aqzb-a*O2ihYRox_8J5GMS`korZJ zYsV@GMq@*NTnx4Um15^3k7op%K}y3jFWlf|RLpe==S9hQ`Jb?w=-Bf zxL>L@OEDELN?qvP`aW)is*@tScBYP73V}1rK4qVIm{mN%xzi^f8$f80e|`DY^O+Kl zBeg99M*qCcn9SUikk7o$s1F1{UsyMTOXXy)cNb?5C1 zd>saHR>S0L2O8|MiZa0Sy{Nxq16R#)+h^Eb7$G0gl|Q^TCNC&1);QueCjaiEHfV0O zo@dT=?iQ;CD_`T3>M53*o2gb((OU_+&iKH=m|w9GM!2!)J+AT{dH?kqtveLxcI}(8 z1l%K$vNz`E|^nn`%(Vqm`hT z&L?{U$)FF{Yn;DN<7y_NO}0Zsgz?r#k{dD+A%0zb`l~8R0<>io>l=WfOar_}nZ1q~ zy2y~Z^3$y55@&?pv)Ev))FC-75)Lv>id`_Fu;(Ud}4&}ayAY(y{)f*0+JjH{8IdOX(K0PO-y z`aguKhTbf^j>s0HL~r2~98L}ZHDzJ@ZceWy-i$%X%8j$>8(lzccH9B}OuXz@sSo2q z*4_B94D%D2xvrjsNl6!WcZPSo-2D!ja%;LD)BD z9oVo)6-0Zwq0EAevJvllk5@pX6m^a*vO&Wq!NE|%u%b&UvWq1kYA*AhLyCSw@v}Sm-?q(2 ztUH8Gy_WQouh=DCedTp?*{2@1)j-btqG)Yhsq|yQgy$2EC!q-<)y1T6Z#A>go>`6g zLp;lbpLNYfyl&?MN}aZnutB0oD4w9TXf2gqY;6f1OiAoP6+Q-BQWzvs`p zI=Y$h1l)b;ip~(!eI{sW%_b%_*^u@x(M&%xSc08O?OlAV7G}^?6RxHaD;8msDGwE} zo~`wcq<=lQ=?-n?Biz;Tmr>wB>c_fl{mpNV;?P&hY-PVkh#aEIaI~V(5=B!mrIpCg zD|MI>X44dr(bv8*cDK>|*N&K7`|Ed`m%Z3A{e z3WDR~yxvQxF&KrU-fn)#J`B&VNpCy#PW1Lz;9pL|p@-vK@c9gDBLBWMkLa|JjE#Vt z@Dq9_%B+SW94GwJzmCWW;xxRn_FkXKv*{FE-Ss{&N)r0*oO#3+-S(#EmNbQcS;bWW z)X9qn>|K})&{kjX;x@J1qCGjDADKl``?%Jbq|)d^&WH-C%%v3xLMv{=1$>%?6S%`g)Bj5E3^d2njXmO}#7T=uQ!U$l#|7R&G0q#-K7 zP-pV`CwA#y%wn zVPIq0wD=)9sHfMcOMZh7op<7AFEtZTR-&q7eV^7un-gk30dJ@jE>dfP_xC1;rbREy zXn<+ZX5dFyd-#sV>?ayn|6N5>iBK#_qLVydghPNi{zmP3{Mf;-@-~CVY1ut*qIvc| z0QqcEdGGyD;UqQR)`?6g@zvzwwHLz67_>MHH_dfeogVPTsW=-V z=;yS_=9hQo^J?Cf(`J-{7)fsw8S#XZ-wUUlfD5ND;jmVav zmrl7NG4^LgPcV+EDUPW5V?bSyCxlMf>TR!Kt7KXq&o!t45XuqSefYHg1tpkfE?IxT zzS_lgU`8KhpPh+JhHd%!rHWO2G7PUr*5BCqc-mf}SLy>H0hKhHkcZ6~g7iO#%#&q~ zd74qr&F3wSX3<#!QEvbm_3(3zWaw9GNluZ09LU7!N86QSA9R2;|oig zXMu3o=kE7Bjva|oG9Hx7l<=Qw)L5+cx`jP9#e0|a3^vO=bMX9fqQ9#14vB`Zg8h!( zHxMWWyI3XxJd=5rNMm)7bcU=I-wFt=0K%EfiPT`DL6gMtp7`oL72g8Ta&fGZKKQLc zdyhc>@*6QK)V~)jcR!O(9Qg5#xp9s7@ija)=gEI$I(cg*6zNlVqgCn1O<1pKQJIuU zPEWyK(9SUNL!7mY-`h)VSk4SDWzX8;_0?cJP!+*b3q1ltG#2G_`|9>=HV{~L& z)9%=|IkA(8tw|=D*!IM>?M!TAVkZ;ZPA0Z(v%kLYz2DznXRSW#?AlfJp!U`V7gllddhGQ8a628IvsNV_G1Fg6O_&#M zFfc=={~AIhhkjYfP?V*R6vs1=n%_Oh0%i_Hc@^sn56XD&E>24aa>)0daO6Y}c=z(0 zDezFE^-%~sTNyWyz+Oc1Xz{;Pw&OK zmW{lcja)#}XFoG+!7ZL)a>6j5gvB(dByXz*2;#@54xtK2jASi7^|L@{&2@BPR8ajZ zQZ)6$=RGEPgzPMLf_i@2vt|N|CTt4{c<#< z+D(Mo5g}s`u9EA8vR=rSFMt-_`ax|Ih!i3T(a#dr5P)ky=RpuZ)j-v)-ik|xAC1A* z0keXBT)6U8d|NN|v<74@{#NeSY*t3U#3kl|_w$b{=Fox4ctG*X?^T7$F~*-3ULnEc zNINt4DfDYHu4g|jr_l6KrXYGiVLU~gOzXsF4m^5+?7pC|c+uqV;(~g<;TAzR1rP&9 zN++~Q?`6P^cVh!#mF9xckSHkkRA#Vg)B}t7|JwMWb>Z+geGs~WJEyF{iUJ#w^L8!U zkWi$BZ_4&R($I#{pg#md-+TrX3$6%K{L{^b>t>#4ZX4Eil+X~JdrF{xkj3dDSUa@nbbG)=JwoC_UxB5Lh5bla7b z2goLYG%aPK1zfEqkf*H~^FNS45@hDcJ3qlN3@vAG@iz&y>;lY7^@UXDGQhsJigYSs z=Tn%C8Wx6#Xe8_WJ@F!%6z?=`vKp*vdpIH3_5|n?#>GLB8rEI3@IU9nWQ5-wMAf-t zQs7ZbVN4mZIw`Wop*pkG_dIo;^!<3Y!!MTFg_O=R+t%mT_pO7~htvyqt-b!+KAWgu z!Q4D^8gdOW9V1{KmknuPCaxI#dC3&|VJIzLjtZ0HkAyIG2IWBw+favEXahd^<;o_2 zROQemRaZmxU@g#A*N5ZGZE{uDOK>e7Pz0b_-4I2J|7{aRwVnqatLY#{Rq9E1O);@V znPBxorb9D?a|K9>KzA_bLm)vFr&6pcJ-(Dz8Kz0rZJZpyR&QH}$luTsr#|m{61BeA zkjRou2t!D1s}W~9bxr!JiCHf9+jCq+r%B@1SF?sc+8b|Mb5`P2|%_KU}?mp~fg&lM9&>V~*d#_-3+``Vk zqRYsC`7A&cGjiAu9e?I$6KXY)XvO^S=Ou9hP3X0Xx~`1$50_Nz1fA3jWypZ!CK?5W zV#i9)Q8X4D)n5z3 zO=6|}Q${L|T{4x(7)ae??OgZ#^%*Fu0-Y zT;I|%JS^7E==F)3LtWIu976iN*#W7WAFt#$El(Z#w5kv$J4thnOW-JBMBvS75`~Iy zO)I$+5WOMPfqGteGM!%u^#mghHu14}$2HEY3ossM;Mbn-{9dB6*s3X>8ajr>-n3~mgY>r=pPhWwX{(~b+DMcAZ~1sqv1E-l)2dJ-0|H@gg=yD)Xoshup;Cm zTNm*y$ViEF*Acq{&YtXrZ!osB18tBOT`By6vzQ<^{eZIKp|TFwhK>i2JY@g{&PI;7 z$dqAIj6A|!m&pPy=k^+buP=e;reo+8%-a7`T;=Z~=4LNLllARmp3Vexva>A}89(^W z144I@xk5*Y_fY7buLB0Rx-WGGxoz3Sx^TLnUBt0yl}x%Ce^7!jAsVUGeuGiR!r&$b zp5q$A!^>_%caRKqw}H1E9SI>;`maP{n48+Q^R&ct#09LMj=xD?@_&;5PW|4m?G_u6 zM>c*Hd^0tmDk3e_62akPGS4*6KVBpUclN(lkH_n8$;eYC+=D5wa%y`1L2mtZ9@k(> z>HUi$uP)CT16#;b;tQ+y!3M6L`LOHupuBu$_rx z4O&gIg}MaCR1+>d1d{gLuF?gv^n6YcCs3B@8`K+CmEWH$X64XH2_Kwh!UvC>X1S@x z0gzxx#o&eZE`2RiJI4GmPqx!0{l(u3v&Xx!aa6Fc=Pyjjk<3N#_4*R7eiV~Yh}HV8 z*kmU^^~C?`%;=N7W}#6!SAF%OtEEPV?ZWwsYHfnV376m&jb#62agM8~b4&C}39mPK zm3a#V+_?@;W#;DfJ)y~`IQ$_8`vzB;T5*qrE*~nyBG<8NJ2aZS#5nm6v4S$vP5xX0 z%OpXhc5f(80Eg*Pf}Y9JlEJrs8kUKby*)6<-jXZ;OO^8AANhibL4gRRA8fN#V=mxy zOctlAt~qGJCW8Xc&kPlZ#SW3ZkFbTl!H-7aYFt?*f6KwnAnCE!iGJ`NABJ8dM!&%DC>~LOZ3AD6bF-SkH^V-a!bd!BPP8 zS8|hx6-{$GW!yxXIKXvNb%ju?V`MYv`%4g_xFLxz5fJ7b?75*#F_-nl~I#{G~=DK|u{~|}%vZC5RB-bS~MmX1|ve>m>F-oa{u7HUZ z70sMIv+O}cK;{#~S0mVpT3yBp5zc8|_f&5saNY&pPkLsc zpq}3&!K$mb{RQLuc2ze=(DyQV`lzrQYP(O`zPw@vCrqRpbKrBg5g|$`sh&%NOZi@8 zkc_3#U1JsH!28)qF5!D3YLMJPQo}^0luWv@yo{SqLQi~JP&Vd%Y>~!vxgqI;wunJ| z;16`LQUErdT+(`l!y%TcD-YEN0Kg6A2_84*GaiT|#$(nk1#2l!@>`^TUZwMN+k;AW zp6T|lSI}?#31+MKLoJ$l>-0c>T2&}yC-h2=N9R6om7H6ZI0cXB3S%IG4e~6X>{6Tx zk(bKEnu<{BFX6UPV|CWyF;CY2()X}5$X5K)JE{Mvlv0h}%3On0x*MRP#Ug#RK77c! zT(qDWS{Yo;b+c?WsRMz_pjl0{wkbCT-C=my8LgSJBSkl~7t8iuW(=xozRZINAQ?0@^-tqHkIjYeiv3)FLjgDsD9 z>B`D8TAcTSi*IU1+InvhOUAUoKJE_x%fVS1%-JSj@#+jtm3&Ri1b;hl)2JQJo9Vww zh^!Lo?q)_k*p3%<*>)8sP{GY{Po0jcwkXNtjk+VAI%C?p7PS(`N24PS(GD2~*AkGP zLti77L7X|RFMU)8@Jh{N_HVEbc`1Hzroj7xI{-1zDLcXP1f6!Eb(is-q(_Z(PO@>v zIW~q#45Je~8P*{2v4Vrb*>5fB$b&d#Nlio?_Yo#!>YGO|vjol2=>=um1Vj@2xPe%T zzcp7?hV2w=ZD!F+CenvO2^rbL5*T<%Ymck4$`rd^JpFw@Ga;IWBGQUM_JJ_ItrpG| zA!c1)jAjB!ZG2JsrZu)WE9jnuif}mEDuU!jL`pyo@SAJCdVq&afwXw32d?A;@dCg~ zFb_oK~P;l^~yN}BOnqoJ}jBmhvY{M)iUMZvg&?k zml>kck;S~FxgXOt#fOR!mo(Ff8A&n!AFiff5GP=?DvzOr>*@V>lpN5>q|x1T^t**k z#s@Zvb4vq?Occ#hvgsr;2BdaJZT(`f_JxV?$oz(*O|nQM(4!xRV0rP-w!;MZyQxrW z>a!>9ML9shOGH6D7};|%IvmWpNuZ!a5DLp@h>h_4JE9`v`L)CoteF?G*@sUC5m@N} zygNodj=keYk)a<4`1ksD?^n}bE=M4Y>=MuozhSSE>x?(h9{w5y62uBwm?xoMeTisJ z_NP1ye@emL`NE%vwpc^2d_`25_|i;~F(D-^x+H7XlW&hu^G9%6IOq2eyXvokN%{hD zg99QuaQp;FoQIRGzhrQ)eEmPk^Q3cYOKMb2MzYQ^6tUKEZ1+o!RIon{BS=ZpCk!N> zex*<5QyH6;Qz@?E%&ha}gwsF~-Dg&hw`e|gNENG#{vE9I63RlOb2 zfAcaNi|(q>2BltNXr@b)WzrVPDPbF2XrVx3AF{Vl76a@tKw$R*42_*4#+WjK=$g6B zW>e!cBG0IigbZICM16=*3(q|6Km@;Pt9=K%2i1r*YUbsD>FIf@AUS>D1(|2?VlA*Mgmnw0~>TmBwpU86tkT>yEhX2 z`)+HT*f(+{JHxG_$BkzGJ(-=4;U|YZJexpa@;Fad|IXO3Mk^ zXMh1Ma4Cofq>OVc-v|03K@fcz4wWewR&)yuESK!gha{?E9F#KlW-aiK=&BbVn8Aos)VE3`EaiB+slWz*iU!L05i@if$dF21upd5PQ-C2V zf=!-Q$ttP8O9uX-knSl=K%aN+)&R41vX}hv6Ktk~OFU%PM3_^eI$7sz_l*(8UHnx( z^{swC#bza~L{FbV$fAHgbnspGmOtZOmFzsNC19WyM$KA6h7!Os*_Hph0(LZchqw=} zzA&H~M#FWFOhClEB`2Z3MrGLHg+i5C*i^{J#sZ?D2!=F)L50XTNru$$Gke?Z2Y#fYvq3EZP{4X~1 zBl-wse77L*YdIR;T9v z9a^GTf>9CrGpf0k7%}SP;U^1!!vTEf5SAA0eJMC#71JC3k5PVFT!xs2I-c%U`dDgk zCxZtRdwXAoRRe=$s8XA_;)p_7{M2ckUWSZnUy=$H;TY-YZgMg;g_J4jh$zmFWLV|< zuSX{A3L@#QrTVzrvI)xsi676^QS|2hVm%G+nRe+ven(FB^dP%S>pz( zjHl9N9{*b$-#XBcOniYAYA>z3U4M+Ie;gv``lYhR59)=ZkOM>~%#Cwjg(=Z}vBfoJy4=-ROjMTq8;6Qw^lT%9 z!F~=|?3>GF-g%;-%BsYaU|q zw>48_lsNe$dFRl9Hja`Yy=9q>MdnC^*75|_cAg_ib-%^pCeXzwA`yD7k`D;)0#xE{ z;jQOV$fQ|sELZ1{X-_i(9eE-fW5H;}TWzmtc9yME_>->;mRyW9D73P+jcG*yqu8@9 zVpat0ZPE!ISis~gBAfbqxvZLiofoWi^+w?4;sIF0v~)? z@!O-3#2=na6(sJxgLoFngA9(Vuv2YkX~6or_A(Le4$2xsxGza3IL;7|`CMRR3cl{b za5SaSl;2U~&$*Ofei-Xa z;jEi6;`-NwM}j~OP9X>R!_`@LhEW_La@70 zKkWd9T(fpNe|Ms|eV)-{tFt6)IsscKU;qdHp-l^z7EZyT$v1Tda7bCmJQ`%4Dk;9> z-GTf&?k-p2Z)ysL`JK@$7X1_`w53vWxYFo`xDT@=7lu|>Od$Tm*zQkEO!gYC1jOJ+ zW4HtL_VpNT7OyiJHHuKs!R6|HTQH>@OJwNsrBKi0TdKoHuc`ILCgb##QwMoCEOX8W z{9>xSfs3Jl*K|T$lCt;>?#C>Xt)1Rr3=GN6Vvs^S<;{LJo6idd$0m~KoAm0!Wiz(J z&kyn`Vh>^~nQyajUe_N01IZ-u<2Y9bw=;ZO{y))~1nTicH=v`T4Cp)ix$9hsL7&RN z<_31v5G4R75LRjqQaXe5yCiP(V;$G>(9k90IdV(g+E&lvrf!jFwG@wdfRyhiR&YWn zrRiEUxC#}HN`LmL8NI|JiWhWBlq(0Bxp^Coo4R!$Su=_Q^KzTqnD*Hh1_@C+6$kG$yJ;eKO zg^-p>q;g|X2PRoYe+0zsI^SABv%#pm8%(>Ipfv(FT-}DZen*>NMYJ(O+`rRM*LB|~~_jxV(Mvk}m zhH%H25#9wGSD4?-t<>y3ukr-@!WNXz*lliso*$fokFCracrj*{6-8B!E&#i<)g7J| zeC9(OYFC?}=p`+u_H;^Xu+0z)O1dj03oD=_?4c41P|5lik52^nzHOb`6MEahe;)k# zDX&bqMy0MFVFM;8C|QV8*eAu>QI zfnF*#1gefA_)b*-6ZBHeNWLp4M-=LIM+BLu@Iu^Ki%LjZYeyk$zq_JFJr&)?db5i1 z#29uN}^hR zLXY78Jf%(ILqf9Q-Ciz7{w_3~Nu_jr*H1ruGpYUwd8PLO2U>ZtB8(-0DKTYP<5>PI z9&b2(&qud9qm`u<7oSRo%02q&53ejiZ#W^~vDflyw|b8LPg^hg^X(?5t)2#IeKGoD z4qq-bv~X|tYqV!F`D%UP(kA~;cQ?9Uq6vQt=aaHUbGpwdw1?0fM0zT?L^$vXu|+E= z-G^B!P#huuM~3t8{m46c`E)+gf2TF2bO@$YgH4yiCQC07W-3WNgZ~XRZ#}qcJ-9#M z=u+TX@1M!AUc$S1-|ikQPdcUIrz&tJ7!&}4MKMa^AKVy>_w4AT)DZka7(A2(O72h* z6FhZK$usW-d6n3;V)54?&U7SYOdT14Uaq zoi!cQo#g|+?|51frP?|Xp5WXv+^bVOia2`U*wnR0a_PTQWbr$9v7%007Ke$A58uS7 ze`5GPU+V82e$XddVbR?sMtbe;jLSu~;CbC2 z-ZODyVBD`(r|(&TM$a&4Oxf?`UCuXdGnNl#ZS_|#+)ch{osVq3_n&^l9~T5;6XLhr zc44~SAA>?eClBW4r&dmODk3eE={(tCgZ6OA!@=ZLg%^AbB$qF-LgS+GMaU9)N|z!F z&SJ%{;mblKyZ_=`c5@iBuB*ZgrXb*ZNNNdO0(W{56$RLNYJe}s*VnKcFSPzGVVbE! z+_kMt_{o*O^X{FH!U?2!)ZwJzxbm03j!et;Bc~Jj@9>tl6Q=OEwFmZ%eCCOKb9_^$ zs3d71?jMb~!E$sY(=a&7^|$jeZGWr;7#gma&?!#@P{(S@rLVB}Ec?}lx#NO~Uuz4l zM%gsBF~%R!p6TkLnk`v2tsXPnvn;Qvlhim}efh;L+NqHa-x@`lg0$Tw&oMzdQVsn% z19RvkcS9N6Xw?BRGJ(cHE;7!vF=tmfH`+qO1QT)Myu^v9{akef6p$xwW8p&8JFnht z(R)UDerx%pcYVv8R|zbB%L3auQt*QV?dz8vcLcmaAgpnrb#`y-Cm+kQU-w)$|Gd@;DV1cx3!eejyUmj&SA z#CC;q<$PeT8oJ5Lht)Q_L+X3&pxk`40KvV2j z8oqnx$~hrh)tI$2{pf0^|6Zb0f@G=3UZR1`bntJ->*OlDEhJpAQFZ=~bLBBDwrne> zi=0gW#ISr3C3EXl$m!t?MF0zotpWSZ3&k_(F!4Bi+SO16K@}L&R1>wsNQUYK?hsb=!H_M~Unj!` zk*CM7q?ULJ&?S&Tu;NVEf$D9Z(X>UjrDQuwcCy?3`#J~#Ax)2P_T0z5)g#pX2J-gL zD!C!m=spjLAz~Rp`A>A|URLgoPy4=Y_jd0nj%#~7j@-HLOr)Yr?Bx@=UKdAg^||@o zY_Y_K9p3o)FT#1b-<+#o@96{OzHmxXW~O+CT^}6z`q^GHCji2*<91`r{cwcbkAToP zhOi69xdJy(S$wa3g-8z#lcA&vsDs>O8f8SB5fXC|jTVlv3FL2*2N_HV|7AArYm$PE zON(B=E`WXB)=CGqvv(town8y7BwBvcvgBW!-6!QC11rES>_&1mt8&nv*gJ2M&SI!@ z+sm{E^xw$3(tUNt5RlXhl&Kp3{j#O@uQt0L z-vK0OsBe9vBervgswX<+5?&1_Zg*gn=gz4Bk9=bh92Cq{qTR)vwh5B%wO%k!&DF*% zm&PtTEU_fKQG-*FoE&@0t9V&je$ct=9ty0oX9CNw{Y0Qw>Ob5RK$P@4c1f|fzCc7~ zB$^IJ`3h3&jG1?+uY6#lG26reH9~iC_p35PXDEe&m)3gypbiq!H@u&|)ZYCiSPdgE z-2QOnOP1h!rKCODaU=G1i1`GhGHbJ&t)bNu@@pYcV<0kin-#aiF+VonIEn+h-7Up* zQJIc5|AK5}Via~h6pu(RMhy7B;5@yd6-*PgVBwV5Ju8RZ9IJr#9u$t|`LGK4XlT3$ zHqkhe;g3VgGr!ngQ6ACajP4gbVYNg|C59)`g^k8wwZQn}W-gssPGeb4QO@QSR9%CL zYN3+uD`k0}=sRxvep^t4lhleRI8ku&m zGnrw~t!ZZpR=Eno_K~?+-iOCd8rr-iHg}u$1VSEHe1Cj_{d0Czc|l9LA8zhD_XOVy zLPz>TFlx3}KTv*A*4^{}op$j1me{}bL8fcTE@n>;66K{FHD9qR}mmk?P_f#Bp>!AWDkliLdpFe(fLZrACskK4V{98t`Bi?nbE_Q`fG&>BOP#pmrF515T<@vYB^x#x6(U z-8kc{akb7ScsoiJfYQVn`)Jp1%WYi|RRo#K?cHG?F#_j8%l%W?Hr9GuJ%>$5*1B8b zepcP#!CMTem?d4?HjU`@+Vr0YJN{?I$ zFKoQey{L3a1s#MXJ>Uq?E0FiRvE@H z<_g+H&e{m84U)3};QOWi?&-!;FsszylzE{nR^W5l(Hp44x6)by(%|idU45!Ty+ibH zf&ho9zxvZTzE>nYL`ttaaNcjQ$%_QPNo_GDmaawukR$NWHrrt0 zbVb|+9PjS&_0uj_hy>xtYZN;ml+vR43r~kP`k4$h9s3X5Mu#ckTNd_9YoExg?hl-0 zB3n9<*A7}vC;0Fppenz(^Bri;<7=)+$sJ{~xbB^~0Lg;mNBTH~}B%rTeqZv?p^303g-yH1`jz)kgh;S2-!Mj}9OmL5briDQE zK0}}VOMalxx{UfJ*WGq3>mwVuRPyAQ2dWR{#=*CD^`q1bM4EklvtJ-L0OZZvnBmZ@ z(Ap69T+kpBF3Tzr8QvF~#lMLQI%8R;8yd$M4ZBzjL6FYhE96D6!B~oFGBCc3AC2UN z1xwT})#}(e#;UkguZ0%kdtc-B%c)31O%b-5LgcGG~P7Qw`>hoO;$)WM+H7x zu*eU}(!TJVjStt=+iQ4Dfet@16ZH*c+v@(b!yTqLxY|%diONpKg9+Nqe13Vo3+GaRe#K*^Dj12D#iPM zdXy6<#j{=E00Wo7nibm_5 z=7c>O5sVM3*E$Ih4YiRCIJbB z9EPRf_FViL$z`6<>O7($%Go$|)XrEXAZ-Xnaw9hT1L@)e%0J{%s~JUyTpKsLHmvxv z{ITQH9)|1ESH*;3^a!UY?U5ZKcm1U)#ekfgP*(uNEXx#)zs^ZN>;3M0Jlxa;m2tH; zwUautaUQ)RNSgajDRQ|hb3vwHgodBKXhZQQ2c%(CaI{WUgiwl){GjtrBF!_6_<4~2 z@#*q7EskhaarV`Is6^KK2=@3j(?k`*W|feVKO4eMKjn;h9flBVMeUe7cA%MFURKG6 z*J8l)H91=JVXh~ryCOjWrk`d`T+reQzqgeZOu!Fh20XBAU#H6(@x=txa|c`#MP!;$ zN(jWKr|j@7=YHdn+&}8QtL^gE@#?sGd484gGlBHet@G8y~L_Dz#8Qvk9U;+sBc+0SEApF&*{fL;eUh3;6bB^#r zP9nRo;UKGX`M&!wB0YWVATMu+Ze?`zD>He46KU}nV%}{mcScdh&>P*|dOO;k@g{IA z#?~EdY8C6JdRh&6d~QC*IA&(lSIgyiRZpdut)OBhmea%;lnV8QN(+x;9=3`aVk^7+ zhkC8*F(-Tc&Ya*rll{-(Dvd#=`-0y;Le0%66(MhP`ragkt;i^tuQiDsC4S1P^mH=* znmKKpJ#Az;jT_tk=4!=63Z1-EC{9{!B4ii4Z>^v>3XJm4x%1tr4+mMYezaaq0D2?^ z?3??;_5>eawI5<3DZw8A6;WX^+e$87-*OZwV@CSPVhnUK60xp)n1wBt;YhxT-8+f2 zL2zy%YY~vRIdp5nHqldym?Y7MOGNk?Y|uS(g(Yqu%`521K)OK zl!h9+CmovoaV9W}+@AbagwZr{RL3YXqqN4wnNOUE3v9cSnq{#<5-OnmRanlfTGAC6 zlyH%icOIKjxA!0H;KX^Z3C}`H?n(tN5}Cg#eN7gSNiW8E6xWcm)km)6nRF%LpN4qx zH4PxmsVGmB`#61F`co_I0sc8Z2Op>mO-=g;Rf58%_13OUaItCLxh69Q!&MCOBCnZQ z#U)9IWPkbBIM;^L8mnC!HRp8jw_y32up9emj$f{=nlL?Oh|W>>ihV{ZsWmnB4XHR) zbO*k=Q$kS7R415H?NO9Tnqv&Soz>;#$>Gr2{&pf6KAuNh&%Ml_BrYD5@mSyvf9lE=Q+R#xk`)UC?_V}DyZ_c+Y#xL-pq~|uR3!iK zak3C^Xsqf1^UFNW*_0UYO9jJ-GS;fV`(CR#A_D{C|MB-?N{}CcKP9l5&lkH^S^bf} z?vi)mkwf}dbYa4oVMf&|s;thL+>$!&5SOJf#x+UYFqAY|4e1<52u$}Qe#4_fBAd+= zSuW~hAh-$kaOANH^xsSJd$|se5{Ktw9W?$q#NYJCdumzzv$LJb80j*vF!wY?${lQ~r*3m;GyB!Pn;=fggQK1fL!zf3~2fI0uKH~hNY9YhK%%>Fd7o0N+>_P7BazZ2D31jHobOP& znB(KX(UoGU5ECqk@b*W_kKYh%@P^z(LM)wAjr>YU>Qg<%3KAMr?8ru`aV4*an;bzR zkD5|4+$5azpPa=Sd^Az>MSlelnJ((pbC&W#X6(i-S>WNCBJo=#qVC42Ewcu*ttyxF zL=}?VJ^>|%MUpZ*!mqp$tV`iph1rhZ<(0i6U@vO9+hRd-)CNW|vw%AaA zDi@sus^{(3ZnDUsgEP&|-1qeMZXe^eL_x4JMK(zsgt5C-L!77$RqJTG)EeqozG+{1 zjB(syvFN>g{Cx_HS?%*`1ED2S)YXZJMdUdK7HJQm=z@Totbh6-5YC`6#D9~+2&~$- zXTu{PkMC%3sdA6Q#6AN?vGYT;LDUMf2_6Ic$|7>Yy)ZtNA*@Q`4z3hYbGp^=US-U z1-lLRF>E_&oNrSn$gUN!dBwjv{fHtt?JH#9)LAlnmVC)zN4)?)(3@r4Ay6EA^0>MZ zzFV57SKe=)^nUnx|IyC=>=Vlg7pAPc8Z>lZKu{pGI_PL8CkKEes$?SU4Z2uUuC2(@ zCUD-{kNY&hY5$O`{OLFVqZfXp&>i5V%{8`(#{UIu`H|{7|Lo%@#2(&Lv)yiIg-}_W z)zXa=eBM+fW_WW@9JM(1B+L1r!=nM{==8sO+Wedn^R9Rkr zXNQzd{;wSiAr${;VuGD-1kzr`y?0~tEYL<}(QRIm4>26jWwv;`*6#9xH9t@Y--Z!f?VS4CuMfTA5<67FU=k8vq>>b$68GC|mftCo z+eJJW``RK$&XnlDui+Y!7fg8LiCrV3WaYABi2wFxA|iD`3vw4m%+_HxM5u*^7$nE# ze75DpnJaWb>no+2^R3$v5+DwJWNQzx`du#HxgYc`u}k=z2)^q1Hw_lLrY7suUR|xT zg_2|mI9etUi9l@2{(La8^{dH>tjb=^B6QeeF-01mBY#v8NeRKoXmza zauwX3xfJO;S-}?xy?kPKyoKZ&Uc>+N#_f7sSs$_SX!NDHplp)2V3z9Zws)fQB*!2& zb)BJYQ~Zwo|8HlLE|NT~=H%_FG9#e!H+&X~2;(!2R~fEkK`@r0~)cbv(~5imYsK)7+%Sh`t8z~U%$ zMG`y-^-;HM;WQ&2fR}YK&Xs}Kf!&vR{kcnI5^cViJ8HeYgUs%q8P0W!)f*oG=G?b( zPF0=lmh0C+yWRU8a|f$E4D0hviES7VOA$#yUwW=Y;rPI_y5i>#Vm6{O;-f%<)Ac`s zQ?`O{Fl9`|9d<Y~YgVT0*FaC7Z7BDLz9o?7Uy^Ed zc!7?YxpHrJRK000INaXr?k8*K!MB(Kvg)ljDVar7G!RYp{D|{uzV2=h1>(3s(yv%e zLva82u!H*pW=gx&S2;?7Sl^LxEb@g$b4j2UiI|74A-g_l+_(QHmuP?7dj}i7`Pbgh zLw%;>S!QXp&O-oRHYaQ!?t*~O;!v~34#1l6@H|4l02t=`Q<1WeO!JE)4=I4M2TXiQ zr0UHJ(%JEwpjI}vWKcf-I~$cHS?kSLsrJ78bkSoHNfJ?L?dD}Ec$((vH>6HpPd%^_ z2+PHd$+KlVYolT}DTq)A?~enaAyIQYb=%IUUUz*k{!$`zXvTYx<6e_LTH&grrt|V* zvSOLU*0`>{9BN13_wosK(0KjNlVVl57b7gTwG~j%R`3}YL@fLkSa<>_)aDB^wlYTs zRG9)-F6_297m*l<^=G@-^;@s0Rt;gUd|uhlk(*iNzVVD2h-zAMgI#~1Zak7NrYdZ& zcA~^nI?Pws@+Fw%di{fras*y7QVe*TJ`wfWuh-n4PCqdp8mIU z6gP*n-eI~30dMC!8-Bk-q>C5vVEKwL5M$Ikh*878nusA9QJc17Z%$W1zaC$UiF_9KT3m z5#RWzzElRPl`*_(p97X@b$p zVtYZyFt2h}W76mBekl0G*6;(pR@YCm)o}DZc2KU*%a$Cx{ujrfw2e{dKysmm0{S2+ zZ50~lOvWxZupo9da31oh#nyyrJMt9i+uI-SGolXHotCEQ6H#-x?z<2mXr+ApwNV5? z$~qB9LQ|^%AwfDd>_v0@X=(JGe}W$)Y>Hs;02z8)&K%xsD2&T5Vm^#nUgx6%`<1c7 z{jq}EY2Rag^%)n%)y~)p2o}2M11W+4;&M}XD>RNP4Lo*GL3FHGO=ocT>nJcM#0eFj zeyxHZ>9DU{)HUXxe-6sl{s#|}f$?`dPH@?q9AJX-I~eEVB`Km7cbg+Vi0`xR0NsHl z*zu`$_*t{uxp^YgV^<9%tjY4a%kR*?dx_0(*3jh?o9}FJII_F_OhbE5+>hA*4;(-P zU;`JA2;RTdJ@EMA@;B?cm^IhXqwx#5(?LG)=Wd66zU#dvhB#!fCD4fQj>c}k5Wn{@ z_i+lMkOzsNl3KU0q;vwr4=f83=A1uvT|5D*!EcCbK!z&u^t0YS+icTvdyWMAoT<<= z*1^bMO~n3)q({~Zb$lX#R2lq5?6{x9_1}mWQ{xPMUeZ)C3fzN1K-~tBJLqP!6c`B# zwOLQFeg9{}^O?=9t_Xd-7qTwz6So}?6fx>x%oR2`H_qzac`uUP^gU*Rjn!1o3XM~r zSbZ&ux9xcV}|{e^B}% zVi%70B_o8X+-?f>{b0(9<;Se2>njKRLkG?)_f=$j{;0 z>3;g!Ncx*iQ?cm=NQ+s9I#AOfU>_*X^#zNgJsC;sJ5pY8l$qsUI3V>Y`M9qJo9&1uOmJr;c5MvSdJZ65gKD%~XZ z>!>*L2%)~JMmYb6+Qm>qL$1>1G;G8Yzw$emqc3|SX>;YlJm7u>p9-swnU@Y50y8mC^DnE981M&vnZEP7R{YVm zUS2STRb+ECRh8p&X{@UR#!rvPp?qRRmOndS+60vuVabc_w8A-rOb!OX8+mAuH_&O2fPS~Xsd`?x= zA{NbpZ=sp2C+&FX720j@erC765~_s`cL~;~iv{kk&YRn~`C$O>r}T|VyFCn&`cHQa zpD`3d3#MDaeq#j*eS!4lR=)X|CHDR7eX@T!T#K0^7#4ef2fZ*%ZdV8bsDX=kK+w?S4py6? z4NnBw(g>gGTHSECF7_$&1BNkhO2LlzD~w zdH$m^z5%>#SGE4UQzQK?gS!qK#<V|Pz#LS=I@qclv$s&KxiqY+Vsf76yZwPP9Z$#jZF)~>1 zaKrO!aU)^Q@`0Gn@wA~5o|*_xWQE=nkn2{Ft{&&|4T0fnxfy$@**Tv*nzfu{n!=$* zdxX{wPptcjAGJ#+*mgq?+6hY*AvVu?)ouwcYGbs!lzrUzyA!iV(Kc5oEmb}9kDERq z0S6d*B=3VZo%@2G;uVG;Hf5Us9S)>sP9*aL5tFmB(3%j&T;HK|MYU@$U7v<<)pdD` z((`NLDOd&*JTdL1s(<2Tw!4{SeoL?0@blN#`K0c68&yDsW^~`ju|#d?ie`=dW?%*q z=;XE4GAMClpQ>K%LnGCwWqY-2&_h)z0>^eKWivYHo&Ik8XB2Ox26Rk&p9`@E&0|_- zaZH(Bg{&0Z*4_X5aYeNav~17SED2nhk}JgQzaX0{df8`oYm5J$pB<8`#&@9ReZe9ZLg30v|F zU?0xuAN?l``J-KzL0|!6h7)Q?Iw7D01QOaoO7>P)$Uhy-)Td;t%<_bp^~L&N+~$kb zyXQ?Qx7#}usHKepO`&QTmM+IkU&=)~gD)0<7Kyk(XuWsS04CGR&B5&s|Fux}KFsUk zN$NB%sX^Bukw}lHELV)X_tSp(6)$QR4J6nYdwU-(akqXV%9C`3FAP!~H)Er|Rx#ZF zR2og1ubjNW?f)IO@kzz`bh-1|iBdPe)kA}CA+iBdxYs-Uisz6h0a_Rc_Fj8*qM8GC zj?Y7vy32H?C6<8|ZkzqtlNBIM8!wCRk^i6Vj`4{4yt7YyH*jVY{b_;Y)>6GUR^@hW zaHO`eAu-2qpJNsy~ITNVqY!P7SI|Vz{VcWmOwdMBFY}1#0*Qt7Z+D*2RiTpT>|O! zydU8`%#&FYQ+pgo(n+tT6O;TrG)5XAkM}VtIOMgr!X(?XJ1Y^Kea+6c9l#w~=jD|# z6yx0o`psR?(9Q}+ItjKVj&VK??(>~z#(Z=`U!xL#ytsf9`oHl;Cd!080HHt` zH>vySo7eMH_a_c$mYf~q|C;;iptzr=&qV`)Kmq}R1PC5HI6)Q?Bm@uc?(WWFNpM?S z7D7UBcirF)!JWn39TwPIp5OD{A6Iqy*45n?DK@p{ zzW-J(TF7Hx(svIB5j<6N0-irwq4Gc3y0{m+4XKDEBd#(J{^6-HoaV0do?qj}qFm5c ztPyhd&-=Un}*RA-c_dQcolJ{$v%dj)bXV(@|1U+A= z$HZgts`3#?<)|EzPc<}}J@RS=LrOS&Am&ox0P5>M`~jdB^`roATG60=F=%KfDLB*r%U$tqaGI)q@l7OYv)c3j*L1 z%yw22^@c98&5{I7{%?YmCNc8Ja+;#EYJH@Xh#%0`SC^wkg1DY zeV&=`h?@j^u8q}IFJ}op0+$u32nk7(n-2Fv0jX|anUmmcAHKmC;pCFptTjKP1;DKy z|5$K-!))>@5~I&sVL@BUE0tEhKzT0A8Gi#D9nUl*mLZtmq}i|3HT}2Opl?;c=Toc) zlgKNMzJkd%W$Qy-*p?pJXaG`Wx(j`FD$1fLU}OCkafTgJ~&kiS?|xj3D%x} zmrj-UzO}C&^lB@@j{yJYX^IgwWw+%87pma|RSAa^9BOfI|Ljs{1Fh%S*Ri7~s zp=HUCir-v`zj73jiN#!%vbBYZ zEhHp-1qs;^o@t0`5yzB5W_qO7M16ssW9@G!v_zv_dh|PgGdbqzD?L$8mH=a9fEdl1?qXvYSG<`ZnUA5;5| z4F7o#t?OKbrk-%nT9Jk0;dR7zwfEfWlQq#pdwp&L9clELW@+lK1O7J+sua$!Z%~ncO$glK!iUF08!aoTiWl)or(RXMk5jg)ziP;3t!j z6pdWhX&Ri;ClLSW-Qn%leLLZ?LrZKnwv{+O)Lw>y<;w@N_ZTUO0K*rs3hQfCl27Oo z9atxhtvsgd^3C|HDlnoo-6gXMN4?~MQGW~Oh>&V!F8fW}DBbq^9@0$oQtpDlmdH@CVf6ccLTxWk&zb>?`*_S`EKRSakA+^`5A!{gJNP z<3MENYKUp6{0OP&lf%k)dX>CsL8KUG5b|l-WmDj5{P>f%p`?S)v44D~dnd?*J1WQ45fLsr7L$O3}9@&9>j<`Uf_6yLU zp+%wIg$?DWW`#uCDrUTIhZr$wevMsL5{t#%&{O$*VMw`a(WJ<-@I6r)!(sBLeW#br z^W^Wj@4ur_-1Jy}2~rYRLBzh$KK4tVCk~stS%cL8TG)v0gGhUzecWLA?HZ3HK~K~l z(DQHjEr(tVsEhVKqUPrGiem{Yf#P!Bj*Ja8G4Qnpk_G=|{v*DxI%aX)w_@*`R%#gY z>B0zbYj3SdPU*TVJwgwy@k z`>p>VxN^Wa>}ss4&G{{rA5_EmC%y1qdsh>3So(nqRp|y9$Qy@2&I#ZA2Nocdk^S{; z>uN!Ba41D0x~j7L?4A}KT8Qp>B-bdl3(eru%{;)z*}j{1CD~C+D8DI8&703oV#>#1 z8KO^%8xFeaf8*ZeWw^1tJ?Gr*P7Njb>hg)~v{UUvq}Dqu&3n#DIo5Zi=fs6(MAu0~ z_t_~|sxgvQzWG>0T>{+LH$%qA3)Ad(la*)q9$Nc(@a2bVJeIVQv}sicD(@1x^XJ+A z40~#SZo8jWdZ{5k!yj%0tv*lUQvOH6E@m=RIK+sBP{A5N&CM7TR*As1Utaf`jRvh8 zBF+Orz}~Yhk-NsKH*TxVzAy3?G(A~JdtB=Jj?fiL4kcIOV!3jR65b-DZ?~w&KX21+ zn-?x-AdA#mseNina30=F{e>A|fc=TraPjHg9`TAidR={ZXYqFittsUx*=4dWcDR3r+x z>z#AH9zZZkU(aBc7Yy(_+%DNmXaUEi*d~j)shdylj%q%rIP;RyB zwiWunDcGAaW*>ho%R6Fhrl9J|;F9S2E>|jX?%%~BTrM@+Kt+?7anqh#!1;?9av%7> zA4CP(pM?V`_H~bH(elc4R$G{$-)b}Or!{kQygXrKt`kKZzN3lxj{6bLpGSIl)^pgZ^}>h5+sOxpnFEa&h6e$dyf)~mYERihoU-yvxIe*uvDsohG+ zZ3kLlFn1ywdG7gHt3S=4)`%t8L< zzw*9I`1JWO`U9h3Z#iuV#sfqnbW-Gn5Ogs0;R6LfRulF0%1>0p?1#4{XXPnXWL6m{ z-lu)FIM%hydu-bw#~%>|#{gvck^86z37GM)Wb3}R;@Ahx@e*hL7jJb_WP+V{7k)H6 z@Xrsq=`1^_VUB#l3U$+%6rW5b3i)F2F)sA2C<${k_-w~;D=0Wq*Y;3iiYZ1I-9Lbd z@(u1>)eyH;c*#B7^JsVE(a-zf?_B}Au$tS^%6iw6?7EuTC7g_M(3Wbip zdYdQd-S+zrP=RK_^Z4CT>m8c#Ok>H*Zdz+?nXu8dQ^&ZijP6vruA6YSEt2^@@r$#a z+*D)w77w;u6|&^cQq?`NFrg5T71Ab z=BSl?D84NzRXA|Qf^NZz3fn$)hOg*@sknrc^d*dEs3@;--p4{_0VGjmTpno z74qqW1n}~Qk~w4H6J75adxw@U=pX|tFEX^DNcW)wSrdmEcMj|BIi**w zoFwu^v2k={bPI{pysEWdMVgbV4^#4VR$oZn=S~*4G2f0ET5`S9rUzQJ$NmQ(PNZZR z7;$rzo&3at{_`iWZQa5*R_c*~0Oz)Cw=MecAgJ65QY1J3=uwt zE&R56cxmQ?{#dKi%*@+auSsyDI|u|hl3hl;m;jT?s2Yq2e_hoz=|BQUb*Ai0%_Fa* zkbwylSrH`Sd*wsurLjf4;L1)pUHB*z1}wKl!^MQ-dZsN}CAJH{1#sIXQZ_0D8AEtJsYc^Cw+L4J3fmWpXixk1Z`oTtn#$qf6l60Rbgez z&HMU137?Ta|EF=r9D%mWbkz=uu%cH`_QuUhcqb^m*iv1>ZN=uSDZJpwb^D)WBdf5%Z&l&+PD#!RE!6d?) zu3vGR_Hm!=XU0Yn(wX3k3#GXAig@K`cO$E3XdT27&!*1{?9zY-A}iL=Fr&9} z7$eH3ma+Z+cDx0BEQ!&LRxTa1#qz(POyxe|$!*~-6|zZKoaKuBtE#Z$mdQ0HpuS0? zUg9Z&ayOsgpcA8Yt4^{dpPeHDd2^9f=x?6II9qajt)VrwPIW5B1#R`hE58i|kMt(QxH2L~x)if|mB6WFVhKknqE7shbyFbzv zxxw{ow3PIpa_D5k-X0GAq=;8ukW8bdn%A@@N~(VPvP|58S9D&O_D?B|St0QV@v<{l z;~VE!RogXcmDgU6sadZ#v;e+KVsjE5{({Dl1YZiwDMmEe?;46Pmw`TqA{5&1zo9vS zEGr`xJZ(comsC8EFeX3!Bh2&^jD}GJ$j4)fuE&ku{Vrp0*S?sp4dW&D2jt&#jj#ks z>(n?NBbg*d1`53I$t1vQoNE@ryKOHrX-`}EPibG@#rMWZu+d3||H3*%$2OM!nY`QY za~E4Fz?n9&fMZiX1;riQ>5}Y2-q1vJSUIlIp%O>dwlj z`DU|hq=FR@5&GP%OT}NDe=~hgt|OrX005a-9gq+RcZUUrX>Op~?o}&_Il`2FYWe911_0M9_15VIG zj?3_YAn7^nsMsn5>-~)$sEFf!XtBL^!?M_{o=+s9jVFH5j!}7iHBUZmREnY&(JgX7 z%XojFw{vt(zyEbi=Saq(g^`@R#WNa{aZMl19PC9tn1Op67WSeh-=Sp_vu8>6FtO%) z$?6FC=zdH-A-`sgV$JYnAMNGDp{SeBRg!=U0iAiwKEC@N73JRMD^v9p`IvGAdu|)l zhE$_PoE;_8A-qC&#EX*G+$;lumIGHfLs=o?z@##ztBsD)_!fBH)@6R>$gW=pH3|S= zsh1rXveI@RUa=w|idY5-Xf0+~+;T8O&vxZU^}K$zf?Ey(&+)z|dYdQEzi~zbMG)dE z!(^&St}qq_TKUczEjbEnD6*{G^G#a6noZcjkwYXgT_!plSmnzp(T(QtGz(KFxgMce!0{VaUg0DxGLs;YNO4Vus< zh~N&N86EM%GJ8PHVrdQ0#ByfnLrvC6h*qn||5GABkg(2z;Ns`XQ`D2Ajt-;dRSEAq zyY;)$U(Vg+`0a7uk7%Ba%D4lj^u$lV<1Cm-if z-+MbZA*CYjKR(>z7L-u%B&v^eOQ$uXS;5H8q-P!$n7OEPstCO&Z$OlCe0p`hK3;Ux z7p0@o@{y;+G5V$3^%U8pVQQYOaaZ`MQbo%gq#@+AHv8f0_FYr2SoY(3sjI#Ncq<$;?N9rv%>GDkBf+OZ3%N#<9L`tF?H?Lwa-_|9pZD%%SsaL~1lLnnSXHLSj} zE3f1O8jw9?L*#;cfW7QClUs$nX0{jVgjGbZ7Au54vs*?lI_JMM7OIBEUPAcAQb;Bs zL#x-roqyx5rz{B~ZHGs%h** zX;oc1orb+q37fqE`GO8}qLn8;$tH4VuB=!eu!D}prUTFL9)eH4ILIb;##S0SkD;c@ z&dQq}O^HdUwqJx7A$#PM^Km<&5!R8&RBthutZ|2s8wq=vNqywRLJOnohhnxX@nGet z8%3~w=9#N5KS`RrUzp36$cnm=V@l?oZ&d71$00x^71EpQyuw|2`tx(ii+WQcM{{$} zqNJAvuNST0C$U4ARoWGB4|OMIU^x$TEt5B}*~3lK8b><={S&0Jp)Vk)Vq=3v$8_Qg zIG`e8zUp%eVRm*ab0)b;OI-0ynEggitFV^g1Bq0}d>x{e6cqqS!Aa!Yf4yCbuz&8w zo=MUz+r)O#nt;7IJ7AK4US94iAZAR^>WP6#^5h|SH5)iZ#} zYQdJg)fA$?^u@jJs)4EBU|i^=D}#U5Akl1hY@_hhKWl^)hEIyG!&EquvzDk4y|8A) zfRxmaY_BfRKViZdXofo_`S9+Bw2Z&-4+!U(53kiIRVVw2hJ|XH5`-8v+eOvoy`R@H zG@s86h7Zg;rdd;`6N~(+v$osH;ho+SenWy-%nJ9m_D!0?7LC|sKfc+oto3KUo^Hg( z&wAa<9I<;Ibi#&Vi)37yOhD~w1Lt;M1#R8H%EiyIy%L%HupgETtG3klZKVqfjSM>T z{N`s^DmDcqjHrdWa}Dqr)78MIfe2mWer*!NwjEnFWCIJ1>C?TYX1UFlh>|?)rvy=2 zdGT>bDXu=f|M~v#HmhzydzQ;qa-edacW~=I z^zR*)GVK_3h?h;0YUIp>xAZ# zQ_pyTv>9LV*sQ6cJvVO!MXlCJss*wgmGbmz{Ia%7q4(~Sw2My~RXXQ8Pcs`4>*(R4 z;C2hlkXF4Em;PAaCZgBNebB7;a5k^))*cB7QDp*86>WuKqZ{oPslFq|P_Pc76`w_asK)wg%_ zpv|s-qa?RbkH0+BS2?UXQyplbqv#4zp`v~>{na19e<5%tk1_#zGnwLOhCa=H61iGl{HOo zIhrqN8*1D{xU;7QO`6zY_x+$)T5{xO)^|58PC3f%HQnL!Y6@|Ef(FF3I#OjN&4Us- zsJ7QIi8KeziKU>(3 z^Z<9K%MHb6+Q#l~yY1L-GJ^wvwAVH9mn9qMrG54Mdo8J1CVbexx#As@B1PFoDcB=l zo}se$u@^~`7!O1!jk6uKqpl0n@F31+uPhpFaCu)aa-*#bF;7HE`@I(OZCY^Yxp#_n zxA9xRVXU$j$;(W^bIkQ6=vuMxe^{zIEn!4_p7P$)znWC~h#jmn*bBTFKcY5A<^OyH#V-Fa| z6kfT-FXIcr3>1F&JN>wHPGKeg_Q27IVszZ}y`eePp5C_|m?e!0k4!>(idEs&r&V9l zNj=U6en!H?q~vBwJt*I7-?|kygnx|wu&Q8Pfh*9={?^}@GtUYWP@N9=yZk5Wo}Ya9 zkdo-hS2FY>qB|cB1pihxY!KuY)OZ5QCivxJDS%YD;w8(V!g~QC!{0&Qi?4oJBq(BD z^4VTTA;=XMER`4jauXunRSRZ;MSkAfF6h+zv0(8<)WTfJyozpG$M!!=`FrYfdj*E8 z-r2Iqcx#F)P5iPil9WHNS9CkI$R{Zs&<@@(pPt6+16#DR8~E(|R8Gw^0r|nYyJT`1 zm`RQPzZG7bm2san)IL3AF;|(bxwBasv)DO~v69-PSvwnp+c1y!^qobE(EsIi*%#-|y}n!FD~ngxLR+hi zxQ#+Eo)mOaK3xL)a^BedBeIFS!C~*@lV4SR%?9QeZGOt-`ovDvH3@EQTSV^IN0v2Z zl6o3?`h40O_3YCmpWIP@eK1Q+-GAo3F*PjTP~)P(}gv1PXw#6 z=!-n1L0n5oV7u-t^nuZ#f2gErlB2Pa@KUQ|?~_oYy>`m6 zirjj4NzrL~9VFR7^ztKi2V}u%-`;C;!DHhFc7HTzSA==Gp6bxoM~IJ0*c#V-ybJ5Q zJT$M-8zVldVjG@HZauJ0RQceC209aBj6~+60)89VJ~`Qe${f~%CaLir+=zlfF>5UW zhlsQLVo&?H(3K+EJq&B zP&<0@FDnd*f;C@X#?+q9OBea0J~NO)8diVDNLEn>0H$h^ufo3-&C}*I!=dbk_1}jM zOv&Xhr(p|(5p!1JX*K-U+Vem&8z{%?JP(4p5!%>A{Hrpx+3)AR*lY|ag-EPGUqsox zfPS0UD&6G{*kWE#(Qdfs?_8sK@dIxP@1d`N+&#a8D2IlFeq``4bwVEW`gOy>c343j zm56J)@5O>auXa7VIYSmw>h%53EWlyn5#eC|rIsRi>=5n1GI$}sVmz!8{AeWn{av-A z6wa!FcX3O|H@?&>Yomb{CrV@7 zj5k&G`THhZO(~_~Ap%>LlXGBMsR*Nr?M8h>Zx0D9X)isw2P*2nt{_U4Z+`J0?T|)=AE}reAdZ1f`4dJTU)y3(*#B%jhs2+`Foo&6bRpKVQZlr5-mRkOyhL)Uh zKl!xG&IQQDxRlmGxLwMKqN{mq;NGI%0x6=qV)lD7=0FREt;Xk^;XQq|1lCU_ksddr@(BODv`5 z-(N_#HKuyR=hlBQH~92Oe)((Skr|sOoY>`M(IzrFvTi7Ai1BCFYUw&g%~Oc>$rZ##$CB#^=)UZ!fXT3pach{neSS@rKOSH8{Mn3L#V}Oa74@se+6iWgOu$xn8 z@_ft^Jq=B|(DX(w|ARQDGSuJ7?}&(Zcl=0p{I18!3x-~DjU&F7n28PmWLNY`u1c-- zR^*TdRBj+P=LgxTU34V5|G8PAu5HG%DV(I1!J0>U?fGJyCzbS4OI006JP$ViB*A~gUQJ@j&w4xm=yT>;Vp8;dIy|ab>D-@`Qk-WC1rH>>5>eT5LNpuMZb|ZSC>|;mwY!*oTIOtjO@Syz%OKLV85WIv zNJ)J1+04yulEk&(u6?vJOOj(iE2;X}w4_oyaKj@DTeZvLkJ_emYLAbpd;QY3#SS8O zfM5I4!<*zTy4IRn5pwe_qjf8;APeRv_${`mtX+eI~@8?@`VYwtCg){YHoLD=P*Cik6Bq3 ze&(mVJD?s|$*#yp|3mjLaMfxy?(|u6{l)bIX|37QU3Y7F=di4YyuH?ZTS>U~bwdG{ zc6X#z+DYTOzl9z5%~`Wa+*NC{_qkx%7|W|jACPrUB814rYSqunZ%rgQ`}ApOe>~v5 z)tmGUzhe2CrmBIA3v|JX%;H;lMlL!hHtQT;1~$p4S+9^(fuDv>M+*XTJhb9mZ7jA=iG(eXN$WRMb9j9y`}ig>~26+fF@@4=bndqyCKqUhbwNsEUIypaOw zw&WN3t}ID!oRWwpBD-DR?DLs>lWBEZJVUHDb5Vbl`L@3Xae?)F%d0oALI@dLbizis zUqhtXFSG=&CJTa$y_Itk8(?ZO`m}OO1x01|$m^)&_N;hh5MJDi zgoi5Mcps5wC2IUW{Z?jX&s}C8E?Smv%MDE~&I_1@tEkpia&5jIPvv^g&l{~@(+oMQ z)o^DG?^oX79WV2kjq3O6oi{n2Y)QM9x~XssrZXOOK0+Cf$5-Z&?|xr)m+ zIQQGGI3Y#Oeb5OH#U@@;E2q>@onW1pjLrDMph_s?H7LPW*neH3#ctk|JW4SpCsFqF zl4a|vCk7H*CUT30gnwNi*86=C<+dRI=;u z{rV%@ww}t0OXcp27v)v+p-j?QChenjduC~yDzlEs6^ePX0FZqzvz!nA$;}uSVfy@_ z&rl$tZLMuUR8X@Ds4Y?FLykGJbAqUK-fB%Bd9t%Q9HSuG>8wupHxkpcr^yPZBw~!v z*6fJotSL?vo=DWGt~bBbD(E)SbkLg#-z>^SKETEe?rIm@=39)-ADwWZ&yB-I|ApeZ zM%le;tp~rPgsI6vs4#ryYU6MBXd>cJ*Zq-17wm5|{IR{yR&P+^6*Ea*?)RWT!(0?} zUv_OoFl?lELISs2fue$I2;LMB!5_In`6mcH4slC14x@&Am!_s{;i4ZlnGm$pDoeP8 z2iy3%0ol-({I4Hlw?w9;$ayUjnH{l%xl7bF^dL?;O?9RY{G5b+t$QOUoiBp?S0URKl&*ygR2qP!dM^F~tl* zl;gmfKQdRp2{^^;WU$B?0lF;WO>Xb*H|m@2bLQG5+pdKPp39C^4yP?Fz`ZMTwL06i zeMbH7;^W6QSaqUfkmu)6&N3fn1i<${l&x&79UX1U%<@rK;4tuCAECqbG2UE1h|y21 zTSDAV*erQo(R*Eir+dz7gq?R~1YLH+CPkklyJ5tyP&|D+cbuoE-vT{(UNN9!uCfwr zu3aa=Ps6}$JFg5&Jx7FY1?r2T=FxCZMw94BpvwTV?d5aPeNFnH|DySmR%jpyG@_b7hLc6Z3cJkHx+(`}=Io+NQar{SZ+izm%lUQf6M{*c>vSZ#3&Kws<=_p7E``w$AIQWtxw_HeeaZ zB6hg@aZBsTTst;r8Qq_9iBP zXm<>@A+Q%bc@L~v*ZAwV+`?m#=<<`O^m_*&t$Tw#Z*_b;mB8-%=JyhQ6sLwi6!5Sk_ zrYwDb=&=Y1dkYKFQgymJdII!NpcK6bDZcYep#O{-eQv3W3gBdUB|<9Vd4l+0jxhLi z45Z-V;&n>WI{1Oly@n{ECX->$Ui{Sv-gwOslU(=LO=@P9S0?SZVr;u%^I0M{Yo2(? zoK{fwji|gLvSD}W_YL5~9%9L|h@<5s<}?pqzb|s7Mn-tQO5qkY_}DCbuh@u}{^H7g zeYy-0?0aN`&_bGWJ%QRY;Bm&0{sN!jUh3T#jl36OKA$nfnT-B|IkD*fI=($z6o1~& z54rnMe6cEsE81`hX?{4ArL5y(EW6vm5OhPj4yT=H1n576k=03)70a4A`1v@>j8DL5=&~&KZPxO z*5)RQQ$eAc>g({nUE8%+rdQuNU4TuCo7P?lKl2FFpMI8bUSMR3%cNfYIpl7C1Hl6G zJ%#oEsG&XKxueB{8^B?!NbyLsKuGk1qV=6D7n>kCIfPnJ?lrL|wwdsO<)ga4mnZZAX-9i zq(&QEN+fo1BFXYLfxQufr;t(YV4sgQ3qkJQSG)2h1ad`4#_%SZ06qR2Cs!H3wodP-Sp1_3DtB4OqwmRQ>Ew7U{z%Nyh zG4lNLpe2F&XkEJCe2ylcd1sfsLS*#m$HGD@J3n7pFET`Qr4^g16WLFTFHEoe@-a7Q z)&!E(7eWkprl?6iGQ0s^3t#_x`{Kn5OMSIx|LT^C)4l58>(}pM-?82rZT2B6(P2-(>BHFc2qu8TsEf=Hopn17*l-je#RM zxAt>OnPjlCt`nEwWzfTSWx_>xQ+S9-p}S1?(DbfW2FbP!|3wXlJy=z|Pabo_twK1A z^6|>b`AO~tYN9$21n+(zr2Lt^&`FolL7+ZNbHrr^!Q>-FUCwE%*Vs}G$S593O}&}q z&N=oi)T3|9j>4ZJK>tjt_b|i=H`H5TC8k7Fb9wx%tzJ=!#vt(hB5fIJ(Rl=n^gLUiPIy zuHhx(6~2;O|2n#GMB)R)#X2M~%@;sykJHrE<#@cxoMLpGs!^0Ng`?756E+pXfuTL5} zep*fZXgZFk4Pz9~1z-5?=u$8|;V7v@pN*dIOL$yWJ}4sB#-g)rcZ>nh&Anye+T+k< zXL$mKSIQtN=L=5uAJj~Y317&Mpe++c>8xfkU%=OrRC7vtX?2DQ!hg@(m|TjcOIPO) z9m?!U`-3cqw9pgtm2trU>Ck*sX4IBDwz%2DAz%1z`vb zGSzQcCg}&Bc%tXZlF#Z$8-?-BlzZ70tye$~>HshoQ2g{aB2)3=^%fW4W<G|OZD_Qeq(Uvid>!I5^D=FF6FlGu6w7IC%>}|+MU#K}f;nTl5G8d9WMz8{ip5b-x zjWROSpS^|y@$Lx0^KN_|Vo_Sx>2z=6Mcx1mfeS~;r)PFq2U|HYYZ;eWkHWz+8=aDw z+PZsv(;!UGPq-x%+vl^5FsL5MN2hM}6WVqau|F@80cjKX^Py(CD=?c0ptpl8k(B+5Iw`DXxj;}NwT4B|dVe2Um6R61#)w9gn~{0Nmb4o_ zkXmdQQJKU3+avPX`qz5CZnYsZaNH*EaN3VeHlY1MuN;M>}5nEwKtNm?0NJ*mbl)x z1n}R$0Prd<6rzk{(t1oD<>;M1& diff --git a/sensor-iso/docs/images/elasticsearch-username.png b/sensor-iso/docs/images/elasticsearch-username.png deleted file mode 100644 index 227aca6464217ac2b9ee2db2c63f1391f42f35b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12616 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 diff --git a/sensor-iso/docs/images/filebeat_certs.png b/sensor-iso/docs/images/filebeat_certs.png index 42e7a03899055e18763489c96ccb500b35545c27..c959f0d8c908617629b47f8284112445d27b96c7 100644 GIT binary patch literal 30639 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 X?-N1y`o3^}ECUP?rk6|fTw{L+XCjq* diff --git a/sensor-iso/docs/images/filebeat_confirm.png b/sensor-iso/docs/images/filebeat_confirm.png index fa7b83bc16641eeeae95b65e22f988901fa8385d..98c0db6885d185f80d6caa1cace4ee5a465ac0da 100644 GIT binary patch literal 61733 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 literal 22412 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 Rz=vJ{Nl{smav?px{{t3ZMS}nU diff --git a/sensor-iso/docs/images/filebeat_ip_port.png b/sensor-iso/docs/images/filebeat_ip_port.png new file mode 100644 index 0000000000000000000000000000000000000000..1d58f088c8cbc276930ae0425d3ba6a97a5238ca GIT binary patch literal 20575 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

4+3c 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 U#!#tx)cesG>YC_~wC_IsCqR}#4gdfE diff --git a/sensor-iso/docs/images/forwarder_config.png b/sensor-iso/docs/images/forwarder_config.png index f7bc8f0da0a10dc9c9f59e857d0b02ba4de80ae8..4a4d0f2e3e8895d8b4deb0cd11cf50c431f6da2b 100644 GIT binary patch literal 32989 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 literal 37787 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 literal 14305 zcmeIYXIPV4*De|>x&RRsP>NANK&tc(Dxriby@S$wq?ZJ+Ea?#GJuG??F!UY~2ptSP zROu!3&;lgctnYi@b9Vo+uYIla=ln>nYs}<%=JU)s$GGo%j1m4uQdhq4=MSz}>m(DxiC+|HVc8)H#PrUr!+di@NbF>2h{HDs% z9DSCg?tCG8(zRS4Z1<2rj7YDqoKUFx$aK2va|a0+fFImmv@iqcj9$zKC!f*CxA~XB zR3wugipsa1TJcaA1LeEwFhS%w`9UXNM2mC}z=bRi;kQZ6 zszizJgpBp(_o=^ndMigI`Oiyj&zmL5Wxf8EN8;0x5>jlJ+JI`>NLk;m4u?25d7qp4^w3Y&;aXt*mA7Ancsznh6-jDN zm-5+Fm>vhr+88_zi5-8D`sD0TyF!yRuqK5ud2Mdpk;(_Le3wk8X&v%}6ZPoE6T3_~ z>S@$@Zu$2h;;rv@uDAPm+I`lqvyPzeXQ-P&V+HvgDh_EGIifwUnsrQFv5vZSg_`

76(cSr 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

;a1QZm4foQFLqYsAKCYV zOvJ@8<9$2)y8u+wG>Co%#&w{FORV$1HDn0Rzp-|I`S^#$And6UK+I%KZytK-TdZ!H z^^R#u4TRu+PeBAnT(3739ZK|1CUrrz2>H`>Zx*!9@mz0?f^+frx?Mw4|7#EPN9CqcElxXrM`!XT zGAX)-ztAA>UT(>e<4-a zTA6W2JTOpn@X@EMJAXXdC5m39V8p(jZMDCTwU)&J^^+u-KWswV(9z?aQ#Y%B9qj=C zaOnTk0)VWU{kMC#5a_d~u6EA7KFDTC&i(+S475DtmHQX_l+Zrd6fJ}M-sqdy=TN`B zwi4V)mRqsLcJ}kP?Y%*c2F?!U)Rf$<{xw|v4xSajrwKf=_UG-EOEH-b^vv=L}-u>>0Rtl4UP278y-UoHpXVAz*A|e+x z7j(6V%wW8Mb)~FpWT6T~^&+H_o`%s;pw_SLVuVD{xz=hwqkTnF={5ZAQZQs)XNx#~ z*?u;|w>%5MJmHPi^&L-HWj&W3=*WqjO-yjhDw=z~j{2~8fv>bXr-UeN0T2y8lk1B8 z(7^9Bm2995-`fRSzP4IpNa^*uXLdbT9F5gBpZa*EQQ4FOJKWu5K4m0<%vFvO3{-XF zsi5H|039dqk~LP(@p4W$~Fw9?b~da!o}8>U=nZ#`27V@s=O=Iem<@01`;RA zU3GILHkUxPk-P5hBF(rKVZ&P-O*vr`GU37)qo6RarT6xhKhyST>uFc#k6{S=%usP7 z`1RU-F3Lfug6zg&Y;D0m_%UTh2E{7-ZWyL-u9aHA&8==&T9JAb<#p%=fjI=}oJlS1^^R_KC> zDiX*t$?JY63cMVX=?q!c-L0jCKvXSU@`K{~{Vccm*C>gmsA(Xo22weZm>-lU$~-8vGk)0^Y@dr=m*F7bg^=f-Au`B@bg;e<-4~PmPgTbU2DIEJOU8!bt+SopT>2VB>B?- z6KDoGs$AQOyT3eSTx_gd90JYjy2Tptz~gNrTV?GXUpm(>S7M77YjTx?bIe8Epgjrr zq+R!=A^NdiNppXm`Q3X&309Y%UG_i7Or+haoP8%_hc$5LPzsT){Ia0}Wg4O~iE_>U zsTWhKSkGdzWqb2Y5p3JTUyL0?p`ABxQs%w9CSsZy5b4w*lVR7G@doNgTcmeFp-O%* z%@zR_(yd-hpB%+hbkkl_ty#h6IUm);&i*kf$C_y{SDlKxK7acAZ3~OBCkEZepL*XJ z8|j$H8C;j3XixLbSP`lk&Zwt}gjxIekKWJeoDJe507pOcHE|gV{v<71- zW{?ghDD6Hr-8qX2PIFsefh0?j)rtM2-F`(zujnW%kpae@bv5=S zz4uKL#!lHm|LDZCSe09^qm@YI*+*;Mp{t7vQU{P&_3G7#PKh8lAKwf_XHVo|K6%Y3 z_5&ZB&N1>6b_1_zNtQTlybSIR_={c8>yPdU`5dPqflG{z1tEqiY}bgVxQRl1)H=qo zmvkV6YL(cP(R(d;gXxLC-mlL!Th^I~(DYhSNWxwN%ahWU=^c>H=k4^)?JKOPgu|y* zPtK*wLQlB@WheYcJ04WCogRJLNkyJ@eLumUI%(H|?fgs@bnh6&POI4#)>fY~_Ouq3 zs6T!DiyIhwj-U2Qqs0w#O`OAvr^Fqp#y{WM^Zjcz8(SNuWF8Mb|JlF1yg92fs?S3@ z>IzFsu**lRzVYf$rI{0EYF?vqOL35=c?)642)LTlw=wg04RAO!P%hXgrOF>O;C-2 zx0Zi6`%60fm*t(&)XGGVVyf1!&_88pL-7CrMbPaD|GT~jy#N2HW&Vwi{)!rAwp{a_ u#A4X~)iVI#Pkr0}1gOM`Z`16xOR>{_P7MtB((kqxKu$^-QX*me{=WeAsSD8n diff --git a/sensor-iso/docs/images/metricbeat_confirm.png b/sensor-iso/docs/images/metricbeat_confirm.png deleted file mode 100644 index aeb46a4b2491fec47ff913bb0677154366b6ed9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29926 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 UA8q3t^$>uJgn~F&)G*-x0S#mb<^TWy diff --git a/sensor-iso/docs/images/metricbeat_elastic_host.png b/sensor-iso/docs/images/metricbeat_elastic_host.png deleted file mode 100644 index 90eb706855378c6b6756d41d315095b650bc55b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10922 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 NQ5Fm;ePitRKLEUGk+A>( diff --git a/sensor-iso/docs/images/metricbeat_elastic_password.png b/sensor-iso/docs/images/metricbeat_elastic_password.png deleted file mode 100644 index a9402fa11f7102464bfe42cd0cf5f437525fec4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8017 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 diff --git a/sensor-iso/docs/images/metricbeat_elastic_password_2.png b/sensor-iso/docs/images/metricbeat_elastic_password_2.png deleted file mode 100644 index f1f6aec6731de83e0c06aba1ebe563530a4d7a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8891 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 diff --git a/sensor-iso/docs/images/metricbeat_elastic_protocol.png b/sensor-iso/docs/images/metricbeat_elastic_protocol.png deleted file mode 100644 index d2868134b1ca623b0fff637c44c24069f4917426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5220 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 diff --git a/sensor-iso/docs/images/metricbeat_elastic_username.png b/sensor-iso/docs/images/metricbeat_elastic_username.png deleted file mode 100644 index 0d20c51126d6db01c13f32e214f3221dde15cf64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7949 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 I^E&vy097X*!2kdN diff --git a/sensor-iso/docs/images/metricbeat_kibana.png b/sensor-iso/docs/images/metricbeat_kibana.png deleted file mode 100644 index df274a3d35cf4141f215f03cd4bab4ea950d38a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6487 zcmZWu1yq#X)*eLZ?htV#rIGILp=)Si5F`hr5eAV^Kt!Zt7(ze>X=w%omF}Tay1QfG z$N&D{zt+8Xy?OTguCvcMYp-WN&puIlI%>oO3Zy6%nJY@egF5uqUp?!yffl@YiO(BE1kz`pY1$M*q%Ky1JuBLI*s1^}S$jAX~K7R*kt7#=aeyXqxGuonsd zT(JKC_jO{x-{0TN-OU4q^#hF?{NvWv$(h*pUb{58A>;~n9XuX)%Y*`kZ!)-K%e|@4 zwh2Wgms1^T0Nxzkxsbo>?%zFTvw7oT0bZ)=mutirfDpz4Em%M3dN`*<>m6`L%D}rn@~eo6uRcV6i!W_Z;yyD{R+?@Pn~TI_ zs}J(F0rI+@Y}N+(2q<skDb_TQ6uzy|bonOu}8kZja{bLb+w%I*<*lKdo#Jh*<)ffTC z{2XRJSR81A?ntB=^BKI-R-%}*diXVleAGPi``YtBTc3<*$6Xn>{NcT)hOa#B#qVROFEEXp&c>0bt@Pcxs6=IioZdZmA$a6-Rh!g(|ws1 ztsUKDQ^!Z*pY_4k{1nA?>?EORN0j7HdKj*|v_Nhk3nO>@Huz>iATJ7rwOw(Q0YF z@`aspIJT~p`45uY?Kd20xIVm@6KmEC7%D?N3jD&9ODNSWWyulb)apWFWOi5q5i|b& zrj?`2IBI%Irl9v~>xs;Z*--&-w_G(OhX!GTqGeDH?`iF z*iH3lJ~iv~=g>|Ed!LQy-X`?5LDgbY0U=&m1AzogYg~%k=!8S`T5r4lI*d+;p-q?s zA*x4+Up*xM-nF^h=VwjE+s^ZF(-O1csl}slt|<<%?-p{)w;O2w>)Q+cnah|flIu#d zwIv^ZFd1Hv8!*@2&v}K)fm$I*I`uA`Rdt|?zJkA3jxLK5 zod>kLwmgCYW}5`CLO&H(BLink6Ps4wbY=}DZafkjpO23HM%*iuCZ4R3yp@ zeWT`i4gv|BeE4ubSk3Ki3IB5z3B*O}wvd6A$B)moOThtj0TW!@a#I0boEjCLBk%AN zi15QdrKMpjzHdr7Si4YdJTEg*&7i~s(h52C6>88Y#q&$OqrH;N6tT8xH{Jj^NQE~-X+j(T$x11B1}X#>3k6<;=4 zJk~fhds-D|aXGB4bT1$lA_hA>ne2^Do%{&?soQ?pT2@NXY%`^;UVM4}?)tFwG4twk z2GT&rdbAiZ3kE(t`o-xBWWWG7XKmYAGwU1DIL93|1mX=mWb9qpB6}58r?u7I<>EeW z+sFx|WeF!+CA8v+02;vwd6Xfa+GWROPoQ~4Fj}n#DHBdM`F_}r+vv&6dhsi4SXd~>Q1?Zzr%uhUizx=d zmCoS_MHQvfcoq&XuHEmNNvtMCiQySwRUkW#f{X@=Tr!A>XXn#bvOwX8Y{?h!_dj2p z!B!9J)Q6s;S{yz&eV=I<7}Ru;*DM}$Fzrg6>Q zUd-7UEZ;!ChJs!(5L@{^B%G}My*wQ-93K?F?7_9&5|Lg-5(SPvmy~p_lze;iSlXN9 zokq2$6uC+fG^h0Y^R{^auF+(Yrg4_aR@^P^6 zP@5|WW7iir3XxCo)Q-VJ4Y=^bl>`@31X2a!?2aL*&K`B7%D>;F7Ai7AJ}UbYzl2jI zAt{`G#T}BiH_Bo56J&)o))4Wtn2dC#ligp^l9eXL7-Qqc_QGHT(~<;-6Z9^;B6C1O zb1J2!%6=ZK#I1(=aB#zukbDG*!kzteLoDzm^6h??P67ILw%)gAyR>f&? z%`tFaY(k-!xscUJNpn&YY*Tf|!Fa_Sx_E0rpGSrK&9EZyr93sOiYyrYv}JM%Q?zB` z#P+nj0^OQ!uKtu-GrIWau7tN_Pic}|ZY{a1bT5>lF`1c6t^?LR3Hsf==?^gupVR`pMWv`d;VZR$kWu}cRCP#kq$f={@Efb#LwF&0jge;5;L8t%7s_vP{iJ`kb55Cib(Tff$7X(_FU5_=(U;lDU$CXNEwg4kpU4^~IQVoW2PEO?z)S;U$ z$p3QQSAV{psQO@leB!omHZElP3O`TAy&4}uBG(zm zCMga@z$&7-US8gO`X zoxho4Cd6?r>vlSxAM5wYGxIGrWP6N-7+Y;XpN&{Y)Oam(>l_zw>J|=dtr5?oj zIEp2t=2~724Kz>sA`foTTL;&(OlYkupYFtn6!w~iT&!ZG;u@pRVC6Ynmpvk$t6;0A z#5!)dJBwn>yM?^hizs}VT3r2V4q3C5h2vH^ng&4u)7tR`d5!6*6|gSpbwM6dOr@`j z_iETEwAl2wc=_cr4+BxBvsL?M$*);Q7^blemop!hskat3)}LAGlmH5|wX_lvZYUg$ zND(;1E0^+Ke5I0-!i^0KPo#ceI$gqknQlj%FDy~*gZe2=>fX~dOv6wRN3Lk^<9oxT z)DqE8N}6p&Tr^EW{R%T5_3T~3yCF2AF{0^;wEiKz!Fjx`HVTU#IMULSS}>;>BuBnE zKrO5H)Tc*gGiY!s9X;wk{F2TT+A;RO3!(UD$q{u6vNcQD^2bp`BCp#-djxa|6}_IG zT(wE>>5;CE&CDbZzErvwKWZl7r~Q_OV1x99ctA^VOL5!bXq*k{V3^3h{s?1{{Hmu` zFmw+z6D&T#)|w_%XNPJ0fLlpX>=WSvkvG{3dlV^wy46mi}6dcFSK&<47tv~f|J zxCGy@f1%$hQ>8a=+b8ib?s>@E*teP0F7$^Yi-3CV)dk>KaE7``!A-nMWC_fxftXTQ z6dB0EQ_!Cw)4HkS)mo@_BTm!c+h3;;Ab9CRPx_K=cb;0u$?+ej^V$rUS?r05YKqKS z#ApR!O7WV+^eC03ljzY&6@ztjhc^-7$gQaf4060&qxGP#hP;)A)R+_cmDV;R#mfJa z#>bjDfv_%CvcABn?e!Q&-5pKh3yTjYk9~*Bdca!T70EdEC$j7DqJ=KUex%Pk#+-?S zPmZd^KL_MHi&kZ4cTJ2>2iA!Qg;QRCKp*lMPt~mX;Mwd81$ zu4?~1K)g6FTg_eKB#>fr=|@lM%C;*eID$;XVLpDJffl)F#4U%otYo#*G-o;F=4NKT z?K!z;V^gef)-V-3s;^-^T*`EZ-SNQF`-W8{&UY_!+5t{^|CJ<6%Fvj!7&_Z0zz}kYE-OCC}>Oh5JR2|u;LRQ56cJ}T? z?0MI2HjwmU^1!RN9MI6YH~JCe<#uR3yf9xE2C};v!<{z&ckTVR`BzQfN%24Q_IhV2 z;B<4PFL#3b*T_Vn3iJ;tpk4Z>*nN3fe1OLd&j0HB{}bPU<9{{D0(}vMH2I%z zneyDxBO-+e@Y0p+4bhv6zdCwC z+z}{V{>QrGp%n5^^WNveAKOivDz@Ehz5_qyN(j~}MSN|zMrP_nJK4$@iXX03+)wC- z;jDu0SuiH3>Hb7_Ac!E#7YX-c*0vlmcJC#cKUMIVVx~Rtc1Hxza>z~SijfU|O=rKm z;bRB?x>)VA@-XTp?9yf?gEfb*tZdh9E;<&5u3S{JP~SvQbVKFDRVj+3=#!`OUh1yQ zMgr^bS2wY^orEaD6lC0LjI+J2|LK=s)he_G!x@&eeWb(J6r%T3Iw){;ic0x&UrS4$ z8^HYz(FS};W7S-A4K)3&2^_fKSJg}kl1FDyu927zBu7;XIi zGq};PAj5%PwdopM&X1kF$NUlOaet{r8oe?6 zy%3*6YjNnM+r_&Y1ZOcS)ok_bGoeMss^In$(_s2J1AUL1?TGJgx6)0Hmg@HQ-iftg zd`!ouL_ZF^=cUIJ3qDzOacgy#^nBelA`*S^Q`Oox!BC~cobxSI79EE!VN9R2(xp-S zBF!q<6RU_<1fs_yr*Jf6YgQ_Q+Qx%vWS3^fMaMS8`krwU^(12N6=}_Q3ZjeM9a_VuyedAASr z+#`z_B~w)|tP+oB%g_oD@_#7lqK-?4exA!6BM%;!9C_y>N4Cvp^+CW&(t3hy`|oK# zpn#|EnoPiwyPtV``bvkkk(XzEYASq0Y41goo#;9>&fE5t!2nmujE{mU@p&Fx@923* zuzkAn4bqIBn3B{>_q=<*U>LPAf~nCz?AIZ%B|(hCPspX29;q4?f@JT}d!|^j$E)X8 z@k$Z&(S2`n6pNQVd15KrS;9B+`_of0764z|93ow##$kse1Wow#~Vi~b2zGw zF3}^?dmaCgL&YSWhP|D}naeMYD6k^1ceVVTpnSrxl&RNne}SWAQ6Xry4U)o-?jWrA8D!d>Bxk2KF+9ZIxAjRfVQeRNZ%vubO$Xs4Vu%(4e1b(%T)8CE$J`B?LDMp24)CzY9VhaY*`1G zmdtnZm*1vymC>umftap;`Y{8MHO12h^J0*QB}x zmfeVO{ZRQ4#1|oIay%Ah0IMp$-fAO|j2-qR$w|s0wE^vrsgePoWuqU*w^{^f)3wC`gB z><0$r@!mSL=xAwmaTU24mJ_*VhOz773l9YnBUVlpr>*hmAjK7luk>)m7i1yB8}xB0 z4#~?GO^CIl^KbeV+Xqe+9b}Z&hfXbyVe~2k0|EO(oLTX-^J{8Vy!Y(ZaDTm3S0&rW z1^koSrQ_D1Q)XX8q&XR+#{qv!@prZJf718Am(u+U=nk(M5xp)SvHnPmPP3fZ9|!jd z0sxMB|{Idse$0Yt4>sMRW r`T4$Mvj|a?;te_5u|q_y@T{lAT$w?-b*L~3Q|G~(n3di@68Yh zy@uXf;NWxCS?~9*^M2p?j#dR`~t5p_9J_06faM*`tm>Ozkw1%>4BB7T^;w zq?`6zn*l2T@Z0|DD?9+;O~Or{|2jD2CjbAUi9Ud*@8Deon|=ZSzGqXtb^~F96(|NT zwz3jJdJ5%v2>^hhAC&_G1m$@%`^Ue269E99{=>KaOLKds{@^CCOOur7K4(*QuYJYo z#G3%7`H%wg{aOT#>B88WRc006V>qw@2*IVu_>J0!!ALl-Cy7Qgdol#J=8-~L;l+&> zJvgTx4cCXd+xhoNsg&)nOcV?QJ+rAWe?ERt;qdg@M~et9>|}caK1FR#aPEdtApQ5R zE`6dUPa>$E{~Su9>Fw^XOD4y5I2351QIX+7hGD*I-Ott7;4SDn_e1_56{qjt%^?#J zW0})sSMPPzWvou9(AyAR%7LdOH#xpssBN_czeqgvT}kQmuI6KqU*~nI?sgd!ZdgfG zATG-{#EHrF`t3=0O>QDWL<#Y;*G%1&%T*yY)m;c5Yc_PH&G3}8 zm2CtUMh(u`skBL3U=A|x)jNctR=t6#(7n!UYW7L?7HD+Jo)h%bVGr`E3SMO$bQ;Kd z5&E7|?05!9vPTvIwuc@hIuhD}6qBwFn=Esy!gMgnNQd>$kt~Hp8R-O(5!|}f7_;-v zXh^)^R^jV|^nXt4a@mcikQ7w9Tsku>$nC=bAyeW)%aK1_dna}{^M4gwdRqa-UiPPx zBE)J;P{Lx-Nn_}-0J+uEXw9E#V&!2u>Ho8RTd*VV5*%g{5 z;_RtfS(N>4>x(|NeiP}1b$IwSW{NS&9VWwoFX%TOazGcwmRlVovCJ>y;Au}iQyiOC zF<28p>g$CgM+7|Eva^K*oG3ecvKy#&x!K{49r(ipe|XZOU2o|pjcg_}O4~Hyyk^aG zRyG&MZ2=|!SZ+yP&a1_8jn@=5o*kOC+aez9+pqeeJ$_)UMzUL7S4s>@9e)2@C-Xmd zK_xXXk_Fq|mDVF>)5z_Q;zzUjd-`v8Z}S^=5ym`KCjrS+;pgc7unL!H?OypCWt z(>%WOgX_F39<(r8VQ5OdQvc?<|Y^W;qmvbAHUF+xPR;D|WFRYX{3rRyn zgQw&zIWgb7Sp^q+Bx35ZUH2uVpMYk9%{%OHqD^fRh{A;TxyK_nmrH5jZcT7>bna0@ z()Zo5S6xfY*YC1+rs6u)^CWo-f>YIyPPW4e;RCNRL?s9PKD^$akZ(Y@ZmEHoCbrKV zytUf${lz7iROzx#0lw>4Di3mtX<7@Q!b_9&6gde+L3*Hm)b=Dls}w2HMMo>~J;vQ$ zcx|D?nO+SM=LDY`1urtbR{wD`#LB**4!6{-XRR{*nB>|+@)e{~UsXZjI!j&FCr2kw zU;T>D+K7Z8w^{orsaiMPQoN3##+HbcVzR84?f$9W`M={bI3Pbg0RRwu=24lezqWHD z=x{KkW16^NO)I-HZKFi%2R4u zj_EfE@-6XX5{MqaK~23BuZv>Yb>cPoZPV;AY*;v@S3>X%#VJpadh;`lS9d8YrRbO; zv1!DX+dhHzS|1_W1^YzUF$3t!d_O~X3O|hQ<44rqIlNwZf1FIbb>K;z)qjeId`zx4 z#<3(%w8z$q8Ol*bQlBS&%MI*m-Ufiyl^*NQ=%+NQSuxgnC`D5d%cvJT;f&U@Ay0`s zUlCU13H@n7*6}QK=}_!r^|0~Wv=-`;Pdir??qKend+bDB;-HGCL=BX9y7u%WU6-Le zs|VgJ4G)Cy$bceZ-$aBY|E_+8Q4E|!3|;94C>OE_gC~WObnuo3TN$<3mg|)rnFi1$ zLk9ll!?Kw#j;MJ}Hd;wD2%9}T#tDcjgks6)Z=P9d&{4GwT2eM)*i%@jM2W$fIbqJ{ z2T-$Kvj$}q7w&OH>Fus3@-NMxfdTOmg6|45DnU=kLOd0e!?g>yV8r@l_Z5G*CBCnX z^7c|UEgaWihD`G0vDeq&qawc~efQ9c)h?_wxW=_+y+t@)P1y*frl{vIF+0{t**0JO z9pXlmvqoxoLO@@v)I0t zm>jFTs&)UzJbhCKySlyrW{q-;^RM8I7UAmvZupF8pyjT0gp`dB{14*&=mDOAq(OHpac*DXK4D4u;` z_b3rVZ@_9+=AoV>J17Tbz0+S_2n9#gd}NC^^}b!P~Q z9Q|4x-KCKQ08YtgoYmOo-C2Yj&l_to3oQ{QFPZ8*c|(9<|8H@b8<$x2CF`eX+q!@l7@Rg+5NkSdy6= z#;n%TwX!PpU)%Y~#xP|*XtCyhra4==REpt+HpFR342WKSCf7XuDxE8okYpYvLpQZ(&=p5bt;XcD+#$a-tA~#(5TFhMD*&{ z;Tl--e2?Rona|y!-L@naD&9QaQ_>_r-sSGeYta*b7A~;~vS0IKE3{Qhf+0~4$Ed$_ zpNq$wEn-7`6PnU|dCx**gYA8+{>*Av6q!ZgyY4*`eI@FxYMf`}KCHBG)K=IkbY=EC zqD#-~seAtE#GUq~*4zi^(}5urg!K#B;F1>QSpU11*lNP>^>sePO5UDwjL2kq-Ud zKEp)k8eZ=CclI2Gm14{+#lO+eRW>EI29l52zPX$l zB%v;>7JmJqboP6V-6S%6f|@N~=$=hxOf_ba#me2;9`hWjxoIc_8NWJ+x84p7hrHZ&!HP^-#&JCKb=>shVk>oecPS$ft^tQ7IQ0 zlzF-uCXVw}M8odK(X;RW#^7`Ku4wXfX37 zpWBVuxSOhN>@rhZEHhMQK0Ng*IT-j z4!W{`oyhc5wCB)rip3W$gO+GWueyGJPv8L?y)0iN#>-QnDB`}7LmNIu!~J>|0O+|NY>^J2GJjuFSX#NHn_=0>)9 zn{44jhA=7;M6$$n^5EPsf4l@`l;el1_NK_N$;|f<*LurxP?~1@%!1dUazKIY;aRMgJC0wE8#SC?P6VS@T%B^61IR%&3wfaA+Z6w!pnJF z4NKjiCq4TcDa9-|+nUHqepSeCiFzY-PhjHJ#f(%*gt;*DHC@lxz`((HPN?K;cruKdaKyH#xtIljj0eqLzg^ONW0fY`qZblPKw>g4l|45YKXm)R*e$MHRE8(a+^>_?~_d*yL ze))h0bgZYwtWOSAc{eC+IQ^`xO?p+(oS1EKGzWA1u+3-^?b$Kf3>rN~ll~JlW*PK3 zysje%)F9uIW20geIVi{-P%5TM{jJTu%>W~{x9*`1&X$h^)Io zT*@Bo*mc+M$K2Tk{E*~=`dKcLzy_Ihwz=yKg6DwSo`>UlWIT3rFrL^^(h7^4d z3tFDWeB|+SQP>u%av+lRCU+1!gms)Qlbqs1#eVBqNgF zFe8)n;rRpPt8U75%b8Gyp=nyfA3m8qHd$Pty_$-Nc{E~wxv{$%l$7g;oIwbMUvHSA z$)`%h2ah^cB#>pg!(#69uXd1R5+<@A;tZ7Vz#tn1e2XB@J)7^p}>TUc9UN2ug3oRQfTJlr|JqEJI&QVg+SuBGGPVFPV zVvNT_wPh5oN}nk`<#(nC(xm+37wADy-XBoAEtl__5FD`=CLLtkTg(uvGg*DGrlsNP zX@n9ffA5teW*gXXp3jI&ZtFJ;+KT?c9~}88ljd!N8w;VNn6=xX#m*#q23MH9_8(7+ z@~jc4#A>c?U~GKPp4lBW=s^<;38kpBU1m&}f~=ttZoIb6ka|{bWyn%Ku^>k^M|}W$ zD8m53#lEBUbs2-SeSwq6da~U`qqJx_hNeJ%FV~VmBQDt9XN>*B|I- zsj(;H@L#6ONM1biZ7}Kezut?Cg|~V~X7JXiyg%?|i0@9l81ye0Qif^C1jZ(?y;FF8 zGyCn6X;}NvlswgXRKT>%oE_^5c0VABP3h5^*;q0`dU{VjcaS5IkYJK$i!E%pb4OhN z3p=b-Il4YQU}G-4E-a$%wz!P~cva^GHuiKhDZba2tm9qX@dov1Ata(^d%>ULg^mX5 z{F`<0B&s_5!Up-)l21p36zPl}v?4<8Mdzr5#u&Qugnr&EDDSGYxF=sj#mKDH(O%K` z<*9)_Qv^pnZusMU>jltbSxP%usyptul(=fvXN-QoN+Nw0CVE9DgVYgBaaGNKMG@k*EZ-_YKKRX#dft*iT%B=d{<(+mv75S z1xHesT?EonIIiPhMXChH9F&Kg>@T#lhx-!PUdC1$`#YHR;kYAr&~EXT9AzTAm(C7_ zMoiZ4&McnB&~Vrz-mW~Jvf4cG?Qk(ux*8ZifE9muJi5HB$lYAS#UG^p7T>p*h&tIY zkEI4C?^J5EnL1=jm=hP@3H5sh^KBT6`;pi*Z zcmxf1hzNPl)?hOLvhQy>6Vry)K*EoyhuD2oLw1(lUWq8MBhG_TJnvlCl)n|T2)-Nr zAf7PGq*pi?D3)6c!)rK$IW&~GJ~F~}eH?anfphy=cwl(Zkx?D)NkLQgLjnA~#FqnE z!(AfxDM=_~IQFL0_cJJX?c_xzX_#4$^&fIvHj%cO9?l z$9{}QVaa#aIK&`!(=~qRlhs-`N`JNEH ze(e$$dp}^=-e%}+S#9@kQyZzO`G1g{Di7r32%o;Nk6{%^Cm>cjS*)y#TylfGd>d;b zrFDhU-RqIsSg&WJ7Z3+6*frfaIk$DZoZA!gYHEt|7oaRhR2&#oEUf3Jxlr2mYq``B zF{Uxi%JWjgdg%8sYyh+#F)~RPoO5kPNm9a?u$&=faQl z49o}hcstis%bB*NE>Fk!q2}K;=^iIIJZHtw0J+cJ$Bjx$<@B)&RYwamszDl4(eTn4 zUb{Nai#zSMHg0(*Pwk2pH`dm=4X7_F$B)7w4oT@~LP*ZQY(_0}6eY~Z2LmzMSrhU7 zB+Nf<?;N&-BW&4D2fjrS0yglYli563*i<5DSOyrtP zjn9lBXDpm5Kdh6M`GH&Ps3{H!ss6Qp_(R%)IOnXcYEumHe0O1pZbCWGw7&{3GyQ01 zTta*(-axd`+B;D%+S9-DVKLS{Wm<#aL|T$*#3WBP@Xhdj491QtC}p zUovge)m88qoROi31?=mu+G&pb?wKcJxJ!871wJrS#V<#*#T*Owy%aZx>}n|Q-g}n# zs>$iQ`Hmnr+k9?4U-mP&{IjuxbWdKUtRqxR(DCM#2Ol@Wj>B=u&je!_0fq@`x>}uB zNar?u-55A>C}{+(}FDl=vH(mZQ) zpAcpTzmUrqKKrwZ7?c?C0sfoCMM~PuKoA|uX@FZ_q0E)*g8FQf0%Sm+{~MQS1}9oc zP8#cJauODO+&hkW>)gP6d4`c3Rsx3~Q<`slcgnmV(>_130tN1(a!1jDbUh_-k-ciP|LM+V7kiwn%Cpm1K?MxTu{3UQ zNPCC9fh=Btk5gPO|H9O9h8ttVz2YcV$;V@&`Guh^$F%+7s98#C5`+P~1l!sjX(RCb zd6!72Vg64*))|!z=fF;H3Vu!1{;YzQ8|0&WbaH1F7P7-BDk{K-3a}bV`6kURD5Fx_ z3v33@+m=sgk7x98i~T?v{ct4~nvt6*zAWK!0=#_M^a zHc!Z~t;S>m%9VH_oQqGtUx*GFu#IhDuibJX)N{?4;eK z)iunlcOWCU=Ii6U z55FnVim3e%_gb-UV8=UU)HKNF-DR+^}OXL_V5b- z9>59we+)dpKQ`OHn|lA!=1x|@XCYrFG9T94FG3^u{u*+QzXkoDc7#T6-B@^QZ%Y5) z)!~2Dq5owW{=G`9ph`&2vPvR?c<%`sOogJo305Hxp5pH{_Pr0BVe+`RuVEA z&+sO-|1tc3`IMhLFJy%U4H=TvL~&vGU@D(vBwqh$h6rW`&?No2R#CwC;l?9 zXgjiMy55p9b7hhJG@Ag8CQy z^?PIIN3z_m@5a7goYToVvg@Uswq#Gdw6MD*Dm%f%MBJN8J9gd^<_v%f(3|}Daci6J z>lxstuCAJ0y-P)N`DxQJ`kqTx#JvodyS__t>bC>pgSE8V?%Df?(kioCAxp zNTzO;LXgOHtR?g@DKRBSO3`ZE?D02p5hrz~P>L%5W7I%+GTEC1DOunzo8G9MKlKNu ztKIP<;{((5ANJd%MTPQ_bdI9WvV#n-s@w@`mba58>?lY|(5lA9hH@uS@0}o5LT#QO zm%nAxJeNMt{Q@WL92h8jbyXVJ(y4&&d3EWV6Glqv?CZQeF#}9zulwNmBu9Sm)7nzs zk989p8GUch?#@{Xb@OZb)PfX%--HRX0aDRkn4;Fuo{Y&=I(xu6;}@?iB!Y%K{MJq!Oq*k(MH!8erETf zn1JUJt{IBiu)gSp%e(YGavZ}!E5Ue|0E>}ov?JcsRofVm^SyF1vKDa^?wK+aB7>Fu3F48Zn z8RJlcowDq6nDZf87Pqz4bIV^2ob~#mxC|MmSBx-@$+_Wg%#e0^S%QTXmjkVGv)Rx8= zHo!sI$lQaDl^}J9qo|=;VK7^IcagB$7bZeCv+;p>{5_4$T`zi(0go zQ~VVzTK1#Xy$?4z)9#C3keDAu=z{o$sal^ z9#v)z&2KANNR~H??FCZptIqM2r?YH%oLuV4mgcA^*IJVMMx_V3%!N{3lk&r!g8x*{ zC5{0(e+QAuXXYgs+3=l6d&UYCfXk0*^W&G+45f4KMZu zv?<@38?>Rh#e#;A)ewJUmxCyyFEA8_ML<~eD!se2zL}0{S+oC|vI7cpB+7?|JTn8e ziQEiqDq;qfmF;zpeu0pii53}h3`S9fp+{b2xC2JBm)>dVOQ&oDjM(nlFgct*l;NjXz+yc%! zJnpM32ILoh9+vrV$!?|w`{Ct@%9^lg$5`Xu*7Uq_lHOn$)3|&SeQkp ztAdjL?uL-f^bl7g8#)w$(R2NZOhdZ_sT-Ty7LB^pZoISjEH&TKwV9NP+bj*iQX5Cy zj|i!LJDW;12gA0P8|Fgmd~^c-MFZd5s5Up0gS^~im(cb1SygFZguaHD*>IiCdS@05)^QNY)!JT$^Pjs7 zSI=!iTgx|@AMCUmo)1^~#>Jp684R-n*b}Br%bZL{K2>x1**w?j=_z>UGUrOQL_Z%8 zS06W(E#_J`lSxU(Vm99GBduxrWdz6p@>@$dcH7>oh+*Ppjm<|$`kvMo$?Cd|Dtt{O ze97ogr|B-YIdX~C_$RSD>9)(Mr;=m~7ZGsIKWXLV>b8qZW1TZR5c&&AA&a0REl9Vj ze~*r_7zL9TXW*|wfA&uOteuVd>(MBpcitok9<-DzeQ$f+EeA0q^+_p|h}gx=jZF@I zp+mXujqVAc5>hdRZvE%a@;dvA+dqvY>F<6Gu6-e9FN*ZW8JfkcZ)TVsF{oW2GAw99 zanKi+8^--8;seZVZd^EiHmBQ~Mkpzpg?=XHEgrf@rT9$6Bq}e}?I_YRjp=f`t%6;z z_UqU4d+p;C5bjjHwd|z#t@x73q+fLKL9A}C`F7T>%(5K|LKE`LcX+U!3Povd90EG$ zgJ34>0;8*hxilB>Wx$T|1U1SlYqE`r1!J@k=ea``n*1v*!$K~3sr76VNUI0-Gj3o~ zH|C)7rzHy+Gmwoym{GYBMcbp@xOgOst=cAhSG_JG`QI%K$&pk$Vw|hzq|%!U4nxkS7v@&Cg| z|16UGcbowHkJ|5@4`Tk$nQwkz85aqn zpwGXwHJ%b*qxB^cWzpfVv#u8pUIGAfC4XzI|0$^d4{eS_5vrhjlXjcxO|5nN??S@= d62zM;Aa9l{{fN@>4QBxWa_^KuB~r$p{};>Nt{?ya diff --git a/sensor-iso/docs/images/metricbeat_kibana_dashboards.png b/sensor-iso/docs/images/metricbeat_kibana_dashboards.png deleted file mode 100644 index 3aa15671d12a46df0d44c93af0e6e50b50cf53c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6338 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 diff --git a/sensor-iso/docs/images/metricbeat_kibana_success.png b/sensor-iso/docs/images/metricbeat_kibana_success.png deleted file mode 100644 index 25ea84d8bafb0723cf1b38163c58275c7816b058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5713 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 diff --git a/sensor-iso/docs/images/metricbeat_success.png b/sensor-iso/docs/images/metricbeat_success.png deleted file mode 100644 index 7be762efff6529b4325ba2fbf62e96a2aa072410..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22541 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