summaryrefslogtreecommitdiff
path: root/packages/core/src/telemetry
AgeCommit message (Collapse)Author
2025-06-29Fix clearcut-logger.ts to event name GEMINI_CLI_API_RESPONSE_TOOL_TOK… (#1875)uttamkanodia14
2025-06-29Added obfuscated google account ID to clearcut log messages (#2593)Bryan Morgan
2025-06-29Remove debug logs that are not actionable but numerous (#2030)anj-s
2025-06-25fix(telemetry): handle all promise rejections in ClearcutLogger (#1557)zhiyue
Co-authored-by: Scott Densmore <[email protected]>
2025-06-24 Add the link to the privacy policy to the Usage Statistics section and ↵anj-s
remove debug logs (#1393)
2025-06-23Fix Clearcut logging wire format (#1359)owenofbrien
Fix for Clearcut logging wire format based on validation thread with Clearcut / Concord eng
2025-06-24Fix duplicate startSession logs and duplicate logging events over the wire ↵anj-s
(#1357)
2025-06-23Ensure telemetry events are flushed immediately (#1344)Jerop Kipruto
The previous implementation used `flushIfNeeded` to batch most telemetry events, but it was not reliably sending them, leading to data loss. Notably, the `startSession` event, which already used `flushToClearcut`, was working correctly, indicating an issue with the batching logic itself. This change replaces all calls to `flushIfNeeded` with `flushToClearcut` to align all event logging with the working `startSession` implementation and ensure that events are sent immediately. This prioritizes the reliability of data collection over network efficiency. This is a temporary solution to prevent further data loss. The underlying issue with the batching mechanism in `flushIfNeeded` should be investigated and fixed in the future, at which point this change can be reverted.
2025-06-23refactor: rename `disableDataCollection` to `dataCollectionEnabled` (#1319)Jerop Kipruto
Renames the `disableDataCollection` flag to the more intuitive and positive `dataCollectionEnabled`. This change improves code clarity by avoiding double negatives and making the purpose of the flag more direct. The logic has been inverted wherever the flag is used to accommodate the new naming convention. Using a suffix like `"Enabled"` follows a common convention that improves readability. - A condition like `if (dataCollectionEnabled)` reads like a natural language sentence ("if data collection is enabled"), which reduces cognitive load. - Distinguishes the boolean flag (representing a state) from potential functions that would perform an action (e.g., `enableDataCollection()` or `disableDataCollection()`), avoiding ambiguity between checking a value and calling a function. #750
2025-06-23Fix batch flush to Clearcut (#1337)Jerop Kipruto
Co-authored-by: Scott Densmore <[email protected]>
2025-06-23A couple of these log messages were now showing up every time on app startup ↵Jacob Richman
(#1335)
2025-06-23Enable clearcut logging by default (#1309)owenofbrien
Clearcut logging can now be disabled via disableDataCollection in user settings
2025-06-22Clearcut logging - initial implementation (#1274)owenofbrien
Flag-guarded initial implementation of a clearcut logger to collect telemetry data and send it to Concord for dashboards, etc.
2025-06-20fix: remove circular references in core package (#1271) (#1272)Brandon Keiji
2025-06-20Bug fix telemetry token count (#1250)Abhi
Co-authored-by: N. Taylor Mullen <[email protected]>
2025-06-19Auth First Run (#1207)matt korwel
Co-authored-by: Tommaso Sciortino <[email protected]> Co-authored-by: N. Taylor Mullen <[email protected]>
2025-06-18feat: consolidate sandbox configurations into a single object (#1154)Brandon Keiji
2025-06-15feat(test): Increase test coverage across CLI and Core packages (#1089)N. Taylor Mullen
2025-06-15Add file operation telemetry (#1068)Jerop Kipruto
Introduces telemetry for file create, read, and update operations. This change adds the `gemini_cli.file.operation.count` metric, recorded by the `read-file`, `read-many-files`, and `write-file` tools. The metric includes the following attributes: - `operation` (string: `create`, `read`, `update`): The type of file operation. - `lines` (optional, Int): Number of lines in the file. - `mimetype` (optional, string): Mimetype of the file. - `extension` (optional, string): File extension of the file. Here is a stacked bar chart of file operations by extension (`js`, `ts`, `md`): ![image](https://github.com/user-attachments/assets/3e8f8ea9-6155-4186-863c-075cc47647c5) Here is a stacked bar chart of file operations by type (`create`, `read`, `update`): ![image](https://github.com/user-attachments/assets/3fcf491d-31d0-4ba8-80e6-7fd2bd9c7c27) #750 cc @allenhutchison as discussed
2025-06-15Add telemetry command and refactor telemetry settings (#1060)Jerop Kipruto
#750 ### Telemetry Settings Refactors telemetry configuration to use a nested `telemetry` object in `settings.json`, for example: ```json { "telemetry": { "enabled": true, "target": "gcp" "log-prompts": "true" }, "sandbox": false } ``` The above includes - Centralized telemetry settings under a `telemetry` object in `settings.json`. - CLI flags for the `gemini` command to override all telemetry sub-settings: - `--telemetry` / `--no-telemetry` - `--telemetry-target <local|gcp>` - `--telemetry-otlp-endpoint <URL>` - `--telemetry-log-prompts` / `--no-telemetry-log-prompts` - Updates `packages/cli/src/config/config.ts` and `packages/core/src/config/config.ts` to read from the new settings structure and respect the new CLI flags. - Modifies `scripts/handle-telemetry.js`, `scripts/local_telemetry.js`, and `scripts/telemetry_utils.js` to align with the new settings structure. - Updates `docs/core/telemetry.md` to reflect the new settings structure, CLI flags, and order of precedence. - Renames `logUserPromptsEnabled` to `logPrompts` for brevity. ### `npm run telemetry` Add a new `npm run telemetry` command that uses `scripts/telemetry.js`, automates the entire process of setting up a local and GCP telemetry pipelines, including configuring the necessary settings in the `.gemini/settings.json` workspace file and installing required binaries (e.g. `otelcol-contrib`). --- ```shell $ npm run telemetry -- --target=gcp > [email protected] telemetry > node scripts/telemetry.js --target=gcp ⚙️ Using command-line target: gcp 🚀 Running telemetry script for target: gcp. ✨ Starting Local Telemetry Exporter for Google Cloud ✨ ⚙️ Enabled telemetry in workspace settings. 🔧 Set telemetry OTLP endpoint to http://localhost:4317. 🎯 Set telemetry target to gcp. ✅ Workspace settings updated. ✅ Using Google Cloud Project ID: foo-bar 🔑 Please ensure you are authenticated with Google Cloud: - Run `gcloud auth application-default login` OR ensure `GOOGLE_APPLICATION_CREDENTIALS` environment variable points to a valid service account key. - The account needs "Cloud Trace Agent", "Monitoring Metric Writer", and "Logs Writer" roles. ✅ otelcol-contrib already exists at /Users/jerop/github/gemini-cli/.gemini/otel/bin/otelcol-contrib 🧹 Cleaning up old processes and logs... ✅ Deleted old GCP collector log. 📄 Wrote OTEL collector config to /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.yaml 🚀 Starting OTEL collector for GCP... Logs: /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.log ⏳ Waiting for OTEL collector to start (PID: 17013)... ✅ OTEL collector started successfully on port 4317. ✨ Local OTEL collector for GCP is running. 🚀 To send telemetry, run the Gemini CLI in a separate terminal window. 📄 Collector logs are being written to: /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.log 📊 View your telemetry data in Google Cloud Console: - Logs: https://console.cloud.google.com/logs/query;query=logName%3D%22projects%2Ffoo-bar%2Flogs%2Fgemini_cli%22?project=foo-bar - Metrics: https://console.cloud.google.com/monitoring/metrics-explorer?project=foo-bar - Traces: https://console.cloud.google.com/traces/list?project=foo-bar Press Ctrl+C to exit. ^C 👋 Shutting down... ⚙️ Disabled telemetry in workspace settings. 🔧 Cleared telemetry OTLP endpoint. 🎯 Cleared telemetry target. ✅ Workspace settings updated. 🛑 Stopping otelcol-contrib (PID: 17013)... ✅ otelcol-contrib stopped. ```
2025-06-13Revert "Telemetry: Auto-export to GCP if GOOGLE_CLOUD_PROJECT is set" (#1011)Jerop Kipruto
2025-06-13cleanup unused `allowBuildArtifacts` (#1010)Anas H. Sulaiman
2025-06-13Telemetry: Auto-export to GCP if GOOGLE_CLOUD_PROJECT is set (#1003)Jerop Kipruto
This change simplifies telemetry setup for users who want to integrate with GCP, as they no longer need to configure a local collector or an explicit endpoint if their project is already set up in the environment. This change updates the telemetry system to automatically export traces, logs, and metrics to Google Cloud Platform (GCP) if the `GOOGLE_CLOUD_PROJECT` environment variable is set and no explicit `telemetryOtlpEndpoint` is configured by the user. Key changes: - The default `telemetryOtlpEndpoint` in `Config` is now an empty string. - The `initializeTelemetry` SDK logic now prioritizes: - User-defined `telemetryOtlpEndpoint`. - `GOOGLE_CLOUD_PROJECT` for direct GCP export. - Console exporters as a fallback. - If an invalid `telemetryOtlpEndpoint` is provided, it falls back to console exporters with a warning. #750
2025-06-13Handle telemetry in non-interactive mode (#1002)Jerop Kipruto
Changes: - Ensure proper shutdown in non-interactive mode - Ensures the initial user prompt is logged in non-interactive mode - Improve telemetry for streaming - handle chunks and input token count is now alongside other token counts in response To test: - Follow instructions in https://github.com/google-gemini/gemini-cli/blob/main/docs/core/telemetry.md#google-cloud - Run CLI in non-interactive mode and observe logs/metrics in GCP Logs Explorer and Metrics Explorer #750
2025-06-12Refactor OTEL logging for API calls (#991)Jerop Kipruto
Refactor OpenTelemetry logging for API requests, responses, and errors. Moved logging responsibility from GeminiClient to GeminiChat for more detailed logging. #750
2025-06-12telemetry: include user decisions in tool call logs (#966)Jerop Kipruto
Add the user's decision (accept, reject, modify) to tool call telemetry to better understand user intent. The decision provides crucial context to the `success` metric, as a user can reject a call that would have succeeded or accept one that fails. Also prettify the arguments json. Example: ![image](https://github.com/user-attachments/assets/251cb9fc-ceaa-4cdd-929c-8de47031aca8) #750
2025-06-11Telemetry: Improve clarity of user prompt event (#967)Jerop Kipruto
2025-06-11feat(telemetry): expand cli configuration eventjerop
Adds the following attributes to the event: - embedding_model - api_key_enabled - code_assist_enabled - debug_mode - mcp_servers This additional data will provide more insight into user configurations.
2025-06-11feat(telemetry): Update API response in telemetryjerop
Adds the text content of the API response to the telemetry event. This provides more context for debugging and analysis without logging the entire, potentially large, response object. - Adds an optional field to the type. - Updates to include the field in the logged attributes. - Modifies the to extract the response text using and pass it to the logger. - Adds a new test file for the telemetry loggers, including tests for the function to verify the new functionality.
2025-06-11refactor(telemetry): pass config object to telemetry functionsjerop
This commit refactors the telemetry system to pass a object to various logging and metrics functions. This change centralizes configuration management within the telemetry system, making it more modular and easier to maintain. The constructor and various tool execution functions have been updated to accept the object, which is then passed down to the telemetry functions. This eliminates the need to pass individual configuration values, such as , through multiple layers of the application.
2025-06-11update token usage with typesjerop
2025-06-11update from metrics and logs prefix from gemini_code to gemini_clijerop
2025-06-11refactor: Centralize session ID generation and propagationjerop
2025-06-10feat: enable gzip compression for otlp exportersjerop
2025-06-09Simplify user agent handling. (#828)Tommaso Sciortino
2025-06-07Introduce ContentGeneratorConfig (#826)Tommaso Sciortino
2025-06-07refactor: rename gemini-code to gemini-cli (#822)cperry-goog
2025-06-05OpenTelemetry Integration & Telemetry Control Flag (#762)Jerop Kipruto