| OLD | NEW |
| (Empty) | |
| 1 LogDog Butler |
| 2 ============= |
| 3 |
| 4 The LogDog Butler runs on log-producing clients and manages the ingestion of |
| 5 log data from a read-forward stream, formatting and bundling it into [log |
| 6 protobufs](../../../api/logpb), and the transmission of those protobufs through |
| 7 the **Transport Layer** to **Collector** instances. |
| 8 |
| 9 The Butler is fairly configurable, and is capable of being used in multiple |
| 10 scenarios via its subcommands: |
| 11 |
| 12 * `stream`, which uploads the contents of a single log stream. |
| 13 * `serve`, which runs a Butler stream server instance. |
| 14 * `run`, which runs another command, instrumenting its enviornment and standard |
| 15 file descriptors for log streaming. |
| 16 |
| 17 ## Stream Servers |
| 18 |
| 19 The Butler, based on its configuration, may configure default streams. For |
| 20 example, when using the `run` subcommand, it has the option to connect the |
| 21 bootstrapped process' `STDOUT` and `STDERR` streams to LogDog streams. |
| 22 |
| 23 However, the Butler can also enable additional stream registration by |
| 24 instantiating a local **Stream Server** and exposing that to other applications. |
| 25 Those applications can then connect to the **Stream Server**, perform a minimial |
| 26 [handshake](../../butlerproto), and connect an additional stream to the Butler. |
| 27 |
| 28 Clients can use the [streamclient](../../butlerlib/streamclient) package to |
| 29 connect to a stream server and create Butler streams. Additional stream client |
| 30 packages are availalbe for other languages: |
| 31 |
| 32 * [Python](https://github.com/luci/luci-py/tree/master/client/libs/logdog) |
| 33 |
| 34 **Stream Servers** are created by specifying the `-streamserver-uri` parameter |
| 35 to LogDog. Stream server options vary by operating system. |
| 36 |
| 37 ### POSIX |
| 38 |
| 39 POSIX systems (Linux, Mac) support the following stream servers: |
| 40 |
| 41 * `unix:<path>`, where `path` is a filesystem path to a named UNIX domain socket |
| 42 to create. |
| 43 |
| 44 ### Windows |
| 45 |
| 46 Windows systems support the following stream servers: |
| 47 |
| 48 * `net.pipe:<name>`, where `name` is a valid Windows named pipe name. |
| 49 |
| 50 ## Production |
| 51 |
| 52 In production, each Butler instance will begin by registering a unique log |
| 53 stream Prefix with its **Coordinator** instance. The exchange will ensure that |
| 54 only that specific Butler instance may create log streams underneath of that |
| 55 Prefix. |
| 56 |
| 57 Production streaming can be requested by specifying the `logdog` Output option |
| 58 and associated parameters: |
| 59 |
| 60 ```shell |
| 61 $ logdog_butler -output logdog,host=<coordinator-host> ... |
| 62 ``` |
| 63 |
| 64 The Butler instance must be configured to use a service account that has |
| 65 **WRITE** permission for the target project. |
| 66 |
| 67 This will cause the Butler to perform prefix registration during its Output |
| 68 initialization, prior to any bootstrapping or streaming. |
| OLD | NEW |