diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ffdf0a1dd0..1e358c18bb 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -80,7 +80,8 @@ /hbase_regionserver/ @everpeace /hcp_vault/ @himran92 @codergs /hikaricp/ @bertaudamien -/jfrog_platform_self_hosted/ @jfrog/partner-engineering +/jfrog_platform_cloud/ @jfrog/partner-engineering @DataDog/ecosystems-review +/jfrog_platform_self_hosted/ @jfrog/partner-engineering @DataDog/ecosystems-review /instabug/ @AbdallahHemdan ahemdan@instabug.com @DataDog/ecosystems-review /invary/ @tim-invary @DataDog/ecosystems-review /ilert/ @yacut support@ilert.com @DataDog/ecosystems-review @@ -375,9 +376,12 @@ /isdown/*metadata.csv @ntomas support@isdown.app @DataDog/documentation @DataDog/ecosystems-review /isdown/manifest.json @ntomas support@isdown.app @DataDog/documentation @DataDog/ecosystems-review /isdown/README.md @ntomas support@isdown.app @DataDog/documentation @DataDog/ecosystems-review -/jfrog_platform_self_hosted/*metadata.csv @jfrog/partner-engineering @DataDog/documentation -/jfrog_platform_self_hosted/manifest.json @jfrog/partner-engineering @DataDog/documentation -/jfrog_platform_self_hosted/README.md @jfrog/partner-engineering @DataDog/documentation +/jfrog_platform_cloud/*metadata.csv @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review +/jfrog_platform_cloud/manifest.json @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review +/jfrog_platform_cloud/README.md @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review +/jfrog_platform_self_hosted/*metadata.csv @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review +/jfrog_platform_self_hosted/manifest.json @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review +/jfrog_platform_self_hosted/README.md @jfrog/partner-engineering @DataDog/documentation @DataDog/ecosystems-review /k6/*metadata.csv @ppcano support@k6.io @DataDog/documentation /k6/manifest.json @ppcano support@k6.io @DataDog/documentation /k6/README.md @ppcano support@k6.io @DataDog/documentation diff --git a/jfrog_platform_cloud/CHANGELOG.md b/jfrog_platform_cloud/CHANGELOG.md new file mode 100644 index 0000000000..39a885b3eb --- /dev/null +++ b/jfrog_platform_cloud/CHANGELOG.md @@ -0,0 +1,7 @@ +# CHANGELOG - JFrog Platform Cloud + +## 1.0.0 / 2023-12-04 + +***Added***: + +* Initial Release diff --git a/jfrog_platform_cloud/README.md b/jfrog_platform_cloud/README.md new file mode 100644 index 0000000000..b5c68c017b --- /dev/null +++ b/jfrog_platform_cloud/README.md @@ -0,0 +1,34 @@ +# Agent Check: JFrog Platform Cloud + +## Overview + +[JFrog](https://jfrog.com/) is a universal hybrid, end-to-end DevOps platform. JFrog Artifactory is the single solution for housing and managing all the artifacts, binaries, packages, files, containers, and components for use throughout your software supply chain. +JFrog Artifactory serves as your central hub for DevOps, integrating with your tools and processes to improve automation, increase integrity, and incorporate best practices along the way. + +JFrog's SaaS Log Streamer is a log streaming solution built by JFrog for SaaS customers. This solution will stream JFrog Artifactory logs from the customer's JFrog SaaS instance straight into their Datadog instance. + +Customers who use both JFrog and Datadog will be able to visualize Artifactory logs inside pre-configured Datadog dashboards. This integration also has built-in support for Datadog log pipelines which means logs streamed from JFrog will be preprocessed and automatically converted into the Datadog log format, allowing teams to uniquely name logs per their needs, drill down into Artifactory logs through searchable facets, and easily monitor their JFrog SaaS instance. + +At the initial release this integration will stream the following artifactory logs to Datadog: + +- **access-audit.log** +- **artifactory-request.log** +- **access-security-audit.log** + +These logs will allow customers to readily know who accessed what repositories and how often. The logs will also show what IP addresses accessed those repositories. Log types such as traffic.log, artifactory-access.log and more request logs will be added to this integration in future updates. + +## Setup + +**Note:** The integration requires JFrog Enterprise Plus subscription. + +### Installation + +Create [DataDog API key](https://app.datadoghq.com/organization-settings/api-keys). + +On the [MyJFrog Portal](https://my.jfrog.com), go to Settings -> JFrog Cloud Log Streaming - BETA, and enable the Log Streamer. +Select Datadog as the vendor. Add your Datadog API key, the Datadog intake URL for your [Datadog site](https://docs.datadoghq.com/getting_started/site/) (`https://http-intake.logs.datadoghq.com/api/v2/logs`), and `ddtags`. Click Save. +Your logs will start streaming into Datadog in 24 hours or less. + +## Support + +Need help? Contact [JFrog Support](https://support.jfrog.com/). \ No newline at end of file diff --git a/jfrog_platform_cloud/assets/dashboards/jfrog_platform_cloud_overview.json b/jfrog_platform_cloud/assets/dashboards/jfrog_platform_cloud_overview.json new file mode 100644 index 0000000000..f88060b87f --- /dev/null +++ b/jfrog_platform_cloud/assets/dashboards/jfrog_platform_cloud_overview.json @@ -0,0 +1,1709 @@ +{ + "title": "JFrog Platform Cloud", + "description": "The dashboard consolidates Artifactory `access-audit.log`, `artifactory-request.log` and `access-security-audit.log` to show HTTP Requests, Requests Logs, Operations and Audit Operations summary. ", + "widgets": + [ + { + "id": 5428031384897882, + "definition": + { + "type": "image", + "url": "https://media.jfrog.com/wp-content/uploads/2017/12/20133018/artifactory.png", + "sizing": "zoom" + }, + "layout": + { + "x": 0, + "y": 0, + "width": 4, + "height": 2 + } + }, + { + "id": 342325943651526, + "definition": + { + "type": "note", + "content": "JFrog Platform Cloud Log Analytics", + "background_color": "vivid_green", + "font_size": "36", + "text_align": "center", + "vertical_align": "center", + "show_tick": false, + "tick_pos": "50%", + "tick_edge": "bottom", + "has_padding": false + }, + "layout": + { + "x": 4, + "y": 0, + "width": 8, + "height": 1 + } + }, + { + "id": 7680307917471464, + "definition": + { + "type": "note", + "content": "This dashboard provides a high-level summary of the usage of the JFrog Artifactory Cloud instance. This includes an overview of access requests, and audit events as well as a summary of various operations performed on JFrog Artifactory. \n", + "background_color": "transparent", + "font_size": "14", + "text_align": "left", + "vertical_align": "center", + "show_tick": false, + "tick_pos": "50%", + "tick_edge": "left", + "has_padding": false + }, + "layout": + { + "x": 4, + "y": 1, + "width": 8, + "height": 1 + } + }, + { + "id": 7062113875348576, + "definition": + { + "title": "HTTP Requests", + "background_color": "vivid_green", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": + [ + { + "id": 8689810235081354, + "definition": + { + "title": "Artifactory Request Service Calls by HTTP Status", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@http.status_code", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "source:jfrog_artifactory service:jfrog.saas.rt.artifactory.request" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "dog_classic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 0, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 5148450235568604, + "definition": + { + "title": "Artifactory HTTP 5xx Errors", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query2" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query2", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@http.status_code", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "@http.status_code:5**" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 4, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 4889553931730096, + "definition": + { + "title": "Accessed Images", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": + [ + { + "response_format": "scalar", + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@image", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "source:jfrog_artifactory service:jfrog.saas.rt.artifactory.request -@image:\"\"" + }, + "storage": "hot" + } + ], + "formulas": + [ + { + "formula": "query1", + "limit": + { + "count": 10, + "order": "desc" + } + } + ] + } + ], + "custom_links": + [], + "style": + { + "scaling": "absolute" + } + }, + "layout": + { + "x": 8, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 2908928446042288, + "definition": + { + "title": "GET requests duration and request/response content length", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query2" + }, + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query1" + }, + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query3" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query2", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "avg", + "metric": "@duration" + }, + "group_by": + [], + "search": + { + "query": "@http.method:GET -@response_content_length:\"-1\"" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@response_content_length" + }, + "group_by": + [], + "search": + { + "query": "@http.method:GET -@response_content_length:\"-1\"" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query3", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@request_content_length" + }, + "group_by": + [], + "search": + { + "query": "@http.method:GET -@response_content_length:\"-1\"" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "orange", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 0, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 2681104632333994, + "definition": + { + "title": "POST requests duration and request/response content length", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query2" + }, + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query1" + }, + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query3" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query2", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "avg", + "metric": "@duration" + }, + "group_by": + [], + "search": + { + "query": "@http.method:POST -@response_content_length:\"-1\"" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@response_content_length" + }, + "group_by": + [], + "search": + { + "query": "@http.method:POST -@response_content_length:\"-1\"" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query3", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@request_content_length" + }, + "group_by": + [], + "search": + { + "query": "@http.method:POST -@response_content_length:\"-1\"" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "orange", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 4, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 3993886759854140, + "definition": + { + "title": "Top Requests by IP Address", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": + [ + { + "response_format": "scalar", + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@network.client.ip", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "source:jfrog_artifactory service:jfrog.saas.rt.artifactory.request -@network.client.ip:127.0.0.1" + }, + "storage": "hot" + } + ], + "formulas": + [ + { + "formula": "query1", + "limit": + { + "count": 10, + "order": "desc" + } + } + ] + } + ], + "style": + {} + }, + "layout": + { + "x": 8, + "y": 3, + "width": 4, + "height": 3 + } + } + ] + }, + "layout": + { + "x": 0, + "y": 2, + "width": 12, + "height": 7 + } + }, + { + "id": 7778958239985040, + "definition": + { + "title": "Request Logs", + "background_color": "vivid_green", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": + [ + { + "id": 2753182882123610, + "definition": + { + "title": "Upload IP's by Data Volume", + "type": "treemap", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@response_content_length" + }, + "group_by": + [ + { + "facet": "@network.client.ip", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "cardinality", + "metric": "@response_content_length" + } + } + ], + "search": + { + "query": "@response_content_length:>=0 service:jfrog.saas.rt.artifactory.request -@network.client.ip:127.0.0.1" + } + } + ], + "response_format": "scalar" + } + ] + }, + "layout": + { + "x": 0, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 2144407389885262, + "definition": + { + "title": "Accessed Repos", + "title_size": "16", + "title_align": "left", + "show_legend": false, + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@repo", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "@repo:*?* service:jfrog.saas.rt.artifactory.request" + } + } + ], + "response_format": "timeseries", + "style": + { + "palette": "dog_classic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": true, + "label": "", + "scale": "linear", + "min": "auto", + "max": "auto" + }, + "custom_links": + [] + }, + "layout": + { + "x": 4, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 1588173780881222, + "definition": + { + "title": "Download Data Transfers by Repo", + "type": "treemap", + "requests": + [ + { + "response_format": "scalar", + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@request_content_length" + }, + "group_by": + [ + { + "facet": "@repo", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "cardinality", + "metric": "@request_content_length" + } + } + ], + "search": + { + "query": "-@repo:\"\" service:jfrog.saas.rt.artifactory.request @image:*" + } + } + ], + "formulas": + [ + { + "formula": "query1" + } + ] + } + ] + }, + "layout": + { + "x": 8, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 2663839120063626, + "definition": + { + "title": "Download IP's by Data Volume", + "type": "treemap", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@request_content_length" + }, + "group_by": + [ + { + "facet": "@network.client.ip", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "cardinality", + "metric": "@request_content_length" + } + } + ], + "search": + { + "query": "@request_content_length:>0 service:jfrog.saas.rt.artifactory.request -@network.client.ip:127.0.0.1" + } + } + ], + "response_format": "scalar" + } + ] + }, + "layout": + { + "x": 0, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 5728484469490822, + "definition": + { + "title": "Accessed Images", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@image", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "@repo:*?* @image:* service:jfrog.saas.rt.artifactory.request" + } + } + ], + "response_format": "timeseries", + "style": + { + "palette": "cool", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": true, + "label": "", + "scale": "linear", + "min": "auto", + "max": "auto" + }, + "custom_links": + [] + }, + "layout": + { + "x": 4, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 6046676301037008, + "definition": + { + "title": "Upload Data Transfers by Repo", + "type": "treemap", + "requests": + [ + { + "response_format": "scalar", + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "cardinality", + "metric": "@response_content_length" + }, + "group_by": + [ + { + "facet": "@repo", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "cardinality", + "metric": "@response_content_length" + } + } + ], + "search": + { + "query": "-@repo:\"\" service:jfrog.saas.rt.artifactory.request @image:*" + } + } + ], + "formulas": + [ + { + "formula": "query1" + } + ] + } + ] + }, + "layout": + { + "x": 8, + "y": 3, + "width": 4, + "height": 3 + } + } + ] + }, + "layout": + { + "x": 0, + "y": 9, + "width": 12, + "height": 7 + } + }, + { + "id": 2477922006930220, + "definition": + { + "title": "Operations", + "background_color": "vivid_green", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": + [ + { + "id": 4547593150222648, + "definition": + { + "title": "Operations by Users", + "title_size": "16", + "title_align": "left", + "requests": + [ + { + "response_format": "scalar", + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@evt.name", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@evt.type", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@logged_principal", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "service:jfrog.saas.rt.access.security.audit -@logged_principal:*@*" + }, + "storage": "hot" + } + ], + "formulas": + [ + { + "formula": "query1" + } + ], + "style": + { + "palette": "datadog16" + } + } + ], + "type": "sunburst", + "legend": + { + "type": "table" + } + }, + "layout": + { + "x": 0, + "y": 0, + "width": 8, + "height": 3 + } + }, + { + "id": 697325418751468, + "definition": + { + "title": "Operations on Tokens", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@evt.name", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@entity_name", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "service:jfrog.saas.rt.access.security.audit @evt.name:TKN -@entity_name:*@*" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": false + }, + "custom_links": + [] + }, + "layout": + { + "x": 8, + "y": 0, + "width": 4, + "height": 3 + } + }, + { + "id": 7190308466599464, + "definition": + { + "title": "Operations on Permissions", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@evt.name", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "service:jfrog.saas.rt.access.security.audit @evt.name:PRM -@jfrog.entity_name:*@*" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": false + }, + "custom_links": + [] + }, + "layout": + { + "x": 0, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 4166798501049040, + "definition": + { + "title": "Operations on Users", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "number_format": + { + "unit": + { + "type": "canonical_unit" + } + }, + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@evt.type", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "service:jfrog.saas.rt.access.security.audit @evt.name:USR" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": false + }, + "markers": + [], + "custom_links": + [] + }, + "layout": + { + "x": 4, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 1718995079627460, + "definition": + { + "title": "Operations on Groups", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [ + { + "facet": "@evt.name", + "limit": 10, + "sort": + { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": + { + "query": "service:jfrog.saas.rt.access.security.audit @evt.name:GRP -@entity_name:*@*" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "bars" + } + ], + "yaxis": + { + "include_zero": false + }, + "custom_links": + [] + }, + "layout": + { + "x": 8, + "y": 3, + "width": 4, + "height": 3 + } + } + ] + }, + "layout": + { + "x": 0, + "y": 16, + "width": 12, + "height": 7 + } + }, + { + "id": 6912842210683506, + "definition": + { + "title": "Audit Operations", + "background_color": "vivid_green", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": + [ + { + "id": 5251851887096738, + "definition": + { + "title": "Artifactory Access Security Audit Events ", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [], + "search": + { + "query": "source:jfrog_artifactory service:jfrog.saas.rt.access.security.audit" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 0, + "y": 0, + "width": 6, + "height": 3 + } + }, + { + "id": 6324405992194226, + "definition": + { + "title": "Artifactory Access Audit Events ", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": + [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": + [ + { + "formulas": + [ + { + "formula": "query1" + } + ], + "queries": + [ + { + "data_source": "logs", + "name": "query1", + "indexes": + [ + "*" + ], + "compute": + { + "aggregation": "count" + }, + "group_by": + [], + "search": + { + "query": "source:jfrog_artifactory service:jfrog.saas.rt.access.audit" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": + { + "palette": "semantic", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": + { + "x": 6, + "y": 0, + "width": 6, + "height": 3 + } + } + ] + }, + "layout": + { + "x": 0, + "y": 23, + "width": 12, + "height": 4 + } + } + ], + "template_variables": + [], + "layout_type": "ordered", + "notify_list": + [], + "reflow_type": "fixed" +} \ No newline at end of file diff --git a/jfrog_platform_cloud/assets/images/ART.png b/jfrog_platform_cloud/assets/images/ART.png new file mode 100644 index 0000000000..5395621566 Binary files /dev/null and b/jfrog_platform_cloud/assets/images/ART.png differ diff --git a/jfrog_platform_cloud/assets/images/jfrog-platform-cloud.png b/jfrog_platform_cloud/assets/images/jfrog-platform-cloud.png new file mode 100755 index 0000000000..e5de78c1fa Binary files /dev/null and b/jfrog_platform_cloud/assets/images/jfrog-platform-cloud.png differ diff --git a/jfrog_platform_cloud/assets/service_checks.json b/jfrog_platform_cloud/assets/service_checks.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/jfrog_platform_cloud/assets/service_checks.json @@ -0,0 +1 @@ +[] diff --git a/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_0.png b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_0.png new file mode 100644 index 0000000000..8f2c1eb995 Binary files /dev/null and b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_0.png differ diff --git a/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_1.png b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_1.png new file mode 100644 index 0000000000..277e8ce9c7 Binary files /dev/null and b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_1.png differ diff --git a/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_2.png b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_2.png new file mode 100644 index 0000000000..79eceace56 Binary files /dev/null and b/jfrog_platform_cloud/images/jfrog_platform_cloud_logs_2.png differ diff --git a/jfrog_platform_cloud/manifest.json b/jfrog_platform_cloud/manifest.json new file mode 100644 index 0000000000..29c348cba8 --- /dev/null +++ b/jfrog_platform_cloud/manifest.json @@ -0,0 +1,64 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "798102cb-6c52-4a16-bc1b-48c2e6b54e71", + "app_id": "jfrog-platform-cloud", + "display_on_public_website": true, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "View and analyze JFrog Artifactory Cloud logs", + "title": "JFrog Platform Cloud", + "media": [ + { + "media_type": "image", + "caption": "JFrog Artifactory Logs dashboard - HTTP Requests", + "image_url": "images/jfrog_platform_cloud_logs_0.png" + }, + { + "media_type": "image", + "caption": "JFrog Artifactory Logs dashboard - Request Logs", + "image_url": "images/jfrog_platform_cloud_logs_1.png" + }, + { + "media_type": "image", + "caption": "JFrog Artifactory Logs dashboard - Operations", + "image_url": "images/jfrog_platform_cloud_logs_2.png" + } + ], + "classifier_tags": [ + "Category::Log Collection", + "Offering::Integration", + "Submitted Data Type::Logs", + "Supported OS::Linux", + "Supported OS::macOS", + "Supported OS::Windows", + "Category::Kubernetes", + "Category::Containers", + "Category::Security" + ] + }, + "assets": { + "dashboards": { + "JFrog Platform Cloud Log Analytics": "assets/dashboards/jfrog_platform_cloud_overview.json" + }, + "integration": { + "source_type_name": "JFrog Platform Cloud", + "configuration": {}, + "events": { + "creates_events": false + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + } + }, + "author": { + "support_email": "support@jfrog.com", + "name": "JFrog", + "homepage": "https://jfrog.com/", + "sales_email": "partners@jfrog.com" + }, + "oauth": {} +}