From d4a99f164c0fc513b31ee2142f6df16a3db70f65 Mon Sep 17 00:00:00 2001 From: JD Date: Wed, 27 Dec 2023 11:47:33 -0800 Subject: [PATCH] Article how live queries work (#15845) Article: Live queries under the hood. --- ...try-from-your-devices-with-live-queries.md | 74 ++++++++++++++++++ ...r-devices-with-live-queries-527x461@2x.png | Bin 0 -> 33779 bytes 2 files changed, 74 insertions(+) create mode 100644 articles/get-current-telemetry-from-your-devices-with-live-queries.md create mode 100644 website/assets/images/articles/get-current-telemetry-from-your-devices-with-live-queries-527x461@2x.png diff --git a/articles/get-current-telemetry-from-your-devices-with-live-queries.md b/articles/get-current-telemetry-from-your-devices-with-live-queries.md new file mode 100644 index 0000000000..91eede226d --- /dev/null +++ b/articles/get-current-telemetry-from-your-devices-with-live-queries.md @@ -0,0 +1,74 @@ +# Get current telemetry from your devices with live queries + + + +[Fleet](https://fleetdm.com/) is an open-source platform for managing and gathering telemetry from devices such as laptops, desktops, VMs, etc. [Osquery](https://www.osquery.io/) agents run on these devices and report to the Fleet server. One of Fleet’s features is the ability to query information from the devices in near real-time, called _live queries_. This article discusses how live queries work “under the hood.” + + +## Why a live query? + +Live queries enable administrators to ask near real-time questions of all online devices, such as checking the encryption status of SSH keys across endpoints, or obtaining the uptime of each server within their purview. This enables them to promptly identify and address any issues, thereby reducing downtime and maintaining operational efficiency. These tasks, which would be time-consuming and complex if done manually, are streamlined through live queries, offering real-time insights into the status and posture of the entire fleet of devices helping IT and security. + + +## Live queries under the hood + +Live queries can be run from the web UI, the command-line interface called `fleetctl`, or the REST API. The user creates a query and selects which devices will run that query. Here is an example using `fleetctl` to obtain the operating system name and version for all devices: + + +``` +fleetctl query --query "select name, version from os_version;" --labels "All Hosts" +``` + + +When a client initiates a live query, the server first creates a **Query Campaign** record in the MySQL database. A Fleet deployment consists of several servers behind a load balancer, so storing the record in the DB makes all servers aware of the new query campaign. + + +![Query campaign](../website/assets/images/articles/get-current-telemetry-from-your-devices-with-live-queries-527x461@2x.png +"Query campaign") + + +As devices called **Hosts** in Fleet check in with the servers, they receive instructions to run a query. For example: + + +``` +{ + "queries": { + "fleet_distributed_query_140": "SELECT name, version FROM os_version;" + }, + "discovery": { + "fleet_distributed_query_140": "SELECT 1" + } +} +``` + + +Then, the osquery agents run the actual query on their host, and write the result back to a Fleet server. As a server receives the result, it publishes it to the common cache using [Redis Pub/Sub](https://redis.io/docs/interact/pubsub/). + +Only the one server communicating with the client subscribes to the results. It processes the data from the cache, keeps track of how many hosts reported back, and communicates results back to the client. The web UI and `fleetctl` interfaces use a [WebSockets API](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API), and results are reported as they come in. The REST API, on the other hand, only sends a response after all online hosts have reported their query results. + + +## Discover more + +Fleet’s live query feature represents a powerful tool in the arsenal of IT and security administrators. By harnessing the capabilities of live queries, tasks that once required extensive manual effort can now be executed swiftly and efficiently. This real-time querying ability enhances operational efficiency and significantly bolsters security and compliance measures across a range of devices. + +The integration of Fleet with Osquery agents, the flexibility offered by interfaces like the web UI, `fleetctl`, and the REST API, and the efficient data handling through mechanisms like Redis Pub/Sub and WebSockets API all come together to create a robust, real-time telemetry gathering system. This system is designed to keep you informed about the current state of your device fleet, helping you make informed decisions quickly. + +As you reflect on the capabilities of live queries with Fleet, consider your network environment's unique challenges and needs. **What questions could live queries help you answer about your devices?** Whether it's security audits, performance monitoring, or compliance checks, live queries offer a dynamic solution to address these concerns. + +We encourage you to explore the possibilities and share your thoughts or questions. Perhaps you’re facing a specific query challenge or an innovative use case you’ve discovered. Whatever it may be, the world of live queries is vast and ripe for exploration. Join us in [Fleet’s Slack forums](https://fleetdm.com/support) to engage with a community of like-minded professionals and deepen your understanding of what live queries can achieve in your environment. + +API Documentation: + +* [Run live query with REST API](https://fleetdm.com/docs/rest-api/rest-api#run-live-query) +* [Run live query with WebSockets](https://github.com/fleetdm/fleet/blob/6fd06d648601edd89c01e25426e2e35ff2a8a37b/docs/Contributing/API-for-contributors.md#run-live-query) + + + + + + + + diff --git a/website/assets/images/articles/get-current-telemetry-from-your-devices-with-live-queries-527x461@2x.png b/website/assets/images/articles/get-current-telemetry-from-your-devices-with-live-queries-527x461@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a315087ada6012c429c70766077f29471b04b19 GIT binary patch literal 33779 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