diff --git a/src/plugins/custom_integrations/public/services/stub/fixtures/integrations.ts b/src/plugins/custom_integrations/public/services/stub/fixtures/integrations.ts index 7553deada9e26..5e4427a66cc76 100644 --- a/src/plugins/custom_integrations/public/services/stub/fixtures/integrations.ts +++ b/src/plugins/custom_integrations/public/services/stub/fixtures/integrations.ts @@ -10,1875 +10,54 @@ import type { CustomIntegration } from '../../../../common'; export const integrations: CustomIntegration[] = [ { - type: 'ui_link', - id: 'System logs', - title: 'System logs', - categories: ['os_system', 'security'], - uiInternalPath: '/app/home#/tutorial/systemLogs', - description: 'Collect system logs of common Unix/Linux based distributions.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'system', - isBeta: false, - }, - { - type: 'ui_link', - id: 'System metrics', - title: 'System metrics', - categories: ['os_system', 'security'], - uiInternalPath: '/app/home#/tutorial/systemMetrics', - description: 'Collect CPU, memory, network, and disk statistics from the host.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/system.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'system', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Apache logs', - title: 'Apache logs', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/apacheLogs', - description: 'Collect and parse access and error logs created by the Apache HTTP server.', - icons: [ - { - type: 'eui', - src: 'logoApache', - }, - ], - shipper: 'beats', - eprOverlap: 'apache', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Apache metrics', - title: 'Apache metrics', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/apacheMetrics', - description: 'Fetch internal metrics from the Apache 2 HTTP server.', - icons: [ - { - type: 'eui', - src: 'logoApache', - }, - ], - shipper: 'beats', - eprOverlap: 'apache', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Elasticsearch logs', - title: 'Elasticsearch logs', - categories: ['containers', 'os_system'], - uiInternalPath: '/app/home#/tutorial/elasticsearchLogs', - description: 'Collect and parse logs created by Elasticsearch.', - icons: [ - { - type: 'eui', - src: 'logoElasticsearch', - }, - ], - shipper: 'beats', - eprOverlap: 'elasticsearch', - isBeta: false, - }, - { - type: 'ui_link', - id: 'IIS logs', - title: 'IIS logs', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/iisLogs', - description: 'Collect and parse access and error logs created by the IIS HTTP server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/iis.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'iis', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Kafka logs', - title: 'Kafka logs', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/kafkaLogs', - description: 'Collect and parse logs created by Kafka.', - icons: [ - { - type: 'eui', - src: 'logoKafka', - }, - ], - shipper: 'beats', - eprOverlap: 'kafka', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Logstash logs', - title: 'Logstash logs', - categories: ['custom'], - uiInternalPath: '/app/home#/tutorial/logstashLogs', - description: 'Collect Logstash main and slow logs.', - icons: [ - { - type: 'eui', - src: 'logoLogstash', - }, - ], - shipper: 'beats', - eprOverlap: 'logstash', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Nginx logs', - title: 'Nginx logs', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/nginxLogs', - description: 'Collect and parse access and error logs created by the Nginx HTTP server.', - icons: [ - { - type: 'eui', - src: 'logoNginx', - }, - ], - shipper: 'beats', - eprOverlap: 'nginx', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Nginx metrics', - title: 'Nginx metrics', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/nginxMetrics', - description: 'Fetch internal metrics from the Nginx HTTP server.', - icons: [ - { - type: 'eui', - src: 'logoNginx', - }, - ], - shipper: 'beats', - eprOverlap: 'nginx', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MySQL logs', - title: 'MySQL logs', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mysqlLogs', - description: 'Collect and parse error and slow logs created by MySQL.', - icons: [ - { - type: 'eui', - src: 'logoMySQL', - }, - ], - shipper: 'beats', - eprOverlap: 'mysql', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MySQL metrics', - title: 'MySQL metrics', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mysqlMetrics', - description: 'Fetch internal metrics from MySQL.', - icons: [ - { - type: 'eui', - src: 'logoMySQL', - }, - ], - shipper: 'beats', - eprOverlap: 'mysql', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MongoDB metrics', - title: 'MongoDB metrics', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mongodbMetrics', - description: 'Fetch internal metrics from MongoDB.', - icons: [ - { - type: 'eui', - src: 'logoMongodb', - }, - ], - shipper: 'beats', - eprOverlap: 'mongodb', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Osquery logs', - title: 'Osquery logs', - categories: ['security', 'os_system'], - uiInternalPath: '/app/home#/tutorial/osqueryLogs', - description: 'Collect osquery logs in JSON format.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/osquery.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'osquery', + id: 'b.ga_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for a GA package that is not installed', isBeta: false, - }, - { - type: 'ui_link', - id: 'PHP-FPM metrics', - title: 'PHP-FPM metrics', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/phpfpmMetrics', - description: 'Fetch internal metrics from PHP-FPM.', - icons: [ - { - type: 'eui', - src: 'logoPhp', - }, - ], shipper: 'beats', - eprOverlap: 'php_fpm', - isBeta: false, - }, - { - type: 'ui_link', - id: 'PostgreSQL metrics', - title: 'PostgreSQL metrics', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/postgresqlMetrics', - description: 'Fetch internal metrics from PostgreSQL.', icons: [ { type: 'eui', - src: 'logoPostgres', + src: 'logoBeats', }, ], - shipper: 'beats', - eprOverlap: 'postgresql', - isBeta: false, - }, - { + title: 'b. GA, has Beats', type: 'ui_link', - id: 'PostgreSQL logs', - title: 'PostgreSQL logs', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/postgresqlLogs', - description: 'Collect and parse error and slow logs created by PostgreSQL.', - icons: [ - { - type: 'eui', - src: 'logoPostgres', - }, - ], - shipper: 'beats', - eprOverlap: 'postgresql', - isBeta: false, + uiInternalPath: '/', + eprOverlap: 'ga_beats', }, { - type: 'ui_link', - id: 'RabbitMQ metrics', - title: 'RabbitMQ metrics', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/rabbitmqMetrics', - description: 'Fetch internal metrics from the RabbitMQ server.', - icons: [ - { - type: 'eui', - src: 'logoRabbitmq', - }, - ], - shipper: 'beats', - eprOverlap: 'rabbitmq', + id: 'f.beta_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for a beta package that is not installed', isBeta: false, - }, - { - type: 'ui_link', - id: 'Redis logs', - title: 'Redis logs', - categories: ['datastore', 'message_queue'], - uiInternalPath: '/app/home#/tutorial/redisLogs', - description: 'Collect and parse error and slow logs created by Redis.', - icons: [ - { - type: 'eui', - src: 'logoRedis', - }, - ], shipper: 'beats', - eprOverlap: 'redis', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Redis metrics', - title: 'Redis metrics', - categories: ['datastore', 'message_queue'], - uiInternalPath: '/app/home#/tutorial/redisMetrics', - description: 'Fetch internal metrics from Redis.', icons: [ { type: 'eui', - src: 'logoRedis', - }, - ], - shipper: 'beats', - eprOverlap: 'redis', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Suricata logs', - title: 'Suricata logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/suricataLogs', - description: 'Collect Suricata IDS/IPS/NSM logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/suricata.svg', + src: 'logoBeats', }, ], - shipper: 'beats', - eprOverlap: 'suricata', - isBeta: false, - }, - { + title: 'f. Beta, has Beats', type: 'ui_link', - id: 'Docker metrics', - title: 'Docker metrics', - categories: ['containers', 'os_system'], - uiInternalPath: '/app/home#/tutorial/dockerMetrics', - description: 'Fetch metrics about your Docker containers.', - icons: [ - { - type: 'eui', - src: 'logoDocker', - }, - ], - shipper: 'beats', - eprOverlap: 'docker', - isBeta: false, + uiInternalPath: '/', + eprOverlap: 'beta_beats', }, { - type: 'ui_link', - id: 'Kubernetes metrics', - title: 'Kubernetes metrics', - categories: ['containers', 'kubernetes'], - uiInternalPath: '/app/home#/tutorial/kubernetesMetrics', - description: 'Fetch metrics from your Kubernetes installation.', - icons: [ - { - type: 'eui', - src: 'logoKubernetes', - }, - ], - shipper: 'beats', - eprOverlap: 'kubernetes', + id: 'j.exp_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for an experimental package that is not installed', isBeta: false, - }, - { - type: 'ui_link', - id: 'uWSGI metrics', - title: 'uWSGI metrics', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/uwsgiMetrics', - description: 'Fetch internal metrics from the uWSGI server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/uwsgi.svg', - }, - ], shipper: 'beats', - eprOverlap: 'uwsgi', - isBeta: false, - }, - { - type: 'ui_link', - id: 'NetFlow / IPFIX Collector', - title: 'NetFlow / IPFIX Collector', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/netflowLogs', - description: 'Collect NetFlow and IPFIX flow records.', icons: [ { type: 'eui', src: 'logoBeats', }, ], - shipper: 'beats', - eprOverlap: 'netflow', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Traefik logs', - title: 'Traefik logs', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/traefikLogs', - description: 'Collect Traefik access logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/traefik.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'traefik', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Ceph metrics', - title: 'Ceph metrics', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/cephMetrics', - description: 'Fetch internal metrics from the Ceph server.', - icons: [ - { - type: 'eui', - src: 'logoCeph', - }, - ], - shipper: 'beats', - eprOverlap: 'ceph', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Aerospike metrics', - title: 'Aerospike metrics', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/aerospikeMetrics', - description: 'Fetch internal metrics from the Aerospike server.', - icons: [ - { - type: 'eui', - src: 'logoAerospike', - }, - ], - shipper: 'beats', - eprOverlap: 'aerospike', - isBeta: false, - }, - { + title: 'j. Experimental, has Beats', type: 'ui_link', - id: 'Couchbase metrics', - title: 'Couchbase metrics', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/couchbaseMetrics', - description: 'Fetch internal metrics from Couchbase.', - icons: [ - { - type: 'eui', - src: 'logoCouchbase', - }, - ], - shipper: 'beats', - eprOverlap: 'couchbase', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Dropwizard metrics', - title: 'Dropwizard metrics', - categories: ['elastic_stack', 'datastore'], - uiInternalPath: '/app/home#/tutorial/dropwizardMetrics', - description: 'Fetch internal metrics from Dropwizard Java application.', - icons: [ - { - type: 'eui', - src: 'logoDropwizard', - }, - ], - shipper: 'beats', - eprOverlap: 'dropwizard', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Elasticsearch metrics', - title: 'Elasticsearch metrics', - categories: ['elastic_stack', 'datastore'], - uiInternalPath: '/app/home#/tutorial/elasticsearchMetrics', - description: 'Fetch internal metrics from Elasticsearch.', - icons: [ - { - type: 'eui', - src: 'logoElasticsearch', - }, - ], - shipper: 'beats', - eprOverlap: 'elasticsearch', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Etcd metrics', - title: 'Etcd metrics', - categories: ['elastic_stack', 'datastore'], - uiInternalPath: '/app/home#/tutorial/etcdMetrics', - description: 'Fetch internal metrics from the Etcd server.', - icons: [ - { - type: 'eui', - src: 'logoEtcd', - }, - ], - shipper: 'beats', - eprOverlap: 'etcd', - isBeta: false, - }, - { - type: 'ui_link', - id: 'HAProxy metrics', - title: 'HAProxy metrics', - categories: ['network', 'web'], - uiInternalPath: '/app/home#/tutorial/haproxyMetrics', - description: 'Fetch internal metrics from the HAProxy server.', - icons: [ - { - type: 'eui', - src: 'logoHAproxy', - }, - ], - shipper: 'beats', - eprOverlap: 'haproxy', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Kafka metrics', - title: 'Kafka metrics', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/kafkaMetrics', - description: 'Fetch internal metrics from the Kafka server.', - icons: [ - { - type: 'eui', - src: 'logoKafka', - }, - ], - shipper: 'beats', - eprOverlap: 'kafka', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Kibana metrics', - title: 'Kibana metrics', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/kibanaMetrics', - description: 'Fetch internal metrics from Kibana.', - icons: [ - { - type: 'eui', - src: 'logoKibana', - }, - ], - shipper: 'beats', - eprOverlap: 'kibana', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Memcached metrics', - title: 'Memcached metrics', - categories: ['custom'], - uiInternalPath: '/app/home#/tutorial/memcachedMetrics', - description: 'Fetch internal metrics from the Memcached server.', - icons: [ - { - type: 'eui', - src: 'logoMemcached', - }, - ], - shipper: 'beats', - eprOverlap: 'memcached', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Munin metrics', - title: 'Munin metrics', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/muninMetrics', - description: 'Fetch internal metrics from the Munin server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/munin.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'munin', - isBeta: false, - }, - { - type: 'ui_link', - id: 'vSphere metrics', - title: 'vSphere metrics', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/vsphereMetrics', - description: 'Fetch internal metrics from vSphere.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/vsphere.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'vsphere', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Windows metrics', - title: 'Windows metrics', - categories: ['os_system', 'security'], - uiInternalPath: '/app/home#/tutorial/windowsMetrics', - description: 'Fetch internal metrics from Windows.', - icons: [ - { - type: 'eui', - src: 'logoWindows', - }, - ], - shipper: 'beats', - eprOverlap: 'windows', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Windows Event Log', - title: 'Windows Event Log', - categories: ['os_system', 'security'], - uiInternalPath: '/app/home#/tutorial/windowsEventLogs', - description: 'Fetch logs from the Windows Event Log.', - icons: [ - { - type: 'eui', - src: 'logoWindows', - }, - ], - shipper: 'beats', - eprOverlap: 'windows', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Golang metrics', - title: 'Golang metrics', - categories: ['google_cloud', 'cloud', 'network', 'security'], - uiInternalPath: '/app/home#/tutorial/golangMetrics', - description: 'Fetch internal metrics from a Golang app.', - icons: [ - { - type: 'eui', - src: 'logoGolang', - }, - ], - shipper: 'beats', - eprOverlap: 'golang', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Logstash metrics', - title: 'Logstash metrics', - categories: ['custom'], - uiInternalPath: '/app/home#/tutorial/logstashMetrics', - description: 'Fetch internal metrics from a Logstash server.', - icons: [ - { - type: 'eui', - src: 'logoLogstash', - }, - ], - shipper: 'beats', - eprOverlap: 'logstash', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Prometheus metrics', - title: 'Prometheus metrics', - categories: ['monitoring', 'datastore'], - uiInternalPath: '/app/home#/tutorial/prometheusMetrics', - description: 'Fetch metrics from a Prometheus exporter.', - icons: [ - { - type: 'eui', - src: 'logoPrometheus', - }, - ], - shipper: 'beats', - eprOverlap: 'prometheus', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Zookeeper metrics', - title: 'Zookeeper metrics', - categories: ['datastore', 'config_management'], - uiInternalPath: '/app/home#/tutorial/zookeeperMetrics', - description: 'Fetch internal metrics from a Zookeeper server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/zookeeper.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'zookeeper', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Uptime Monitors', - title: 'Uptime Monitors', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/uptimeMonitors', - description: 'Monitor services for their availability', - icons: [ - { - type: 'eui', - src: 'uptimeApp', - }, - ], - shipper: 'beats', - eprOverlap: 'uptime', - isBeta: false, - }, - { - type: 'ui_link', - id: 'AWS Cloudwatch logs', - title: 'AWS Cloudwatch logs', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/cloudwatchLogs', - description: 'Collect Cloudwatch logs with Functionbeat.', - icons: [ - { - type: 'eui', - src: 'logoAWS', - }, - ], - shipper: 'beats', - eprOverlap: 'aws', - isBeta: false, - }, - { - type: 'ui_link', - id: 'AWS metrics', - title: 'AWS metrics', - categories: ['aws', 'cloud', 'datastore', 'security', 'network'], - uiInternalPath: '/app/home#/tutorial/awsMetrics', - description: 'Fetch monitoring metrics for EC2 instances from the AWS APIs and Cloudwatch.', - icons: [ - { - type: 'eui', - src: 'logoAWS', - }, - ], - shipper: 'beats', - eprOverlap: 'aws', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Microsoft SQL Server Metrics', - title: 'Microsoft SQL Server Metrics', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mssqlMetrics', - description: 'Fetch monitoring metrics from a Microsoft SQL Server instance', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/mssql.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'mssql', - isBeta: false, - }, - { - type: 'ui_link', - id: 'NATS metrics', - title: 'NATS metrics', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/natsMetrics', - description: 'Fetch monitoring metrics from the Nats server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/nats.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'nats', - isBeta: false, - }, - { - type: 'ui_link', - id: 'NATS logs', - title: 'NATS logs', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/natsLogs', - description: 'Collect and parse logs created by Nats.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/nats.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'nats', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Zeek logs', - title: 'Zeek logs', - categories: ['network', 'monitoring', 'security'], - uiInternalPath: '/app/home#/tutorial/zeekLogs', - description: 'Collect Zeek network security monitoring logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/zeek.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'zeek', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CoreDNS metrics', - title: 'CoreDNS metrics', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/corednsMetrics', - description: 'Fetch monitoring metrics from the CoreDNS server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/coredns.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'coredns', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CoreDNS logs', - title: 'CoreDNS logs', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/corednsLogs', - description: 'Collect CoreDNS logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/coredns.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'coredns', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Auditbeat', - title: 'Auditbeat', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/auditbeat', - description: 'Collect audit data from your hosts.', - icons: [ - { - type: 'eui', - src: 'securityAnalyticsApp', - }, - ], - shipper: 'beats', - eprOverlap: 'auditbeat', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Iptables logs', - title: 'Iptables logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/iptablesLogs', - description: 'Collect iptables and ip6tables logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/linux.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'iptables', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Cisco logs', - title: 'Cisco logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/ciscoLogs', - description: 'Collect Cisco network device logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/cisco.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'cisco', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Envoy Proxy logs', - title: 'Envoy Proxy logs', - categories: ['elastic_stack', 'datastore'], - uiInternalPath: '/app/home#/tutorial/envoyproxyLogs', - description: 'Collect Envoy Proxy logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/envoyproxy.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'envoyproxy', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CouchDB metrics', - title: 'CouchDB metrics', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/couchdbMetrics', - description: 'Fetch monitoring metrics from the CouchdB server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/couchdb.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'couchdb', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Consul metrics', - title: 'Consul metrics', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/consulMetrics', - description: 'Fetch monitoring metrics from the Consul server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/consul.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'consul', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CockroachDB metrics', - title: 'CockroachDB metrics', - categories: ['security', 'network', 'web'], - uiInternalPath: '/app/home#/tutorial/cockroachdbMetrics', - description: 'Fetch monitoring metrics from the CockroachDB server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/cockroachdb.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'cockroachdb', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Traefik metrics', - title: 'Traefik metrics', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/traefikMetrics', - description: 'Fetch monitoring metrics from Traefik.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/traefik.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'traefik', - isBeta: false, - }, - { - type: 'ui_link', - id: 'AWS S3 based logs', - title: 'AWS S3 based logs', - categories: ['aws', 'cloud', 'datastore', 'security', 'network'], - uiInternalPath: '/app/home#/tutorial/awsLogs', - description: 'Collect AWS logs from S3 bucket with Filebeat.', - icons: [ - { - type: 'eui', - src: 'logoAWS', - }, - ], - shipper: 'beats', - eprOverlap: 'aws', - isBeta: false, - }, - { - type: 'ui_link', - id: 'ActiveMQ logs', - title: 'ActiveMQ logs', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/activemqLogs', - description: 'Collect ActiveMQ logs with Filebeat.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/activemq.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'activemq', - isBeta: false, - }, - { - type: 'ui_link', - id: 'ActiveMQ metrics', - title: 'ActiveMQ metrics', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/activemqMetrics', - description: 'Fetch monitoring metrics from ActiveMQ instances.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/activemq.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'activemq', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Azure metrics', - title: 'Azure metrics', - categories: ['azure', 'cloud', 'network', 'security'], - uiInternalPath: '/app/home#/tutorial/azureMetrics', - description: 'Fetch Azure Monitor metrics.', - icons: [ - { - type: 'eui', - src: 'logoAzure', - }, - ], - shipper: 'beats', - eprOverlap: 'azure', - isBeta: false, - }, - { - type: 'ui_link', - id: 'IBM MQ logs', - title: 'IBM MQ logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/ibmmqLogs', - description: 'Collect IBM MQ logs with Filebeat.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/ibmmq.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'ibmmq', - isBeta: false, - }, - { - type: 'ui_link', - id: 'IBM MQ metrics', - title: 'IBM MQ metrics', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/ibmmqMetrics', - description: 'Fetch monitoring metrics from IBM MQ instances.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/ibmmq.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'ibmmq', - isBeta: false, - }, - { - type: 'ui_link', - id: 'STAN metrics', - title: 'STAN metrics', - categories: ['message_queue', 'kubernetes'], - uiInternalPath: '/app/home#/tutorial/stanMetrics', - description: 'Fetch monitoring metrics from the STAN server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/stan.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'stan', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Envoy Proxy metrics', - title: 'Envoy Proxy metrics', - categories: ['elastic_stack', 'datastore'], - uiInternalPath: '/app/home#/tutorial/envoyproxyMetrics', - description: 'Fetch monitoring metrics from Envoy Proxy.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/envoyproxy.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'envoyproxy', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Statsd metrics', - title: 'Statsd metrics', - categories: ['message_queue', 'kubernetes'], - uiInternalPath: '/app/home#/tutorial/statsdMetrics', - description: 'Fetch monitoring metrics from statsd.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/statsd.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'statsd', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Redis Enterprise metrics', - title: 'Redis Enterprise metrics', - categories: ['datastore', 'message_queue'], - uiInternalPath: '/app/home#/tutorial/redisenterpriseMetrics', - description: 'Fetch monitoring metrics from Redis Enterprise Server.', - icons: [ - { - type: 'eui', - src: 'logoRedis', - }, - ], - shipper: 'beats', - eprOverlap: 'redisenterprise', - isBeta: false, - }, - { - type: 'ui_link', - id: 'OpenMetrics metrics', - title: 'OpenMetrics metrics', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/openmetricsMetrics', - description: 'Fetch metrics from an endpoint that serves metrics in OpenMetrics format.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/openmetrics.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'openmetrics', - isBeta: false, - }, - { - type: 'ui_link', - id: 'oracle metrics', - title: 'oracle metrics', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/oracleMetrics', - description: 'Fetch internal metrics from a Oracle server.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/oracle.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'oracle', - isBeta: false, - }, - { - type: 'ui_link', - id: 'IIS Metrics', - title: 'IIS Metrics', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/iisMetrics', - description: 'Collect IIS server related metrics.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/iis.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'iis', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Azure logs', - title: 'Azure logs', - categories: ['azure', 'cloud', 'network', 'security'], - uiInternalPath: '/app/home#/tutorial/azureLogs', - description: 'Collects Azure activity and audit related logs.', - icons: [ - { - type: 'eui', - src: 'logoAzure', - }, - ], - shipper: 'beats', - eprOverlap: 'azure', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Google Cloud metrics', - title: 'Google Cloud metrics', - categories: ['google_cloud', 'cloud', 'network', 'security'], - uiInternalPath: '/app/home#/tutorial/gcpMetrics', - description: - 'Fetch monitoring metrics from Google Cloud Platform using Stackdriver Monitoring API.', - icons: [ - { - type: 'eui', - src: 'logoGCP', - }, - ], - shipper: 'beats', - eprOverlap: 'gcp', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Auditd logs', - title: 'Auditd logs', - categories: ['os_system'], - uiInternalPath: '/app/home#/tutorial/auditdLogs', - description: 'Collect logs from the Linux auditd daemon.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/linux.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'auditd', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Barracuda logs', - title: 'Barracuda logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/barracudaLogs', - description: 'Collect Barracuda Web Application Firewall logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/barracuda.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'barracuda', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Bluecoat logs', - title: 'Bluecoat logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/bluecoatLogs', - description: 'Collect Blue Coat Director logs over syslog or from a file.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'bluecoat', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CEF logs', - title: 'CEF logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/cefLogs', - description: 'Collect Common Event Format (CEF) log data over syslog.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'cef', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Check Point logs', - title: 'Check Point logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/checkpointLogs', - description: 'Collect Check Point firewall logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/checkpoint.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'checkpoint', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CrowdStrike logs', - title: 'CrowdStrike logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/crowdstrikeLogs', - description: 'Collect CrowdStrike Falcon logs using the Falcon SIEM Connector.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/crowdstrike.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'crowdstrike', - isBeta: false, - }, - { - type: 'ui_link', - id: 'CylancePROTECT logs', - title: 'CylancePROTECT logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/cylanceLogs', - description: 'Collect CylancePROTECT logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/cylance.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'cylance', - isBeta: false, - }, - { - type: 'ui_link', - id: 'F5 logs', - title: 'F5 logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/f5Logs', - description: 'Collect F5 Big-IP Access Policy Manager logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/f5.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'f5', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Fortinet logs', - title: 'Fortinet logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/fortinetLogs', - description: 'Collect Fortinet FortiOS logs over syslog.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/fortinet.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'fortinet', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Google Cloud logs', - title: 'Google Cloud logs', - categories: ['google_cloud', 'cloud', 'network', 'security'], - uiInternalPath: '/app/home#/tutorial/gcpLogs', - description: 'Collect Google Cloud audit, firewall, and VPC flow logs.', - icons: [ - { - type: 'eui', - src: 'logoGoogleG', - }, - ], - shipper: 'beats', - eprOverlap: 'gcp', - isBeta: false, - }, - { - type: 'ui_link', - id: 'GSuite logs', - title: 'GSuite logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/gsuiteLogs', - description: 'Collect GSuite activity reports.', - icons: [ - { - type: 'eui', - src: 'logoGoogleG', - }, - ], - shipper: 'beats', - eprOverlap: 'gsuite', - isBeta: false, - }, - { - type: 'ui_link', - id: 'HAProxy logs', - title: 'HAProxy logs', - categories: ['network', 'web'], - uiInternalPath: '/app/home#/tutorial/haproxyLogs', - description: 'Collect HAProxy logs.', - icons: [ - { - type: 'eui', - src: 'logoHAproxy', - }, - ], - shipper: 'beats', - eprOverlap: 'haproxy', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Icinga logs', - title: 'Icinga logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/icingaLogs', - description: 'Collect Icinga main, debug, and startup logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/icinga.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'icinga', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Imperva logs', - title: 'Imperva logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/impervaLogs', - description: 'Collect Imperva SecureSphere logs over syslog or from a file.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'imperva', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Infoblox logs', - title: 'Infoblox logs', - categories: ['network'], - uiInternalPath: '/app/home#/tutorial/infobloxLogs', - description: 'Collect Infoblox NIOS logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/infoblox.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'infoblox', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Juniper Logs', - title: 'Juniper Logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/juniperLogs', - description: 'Collect Juniper JUNOS logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/juniper.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'juniper', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Kibana Logs', - title: 'Kibana Logs', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/kibanaLogs', - description: 'Collect Kibana logs.', - icons: [ - { - type: 'eui', - src: 'logoKibana', - }, - ], - shipper: 'beats', - eprOverlap: 'kibana', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Microsoft Defender ATP logs', - title: 'Microsoft Defender ATP logs', - categories: ['network', 'security', 'azure'], - uiInternalPath: '/app/home#/tutorial/microsoftLogs', - description: 'Collect Microsoft Defender ATP alerts.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/microsoft.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'microsoft', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MISP threat intel logs', - title: 'MISP threat intel logs', - categories: ['network', 'security', 'azure'], - uiInternalPath: '/app/home#/tutorial/mispLogs', - description: 'Collect MISP threat intelligence data with Filebeat.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/misp.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'misp', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MongoDB logs', - title: 'MongoDB logs', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mongodbLogs', - description: 'Collect MongoDB logs.', - icons: [ - { - type: 'eui', - src: 'logoMongodb', - }, - ], - shipper: 'beats', - eprOverlap: 'mongodb', - isBeta: false, - }, - { - type: 'ui_link', - id: 'MSSQL logs', - title: 'MSSQL logs', - categories: ['datastore'], - uiInternalPath: '/app/home#/tutorial/mssqlLogs', - description: 'Collect MSSQL logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/microsoft.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'mssql', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Arbor Peakflow logs', - title: 'Arbor Peakflow logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/netscoutLogs', - description: 'Collect Netscout Arbor Peakflow SP logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/netscout.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'netscout', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Office 365 logs', - title: 'Office 365 logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/o365Logs', - description: 'Collect Office 365 activity logs via the Office 365 API.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/o365.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'o365', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Okta logs', - title: 'Okta logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/oktaLogs', - description: 'Collect the Okta system log via the Okta API.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/okta.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'okta', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Palo Alto Networks PAN-OS logs', - title: 'Palo Alto Networks PAN-OS logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/panwLogs', - description: - 'Collect Palo Alto Networks PAN-OS threat and traffic logs over syslog or from a log file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/paloalto.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'panw', - isBeta: false, - }, - { - type: 'ui_link', - id: 'RabbitMQ logs', - title: 'RabbitMQ logs', - categories: ['message_queue'], - uiInternalPath: '/app/home#/tutorial/rabbitmqLogs', - description: 'Collect RabbitMQ logs.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/rabbitmq.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'rabbitmq', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Radware DefensePro logs', - title: 'Radware DefensePro logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/radwareLogs', - description: 'Collect Radware DefensePro logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/radware.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'radware', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Google Santa logs', - title: 'Google Santa logs', - categories: ['security', 'os_system'], - uiInternalPath: '/app/home#/tutorial/santaLogs', - description: 'Collect Google Santa logs about process executions on MacOS.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'santa', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Sonicwall FW logs', - title: 'Sonicwall FW logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/sonicwallLogs', - description: 'Collect Sonicwall-FW logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/sonicwall.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'sonicwall', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Sophos logs', - title: 'Sophos logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/sophosLogs', - description: 'Collect Sophos XG SFOS logs over syslog.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/sophos.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'sophos', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Squid logs', - title: 'Squid logs', - categories: ['security'], - uiInternalPath: '/app/home#/tutorial/squidLogs', - description: 'Collect Squid logs over syslog or from a file.', - icons: [ - { - type: 'eui', - src: 'logoLogging', - }, - ], - shipper: 'beats', - eprOverlap: 'squid', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Tomcat logs', - title: 'Tomcat logs', - categories: ['web', 'security'], - uiInternalPath: '/app/home#/tutorial/tomcatLogs', - description: 'Collect Apache Tomcat logs over syslog or from a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/tomcat.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'tomcat', - isBeta: false, - }, - { - type: 'ui_link', - id: 'Zscaler Logs', - title: 'Zscaler Logs', - categories: ['network', 'security'], - uiInternalPath: '/app/home#/tutorial/zscalerLogs', - description: 'This is a module for receiving Zscaler NSS logs over Syslog or a file.', - icons: [ - { - type: 'svg', - src: '/dqo/plugins/home/assets/logos/zscaler.svg', - }, - ], - shipper: 'beats', - eprOverlap: 'zscaler', - isBeta: false, - }, - { - type: 'ui_link', - id: 'apm', - title: 'APM', - categories: ['web'], - uiInternalPath: '/app/home#/tutorial/apm', - description: 'Collect in-depth performance metrics and errors from inside your applications.', - icons: [ - { - type: 'eui', - src: 'apmApp', - }, - ], - shipper: 'tutorial', - isBeta: false, - eprOverlap: 'apm', + uiInternalPath: '/', + eprOverlap: 'exp_beats', }, ]; diff --git a/x-pack/plugins/fleet/public/applications/integrations/hooks/use_local_search.tsx b/x-pack/plugins/fleet/public/applications/integrations/hooks/use_local_search.tsx index a8ed849f50a8a..458c4d94f9cd4 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/hooks/use_local_search.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/hooks/use_local_search.tsx @@ -14,7 +14,7 @@ export const searchIdField = 'id'; export const fieldsToSearch = ['name', 'title', 'description']; export function useLocalSearch(packageList: IntegrationCardItem[]) { - const localSearchRef = useRef(null); + const localSearchRef = useRef(new LocalSearch(searchIdField)); useEffect(() => { const localSearch = new LocalSearch(searchIdField); diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.stories.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.stories.tsx index bf9e4afb8c650..86b34f2415e2e 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.stories.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.stories.tsx @@ -32,5 +32,5 @@ export default { } as Meta; export const IntegrationPreference = () => { - return ; + return ; }; diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx index 43a5e60cf571f..ecc5c22c8d8ce 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx @@ -6,18 +6,27 @@ */ import React from 'react'; +import styled from 'styled-components'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { EuiPanel, EuiLink, EuiText, EuiForm, EuiRadioGroup, EuiSpacer } from '@elastic/eui'; +import { + EuiPanel, + EuiLink, + EuiText, + EuiForm, + EuiRadioGroup, + EuiSpacer, + EuiIconTip, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; -import { SHIPPER_DISPLAY } from '../../../../../../../../../src/plugins/custom_integrations/common'; - -export type IntegrationPreferenceType = 'beats' | 'agent'; +export type IntegrationPreferenceType = 'recommended' | 'beats' | 'agent'; interface Option { type: IntegrationPreferenceType; - label: string; + label: React.ReactNode; } export interface Props { @@ -37,30 +46,58 @@ const link = ( const title = ( ); -export const IntegrationPreference = ({ initialType, onChange }: Props) => { - const [idSelected, setIdSelected] = React.useState(initialType); +const recommendedTooltip = ( + +); + +const Item = styled(EuiFlexItem)` + padding-left: ${(props) => props.theme.eui.euiSizeXS}; +`; - const options: Option[] = [ - { - type: 'agent', - label: i18n.translate('xpack.fleet.epm.integrationPreference.elasticAgentLabel', { - defaultMessage: 'Elastic Agent (recommended)', - }), - }, - { - type: 'beats', - label: SHIPPER_DISPLAY.beats, - }, - ]; +const options: Option[] = [ + { + type: 'recommended', + label: ( + + + {i18n.translate('xpack.fleet.epm.integrationPreference.recommendedLabel', { + defaultMessage: 'Recommended', + })} + + + + + + ), + }, + { + type: 'agent', + label: i18n.translate('xpack.fleet.epm.integrationPreference.elasticAgentLabel', { + defaultMessage: 'Elastic Agent only', + }), + }, + { + type: 'beats', + label: i18n.translate('xpack.fleet.epm.integrationPreference.beatsLabel', { + defaultMessage: 'Beats only', + }), + }, +]; +export const IntegrationPreference = ({ initialType, onChange }: Props) => { + const [idSelected, setIdSelected] = React.useState(initialType); const radios = options.map((option) => ({ id: option.type, - ...option, + value: option.type, + label: option.label, })); return ( diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx index 812320261e77f..40f89346c25bf 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx @@ -5,10 +5,11 @@ * 2.0. */ -import React, { memo, useMemo } from 'react'; +import React, { memo, useMemo, useState } from 'react'; import { useLocation, useHistory, useParams } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; import _ from 'lodash'; +import { EuiHorizontalRule } from '@elastic/eui'; import { pagePathGetters } from '../../../../constants'; import { @@ -31,6 +32,9 @@ import type { IntegrationCardItem } from '../../../../../../../common/types/mode import { useMergeEprPackagesWithReplacements } from '../../../../hooks/use_merge_epr_with_replacements'; +import type { IntegrationPreferenceType } from '../../components/integration_preference'; +import { IntegrationPreference } from '../../components/integration_preference'; + import { mergeCategoriesAndCount } from './util'; import { ALL_CATEGORY, CategoryFacets } from './category_facets'; import type { CategoryFacet } from './category_facets'; @@ -96,11 +100,14 @@ const title = i18n.translate('xpack.fleet.epmList.allTitle', { // TODO: clintandrewhall - this component is hard to test due to the hooks, particularly those that use `http` // or `location` to load data. Ideally, we'll split this into "connected" and "pure" components. export const AvailablePackages: React.FC = memo(() => { + const [preference, setPreference] = useState('recommended'); useBreadcrumbs('integrations_all'); + const { selectedCategory, searchParam } = getParams( useParams(), useLocation().search ); + const history = useHistory(); const { getHref, getAbsolutePath } = useLink(); @@ -111,6 +118,7 @@ export const AvailablePackages: React.FC = memo(() => { })[1]; history.push(url); } + function setSearchTerm(search: string) { // Use .replace so the browser's back button is not tied to single keystroke history.replace( @@ -121,25 +129,32 @@ export const AvailablePackages: React.FC = memo(() => { const { data: eprPackages, isLoading: isLoadingAllPackages } = useGetPackages({ category: '', }); + const eprIntegrationList = useMemo( () => packageListToIntegrationsList(eprPackages?.response || []), [eprPackages] ); + const { value: replacementCustomIntegrations } = useGetReplacementCustomIntegrations(); + const mergedEprPackages: Array = useMergeEprPackagesWithReplacements( - eprIntegrationList || [], - replacementCustomIntegrations || [] + preference === 'beats' ? [] : eprIntegrationList, + preference === 'agent' ? [] : replacementCustomIntegrations || [] ); + const { loading: isLoadingAppendCustomIntegrations, value: appendCustomIntegrations } = useGetAppendCustomIntegrations(); + const eprAndCustomPackages: Array = [ ...mergedEprPackages, ...(appendCustomIntegrations || []), ]; + const cards: IntegrationCardItem[] = eprAndCustomPackages.map((item) => { return mapToCard(getAbsolutePath, getHref, item); }); + cards.sort((a, b) => { return a.title.localeCompare(b.title); }); @@ -147,6 +162,7 @@ export const AvailablePackages: React.FC = memo(() => { const { data: eprCategories, isLoading: isLoadingCategories } = useGetCategories({ include_policy_templates: true, }); + const categories = useMemo(() => { const eprAndCustomCategories: CategoryFacet[] = isLoadingCategories || !eprCategories @@ -169,16 +185,24 @@ export const AvailablePackages: React.FC = memo(() => { return null; } - const controls = categories ? ( - { - setSelectedCategory(id); - }} - /> - ) : null; + let controls = [ + , + , + ]; + + if (categories) { + controls = [ + { + setSelectedCategory(id); + }} + />, + ...controls, + ]; + } const filteredCards = cards.filter((c) => { if (selectedCategory === '') { diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/category_facets.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/category_facets.tsx index 2133ed05f23d5..9407e243c7ab5 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/category_facets.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/category_facets.tsx @@ -32,14 +32,6 @@ export interface Props { onCategoryChange: (category: CategoryFacet) => unknown; } -export interface Props { - showCounts: boolean; - isLoading?: boolean; - categories: CategoryFacet[]; - selectedCategory: string; - onCategoryChange: (category: CategoryFacet) => void; -} - export function CategoryFacets({ isLoading, categories, diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx index d08ba17878c52..2d1077f586a1a 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx @@ -12,10 +12,8 @@ import type { DynamicPage, DynamicPagePathValues, StaticPage } from '../../../.. import { INTEGRATIONS_ROUTING_PATHS, INTEGRATIONS_SEARCH_QUERYPARAM } from '../../../../constants'; import { DefaultLayout } from '../../../../layouts'; -import type { - CustomIntegration, - IntegrationCategory, -} from '../../../../../../../../../../src/plugins/custom_integrations/common'; +import type { IntegrationCategory } from '../../../../../../../../../../src/plugins/custom_integrations/common'; +import type { CustomIntegration } from '../../../../../../../../../../src/plugins/custom_integrations/common'; import type { PackageListItem } from '../../../../types'; @@ -34,7 +32,10 @@ export const getParams = (params: CategoryParams, search: string) => { const selectedCategory = category || ''; const queryParams = new URLSearchParams(search); const searchParam = queryParams.get(INTEGRATIONS_SEARCH_QUERYPARAM) || ''; - return { selectedCategory, searchParam }; + return { selectedCategory, searchParam } as { + selectedCategory: IntegrationCategory & ''; + searchParam: string; + }; }; export const categoryExists = (category: string, categories: CategoryFacet[]) => { diff --git a/x-pack/plugins/fleet/storybook/context/fixtures/packages.ts b/x-pack/plugins/fleet/storybook/context/fixtures/packages.ts index c16d23214555c..dfe8e905be089 100644 --- a/x-pack/plugins/fleet/storybook/context/fixtures/packages.ts +++ b/x-pack/plugins/fleet/storybook/context/fixtures/packages.ts @@ -19,6 +19,7 @@ export const response: GetPackagesResponse['response'] = [ path: '/package/ga/not_installed', id: 'ga_not_installed', status: 'not_installed', + categories: ['aws', 'azure'], }, { name: 'ga_beats', @@ -31,6 +32,7 @@ export const response: GetPackagesResponse['response'] = [ path: '/package/ga/not_installed/beats', id: 'ga_not_installed_beat', status: 'not_installed', + categories: ['azure', 'cloud', 'config_management'], }, { name: 'ga_installed', @@ -66,6 +68,7 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['cloud', 'containers'], }, { name: 'ga_installed_update', @@ -101,6 +104,7 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['cloud', 'crm', 'custom'], }, { name: 'beta_not_installed', @@ -125,6 +129,7 @@ export const response: GetPackagesResponse['response'] = [ path: '/package/beta/not_installed/beats', id: 'beta_beats', status: 'not_installed', + categories: ['datastore', 'elastic_stack', 'google_cloud'], }, { name: 'beta_installed', @@ -160,6 +165,7 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['elastic_stack', 'languages'], }, { name: 'beta_installed_update', @@ -195,6 +201,7 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['message_queue', 'monitoring'], }, { name: 'exp_not_installed', @@ -207,18 +214,28 @@ export const response: GetPackagesResponse['response'] = [ path: '/package/exp/not_installed', id: 'exp_not_installed', status: 'not_installed', + categories: ['monitoring', 'network', 'notification'], }, { - name: 'exp_not_installed', + name: 'exp_beats', title: 'j. Experimental, has Beats', version: '0.0.9', release: 'experimental', description: 'A package that is Experimental and not installed', type: 'integration', - download: '/epr/exp/not_installed', - path: '/package/exp/not_installed', - id: 'exp_not_installed', + download: '/epr/exp/not_installed/beats', + path: '/package/exp/not_installed/beats', + id: 'exp_beats', status: 'not_installed', + policy_templates: [ + { + name: '', + description: '', + title: '', + categories: ['datastore'], + }, + ], + categories: ['version_control', 'web'], }, { name: 'exp_installed', @@ -254,6 +271,7 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['os_system', 'productivity'], }, { name: 'exp_installed_update', @@ -289,5 +307,6 @@ export const response: GetPackagesResponse['response'] = [ updated_at: '2021-08-25T19:44:53.517Z', version: 'WzczMTIsNF0=', }, + categories: ['aws', 'cloud', 'elastic_stack'], }, ]; diff --git a/x-pack/plugins/fleet/storybook/context/fixtures/replacement_integrations.ts b/x-pack/plugins/fleet/storybook/context/fixtures/replacement_integrations.ts new file mode 100644 index 0000000000000..db3725ffe664c --- /dev/null +++ b/x-pack/plugins/fleet/storybook/context/fixtures/replacement_integrations.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CustomIntegration } from '../../../../../../src/plugins/custom_integrations/common'; + +export const integrations: CustomIntegration[] = [ + { + id: 'b.ga_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for a GA package that is not installed', + isBeta: false, + shipper: 'beats', + icons: [ + { + type: 'eui', + src: 'logoBeats', + }, + ], + title: 'b. GA, has Beats', + type: 'ui_link', + uiInternalPath: '/', + eprOverlap: 'ga_beats', + }, + { + id: 'f.beta_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for a beta package that is not installed', + isBeta: false, + shipper: 'beats', + icons: [ + { + type: 'eui', + src: 'logoBeats', + }, + ], + title: 'f. Beta, has Beats', + type: 'ui_link', + uiInternalPath: '/', + eprOverlap: 'beta_beats', + }, + { + id: 'j.exp_beats', + categories: ['azure', 'cloud', 'config_management'], + description: 'Beats for an experimental package that is not installed', + isBeta: false, + shipper: 'beats', + icons: [ + { + type: 'eui', + src: 'logoBeats', + }, + ], + title: 'j. Experimental, has Beats', + type: 'ui_link', + uiInternalPath: '/', + eprOverlap: 'exp_beats', + }, +]; diff --git a/x-pack/plugins/fleet/storybook/context/http.ts b/x-pack/plugins/fleet/storybook/context/http.ts index 31e97515ef686..f62970c0c0306 100644 --- a/x-pack/plugins/fleet/storybook/context/http.ts +++ b/x-pack/plugins/fleet/storybook/context/http.ts @@ -27,6 +27,7 @@ export const getHttp = (basepath = BASE_PATH) => { serverBasePath: basepath, }, get: (async (path: string, options: HttpFetchOptions) => { + action('get')(path, options); // TODO: all of this needs revision, as it's far too clunky... but it works for now, // with the few paths we're supporting. if (path === '/api/fleet/agents/setup') { diff --git a/x-pack/plugins/fleet/storybook/context/index.tsx b/x-pack/plugins/fleet/storybook/context/index.tsx index 6d563346e917d..c9c8e0be5d883 100644 --- a/x-pack/plugins/fleet/storybook/context/index.tsx +++ b/x-pack/plugins/fleet/storybook/context/index.tsx @@ -66,7 +66,10 @@ export const StorybookContext: React.FC<{ storyContext?: StoryContext }> = ({ setHttpClient(startServices.http); setCustomIntegrations({ getAppendCustomIntegrations: async () => [], - getReplacementCustomIntegrations: async () => [], + getReplacementCustomIntegrations: async () => { + const { integrations } = await import('./fixtures/replacement_integrations'); + return integrations; + }, }); const config = { diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 06f5e133f33b6..e0b55556e15a3 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -4908,6 +4908,16 @@ "visTypeMetric.colorModes.backgroundOptionLabel": "背景", "visTypeMetric.colorModes.labelsOptionLabel": "ラベル", "visTypeMetric.colorModes.noneOptionLabel": "なし", + "visTypeMetric.metricDescription": "計算結果を単独の数字として表示します。", + "visTypeMetric.metricTitle": "メトリック", + "visTypeMetric.params.color.useForLabel": "使用する色", + "visTypeMetric.params.rangesTitle": "範囲", + "visTypeMetric.params.settingsTitle": "設定", + "visTypeMetric.params.showTitleLabel": "タイトルを表示", + "visTypeMetric.params.style.fontSizeLabel": "ポイント単位のメトリックフォントサイズ", + "visTypeMetric.params.style.styleTitle": "スタイル", + "visTypeMetric.schemas.metricTitle": "メトリック", + "visTypeMetric.schemas.splitGroupTitle": "グループを分割", "expressionMetricVis.function.dimension.splitGroup": "グループを分割", "expressionMetricVis.function.bgFill.help": "html 16 進数コード(#123456)、html 色(red、blue)、または rgba 値(rgba(255,255,255,1))。", "expressionMetricVis.function.bucket.help": "バケットディメンションの構成です。", @@ -4923,16 +4933,6 @@ "expressionMetricVis.function.showLabels.help": "メトリック値の下にラベルを表示します。", "expressionMetricVis.function.subText.help": "メトリックの下に表示するカスタムテキスト", "expressionMetricVis.function.useRanges.help": "有効な色範囲です。", - "visTypeMetric.metricDescription": "計算結果を単独の数字として表示します。", - "visTypeMetric.metricTitle": "メトリック", - "visTypeMetric.params.color.useForLabel": "使用する色", - "visTypeMetric.params.rangesTitle": "範囲", - "visTypeMetric.params.settingsTitle": "設定", - "visTypeMetric.params.showTitleLabel": "タイトルを表示", - "visTypeMetric.params.style.fontSizeLabel": "ポイント単位のメトリックフォントサイズ", - "visTypeMetric.params.style.styleTitle": "スタイル", - "visTypeMetric.schemas.metricTitle": "メトリック", - "visTypeMetric.schemas.splitGroupTitle": "グループを分割", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.deprecation": "Visualizeの円グラフのレガシーグラフライブラリは廃止予定であり、8.0以降ではサポートされません。", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.description": "Visualizeで円グラフのレガシーグラフライブラリを有効にします。", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.name": "円グラフのレガシーグラフライブラリ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index d8c35485f2dbc..192dd21b4e80c 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -4953,6 +4953,16 @@ "visTypeMetric.colorModes.backgroundOptionLabel": "背景", "visTypeMetric.colorModes.labelsOptionLabel": "标签", "visTypeMetric.colorModes.noneOptionLabel": "无", + "visTypeMetric.metricDescription": "将计算结果显示为单个数字。", + "visTypeMetric.metricTitle": "指标", + "visTypeMetric.params.color.useForLabel": "将颜色用于", + "visTypeMetric.params.rangesTitle": "范围", + "visTypeMetric.params.settingsTitle": "设置", + "visTypeMetric.params.showTitleLabel": "显示标题", + "visTypeMetric.params.style.fontSizeLabel": "指标字体大小(磅)", + "visTypeMetric.params.style.styleTitle": "样式", + "visTypeMetric.schemas.metricTitle": "指标", + "visTypeMetric.schemas.splitGroupTitle": "拆分组", "expressionMetricVis.function.dimension.splitGroup": "拆分组", "expressionMetricVis.function.bgFill.help": "将颜色表示为 html 十六进制代码 (#123456)、html 颜色(red、blue)或 rgba 值 (rgba(255,255,255,1))。", "expressionMetricVis.function.bucket.help": "存储桶维度配置", @@ -4968,16 +4978,6 @@ "expressionMetricVis.function.showLabels.help": "在指标值下显示标签。", "expressionMetricVis.function.subText.help": "要在指标下显示的定制文本", "expressionMetricVis.function.useRanges.help": "已启用颜色范围。", - "visTypeMetric.metricDescription": "将计算结果显示为单个数字。", - "visTypeMetric.metricTitle": "指标", - "visTypeMetric.params.color.useForLabel": "将颜色用于", - "visTypeMetric.params.rangesTitle": "范围", - "visTypeMetric.params.settingsTitle": "设置", - "visTypeMetric.params.showTitleLabel": "显示标题", - "visTypeMetric.params.style.fontSizeLabel": "指标字体大小(磅)", - "visTypeMetric.params.style.styleTitle": "样式", - "visTypeMetric.schemas.metricTitle": "指标", - "visTypeMetric.schemas.splitGroupTitle": "拆分组", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.deprecation": "Visualize 中饼图的旧版图表库已弃用,自 8.0 后将不受支持。", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.description": "在 Visualize 中启用饼图的旧版图表库。", "visTypePie.advancedSettings.visualization.legacyPieChartsLibrary.name": "饼图旧版图表库",