diff --git a/alert-policies/pinecone-prometheus/PineconeIndexFullness.yml b/alert-policies/pinecone-prometheus/PineconeIndexFullness.yml new file mode 100644 index 0000000000..ae6844fe42 --- /dev/null +++ b/alert-policies/pinecone-prometheus/PineconeIndexFullness.yml @@ -0,0 +1,28 @@ +name: Pinecone Index Fullness + +description: |+ + - This metric indicates the index's fullness on a scale from 0 to 1 + - An alert is triggered if the value exceeds the 80% threshold + - Resolution: If it surpasses 80%, we need to add another replica or increase the pod size +type: STATIC +nrql: + query: "FROM Metric SELECT average(pinecone_index_fullness) AS '(%) index fullness ' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX " + +# Function used to aggregate the NRQL query value(s) for comparison to the terms.threshold (Default: SINGLE_VALUE) +valueFunction: SINGLE_VALUE + +# List of Critical and Warning thresholds for the condition +terms: + - priority: CRITICAL + # Operator used to compare against the threshold. + operator: ABOVE + # Value that triggers a violation + threshold: 0.8 + # Time in seconds; 120 - 3600 + thresholdDuration: 300 + # How many data points must be in violation for the duration + thresholdOccurrences: ALL + +# Duration after which a violation automatically closes +# Time in seconds; 300 - 2592000 (Default: 86400 [1 day]) +violationTimeLimitSeconds: 86400 \ No newline at end of file diff --git a/alert-policies/pinecone-prometheus/PineconeRequestsErrors.yml b/alert-policies/pinecone-prometheus/PineconeRequestsErrors.yml new file mode 100644 index 0000000000..a1480f7997 --- /dev/null +++ b/alert-policies/pinecone-prometheus/PineconeRequestsErrors.yml @@ -0,0 +1,27 @@ +name: Pinecone Request Errors + +description: |+ + - This metric displays the total count of data plane calls executed by clients that resulted in errors + - An alert is triggered if the value exceeds 0 +type: STATIC +nrql: + query: "FROM Metric SELECT latest(pinecone_request_error_count_total) AS 'request errors' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX" + +# Function used to aggregate the NRQL query value(s) for comparison to the terms.threshold (Default: SINGLE_VALUE) +valueFunction: SINGLE_VALUE + +# List of Critical and Warning thresholds for the condition +terms: + - priority: CRITICAL + # Operator used to compare against the threshold. + operator: ABOVE + # Value that triggers a violation + threshold: 1 + # Time in seconds; 120 - 3600 + thresholdDuration: 300 + # How many data points must be in violation for the duration + thresholdOccurrences: ALL + +# Duration after which a violation automatically closes +# Time in seconds; 300 - 2592000 (Default: 86400 [1 day]) +violationTimeLimitSeconds: 86400 \ No newline at end of file diff --git a/alert-policies/pinecone-prometheus/PineconeRequestsLatency.yml b/alert-policies/pinecone-prometheus/PineconeRequestsLatency.yml new file mode 100644 index 0000000000..3a3c8c3a65 --- /dev/null +++ b/alert-policies/pinecone-prometheus/PineconeRequestsLatency.yml @@ -0,0 +1,29 @@ +name: Pinecone Request Latency + +description: |+ + - This metric illustrates the server-side processing latency distribution for + Pinecone data plane calls + - An alert is triggered if the 50th percentile exceeds 100 ms + - Resolution: If it surpasses 100 ms, we need to add another replica +type: STATIC +nrql: + query: "FROM Metric SELECT percentile(pinecone_request_latency_seconds, 50) * 1000 as 'requests latency' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX" + +# Function used to aggregate the NRQL query value(s) for comparison to the terms.threshold (Default: SINGLE_VALUE) +valueFunction: SINGLE_VALUE + +# List of Critical and Warning thresholds for the condition +terms: + - priority: CRITICAL + # Operator used to compare against the threshold. + operator: ABOVE + # Value that triggers a violation + threshold: 100 + # Time in seconds; 120 - 3600 + thresholdDuration: 300 + # How many data points must be in violation for the duration + thresholdOccurrences: ALL + +# Duration after which a violation automatically closes +# Time in seconds; 300 - 2592000 (Default: 86400 [1 day]) +violationTimeLimitSeconds: 86400 \ No newline at end of file diff --git a/dashboards/pinecone-prometheus/pinecone-prometheus-01.png b/dashboards/pinecone-prometheus/pinecone-prometheus-01.png new file mode 100644 index 0000000000..f467992c42 Binary files /dev/null and b/dashboards/pinecone-prometheus/pinecone-prometheus-01.png differ diff --git a/dashboards/pinecone-prometheus/pinecone-prometheus-02.png b/dashboards/pinecone-prometheus/pinecone-prometheus-02.png new file mode 100644 index 0000000000..677726cf15 Binary files /dev/null and b/dashboards/pinecone-prometheus/pinecone-prometheus-02.png differ diff --git a/dashboards/pinecone-prometheus/pinecone-prometheus.json b/dashboards/pinecone-prometheus/pinecone-prometheus.json new file mode 100644 index 0000000000..a1dc62126e --- /dev/null +++ b/dashboards/pinecone-prometheus/pinecone-prometheus.json @@ -0,0 +1,463 @@ +{ + "name": "Pinecone (Prometheus)", + "description": "Monitoring for Prometheus Remote Write. Displays Prometheus server statistics, resulting metric cardinality and any errors during ingest.", + "pages": [ + { + "name": "Pinecone Monitoring Metrics", + "description": null, + "widgets": [ + { + "title": "", + "layout": { + "column": 1, + "row": 1, + "width": 2, + "height": 1 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.markdown" + }, + "rawConfiguration": { + "text": "\n\n![Logo](https://www.datanami.com/wp-content/uploads/2022/03/pinecone_logo.png)" + } + }, + { + "title": "Pinecone Requests Latency", + "layout": { + "column": 3, + "row": 1, + "width": 2, + "height": 1 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.billboard" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT percentile(pinecone_request_latency_seconds, 50)*1000 as 'requests latency' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX " + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "thresholds": [ + { + "alertSeverity": "CRITICAL", + "value": 100 + } + ] + } + }, + { + "title": "Pinecone Index Fullness", + "layout": { + "column": 5, + "row": 1, + "width": 2, + "height": 1 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.billboard" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT average(pinecone_index_fullness) AS '(%) index fullness ' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX " + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "thresholds": [ + { + "alertSeverity": "CRITICAL", + "value": 0.8 + } + ] + } + }, + { + "title": "Pinecone Requests Errors", + "layout": { + "column": 7, + "row": 1, + "width": 2, + "height": 1 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.billboard" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT latest(pinecone_request_error_count_total) AS 'request errors' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX" + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "thresholds": [ + { + "alertSeverity": "CRITICAL", + "value": 1 + } + ] + } + }, + { + "title": "Indexes", + "layout": { + "column": 9, + "row": 1, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.bar" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT count(index_name) WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' facet index_name LIMIT MAX" + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + }, + { + "title": "", + "layout": { + "column": 1, + "row": 2, + "width": 2, + "height": 5 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.markdown" + }, + "rawConfiguration": { + "text": "\n\n**About**\n\nInstrument your application with New Relic - [Add Data](https://one.newrelic.com/marketplace?account=3510613).\n\n[Please rate this dashboard](https://docs.google.com/forms/d/e/1FAIpQLSclR38J8WbbB2J1tHnllKUkzWZkJhf4SrJGyavpMd4t82NjnQ/viewform?usp=pp_url&entry.1615922415=Pinecone) here and let us know how we can improve it for you.\n\n##### Troubleshooting\n\nIf you don't see data, you may not be [configuring Prometheus to monitor itself](https://prometheus.io/docs/prometheus/latest/getting_started/#configuring-prometheus-to-monitor-itself). You should also check the '_New Relic Usage and Errors_' tab to look for any errors reported there. \n\nIn Prometheus, data from the write-ahead log (WAL) is sharded across in-memory queues before being sent to remote endpoints. Resource utilization is governed by the number of shards, number of samples per shard, and number of samples sent per request to an endpoint. For more information, consult the documentation on [remote write tuning](https://prometheus.io/docs/practices/remote_write/) .\n\n\n" + } + }, + { + "title": "", + "layout": { + "column": 3, + "row": 2, + "width": 6, + "height": 5 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.markdown" + }, + "rawConfiguration": { + "text": "# Pinecone Monitoring Metrics\n\n## Here, we focus on the three most important metrics for assessing the Pinecone's health.\n\n1. **pinecone_request_latency_seconds**:\n - This metric illustrates the server-side processing latency distribution for Pinecone data plane calls.\n - An alert is triggered if the 50th percentile exceeds 100 ms. If it surpasses 100 ms, we need to add another replica.\n\n2. **pinecone_index_fullness**:\n - This metric indicates the index's fullness on a scale from 0 to 1.\n - An alert is triggered if the value exceeds the 80% threshold. If it surpasses 80%, we need to add another replica or increase the pod size.\n\n3. **pinecone_request_error_count_total**:\n - This metric displays the total count of data plane calls executed by clients that resulted in errors.\n - An alert is triggered if the value exceeds 0." + } + }, + { + "title": "Metrics", + "layout": { + "column": 9, + "row": 4, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.bar" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT cardinality(metricName) WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' and metricName LIKE 'pinecone_%' FACET metricName LIMIT MAX" + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + }, + { + "title": "Total Pinecone Request Errors", + "layout": { + "column": 1, + "row": 7, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.line" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_request_error_count_total) AS 'request errors' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES" + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "yAxisLeft": { + "zero": true + } + } + }, + { + "title": "Pinecone Vector Count", + "layout": { + "column": 5, + "row": 7, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.line" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_vector_count) AS 'pinecone vector count' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES" + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "yAxisLeft": { + "zero": true + } + } + }, + { + "title": "Total Pinecone Requests", + "layout": { + "column": 9, + "row": 7, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.area" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_request_count_total) AS 'pinecone requests' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES " + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + }, + { + "title": "Pinecone Top 10 Index Fullness", + "layout": { + "column": 1, + "row": 10, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.bar" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT latest(pinecone_index_fullness) AS 'pinecone index fullness' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT 10 facet index_name" + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + }, + { + "title": "Pinecone Request Latency (seconds)", + "layout": { + "column": 5, + "row": 10, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.line" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT percentile(pinecone_request_latency_seconds,50,75,95,99) AS 'request latency seconds' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES minutes" + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "yAxisLeft": { + "zero": true + } + } + }, + { + "title": "Pinecone Request Latency seconds Sum", + "layout": { + "column": 9, + "row": 10, + "width": 4, + "height": 3 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.area" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_request_latency_seconds_sum) AS 'request latency seconds sum' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES" + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + }, + { + "title": "Timeseries by Metric", + "layout": { + "column": 1, + "row": 13, + "width": 6, + "height": 2 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.line" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_request_latency_seconds) AS 'request latency seconds',sum(pinecone_index_fullness) AS 'index fullness',sum(pinecone_request_count_total) AS 'total request count',sum(pinecone_request_latency_seconds_count) AS 'request latency seconds count',sum(pinecone_request_latency_seconds_sum) AS 'request latency seconds sum',sum(pinecone_vector_count) AS 'vector count' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES " + } + ], + "platformOptions": { + "ignoreTimeRange": false + }, + "yAxisLeft": { + "zero": true + } + } + }, + { + "title": "Pinecone Request Latency seconds Count", + "layout": { + "column": 7, + "row": 13, + "width": 6, + "height": 2 + }, + "linkedEntityGuids": null, + "visualization": { + "id": "viz.stacked-bar" + }, + "rawConfiguration": { + "facet": { + "showOtherSeries": false + }, + "legend": { + "enabled": true + }, + "nrqlQueries": [ + { + "accountIds": [], + "query": "FROM Metric SELECT sum(pinecone_request_latency_seconds_count) AS 'request latency seconds count' WHERE instrumentation.name = 'remote-write' and instrumentation.provider = 'prometheus' LIMIT MAX TIMESERIES" + } + ], + "platformOptions": { + "ignoreTimeRange": false + } + } + } + ] + } + ], + "variables": [] +} diff --git a/quickstarts/pinecone-prometheus/config.yml b/quickstarts/pinecone-prometheus/config.yml new file mode 100644 index 0000000000..f7a59c71f3 --- /dev/null +++ b/quickstarts/pinecone-prometheus/config.yml @@ -0,0 +1,48 @@ +slug: pinecone-prometheus +description: | + ## Why monitor Pinecone vector database? + Pinecone monitoring is essential for ensuring the smooth operation of your system and the delivery of accurate data insights. By monitoring Pinecone, you will be able to: + ### Tune performance: + Optimize Pinecone with detailed insights, address bottlenecks, reduce latency. + ### Scale as required: + Identify any potential scalability issues early on and take steps to address them. + ### Security: + Monitor unusual activities or security breaches, helping you identify and mitigate security threats promptly. + + ### Proactive Issue Detection: + Spot performance degradation or errors before they impact your application + ## Comprehensive monitoring quickstart for Pinecone + The Pinecone quickstart continuously monitors crucial performance indicators and metrics in real time to maintain peak system performance, detect and address potential issues before they escalate. + ## What’s included in the Pinecone quickstart? + New Relic Pinecone monitoring quickstart offers a range of out-of-the-box reports, including: + - Real-time insights into the performance of your Pinecone deployment + - Detection of performance bottlenecks and enhance Pinecone configuration to optimize performance + - Efficient troubleshooting of your Pinecone deployment with New Relic suite of tools + - Dashboard that shows Pinecone vector count, request count, request error count, request latency, index fullness, and more +summary: | + Implement monitoring and integrate your Pinecone application with New Relic for performance analysis and insights. +icon: logo.svg +level: New Relic +authors: + - New Relic +title: Pinecone (Prometheus) +documentation: + - name: Pinecone integration documentation + description: | + Implement monitoring and instrumentation for your Pinecone application, and ensure that your application's data is integrated into New Relic for effective performance analysis and insights. + url: https://docs.newrelic.com/docs/infrastructure/prometheus-integrations/install-configure-remote-write/set-your-prometheus-remote-write-integration/ +keywords: + - pinecone + - pinecone console + - vectorization + - vector database + - pinecone ai + - ai search + - machine learning + - deep learning +dataSourceIds: + - prometheus +dashboards: + - pinecone-prometheus +alertPolicies: + - pinecone-prometheus \ No newline at end of file diff --git a/quickstarts/pinecone-prometheus/logo.svg b/quickstarts/pinecone-prometheus/logo.svg new file mode 100644 index 0000000000..e2a0b688fa --- /dev/null +++ b/quickstarts/pinecone-prometheus/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file