github.com/outbrain/consul@v1.4.5/website/source/docs/commands/snapshot/agent.html.markdown.erb (about)

     1  ---
     2  layout: "docs"
     3  page_title: "Commands: Snapshot Agent"
     4  sidebar_current: "docs-commands-snapshot-agent"
     5  ---
     6  
     7  # Consul Snapshot Agent
     8  
     9  Command: `consul snapshot agent`
    10  
    11  ~> The [`agent`](/docs/commands/snapshot/agent.html) subcommand described here is
    12     available only in [Consul Enterprise](https://www.hashicorp.com/products/consul/)
    13     version 0.7.1 and later. All other [snapshot subcommands](/docs/commands/snapshot.html)
    14     are available in the open source version of Consul.
    15  
    16  The `snapshot agent` subcommand starts a process that takes snapshots of the
    17  state of the Consul servers and saves them locally, or pushes them to an
    18  optional remote storage service. This subcommand is only available in Consul
    19  Enterprise 0.7.1 and later.
    20  
    21  The agent can be run as a long-running daemon process or in a one-shot mode
    22  from a batch job, based on the [`-interval`](#interval) argument. Snapshotting
    23  a remote datacenter is only available in one-shot mode.
    24  
    25  As a long-running daemon, the agent will perform a leader election so multiple
    26  processes can be run in a highly available fashion with automatic failover. The
    27  agent will also register itself with Consul as a service, along with health
    28  checks that show the agent is alive ("Consul Snapshot Agent Alive") and able to
    29  take snapshots ("Consul Snapshot Agent Saving Snapshots"). The latter check is
    30  only added on agents who have become a leader, so it's possible for operators to
    31  tell which instances are alive and on standby and which instance has become
    32  leader and starting saving snapshots.
    33  
    34  As snapshots are saved, they will be reported in the log produced by the agent:
    35  
    36  ```
    37  2016/11/16 21:21:13 [INFO] Snapshot agent running
    38  2016/11/16 21:21:13 [INFO] Waiting to obtain leadership...
    39  2016/11/16 21:21:13 [INFO] Obtained leadership
    40  2016/11/16 21:21:13 [INFO] Saved snapshot 1479360073448728784
    41  ```
    42  
    43  The number shown with the saved snapshot is its ID, which is based on a UNIX
    44  timestamp with nanosecond resolution, so collisions are unlikely and IDs are
    45  monotonically increasing with time. This makes it easy to locate the latest
    46  snapshot, even if the log data isn't available. The snapshot ID always appears
    47  in the file name when using local storage, or in the object key when using
    48  remote storage.
    49  
    50  Snapshots can be restored using the
    51  [`consul snapshot restore`](/docs/commands/snapshot/restore.html) command, or
    52  the [HTTP API](/api/snapshot.html).
    53  
    54  If ACLs are enabled, a management token must be supplied in order to perform
    55  snapshot operations.
    56  
    57  ## Usage
    58  
    59  Usage: `consul snapshot agent [options]`
    60  
    61  #### API Options
    62  
    63  <%= partial "docs/commands/http_api_options_client" %>
    64  
    65  #### Config File Options:
    66  
    67  * `-config-dir` - Directory to look for JSON config files. Files will be read in
    68    alphabetical order and must end with the extension ".json". This won't
    69    recursively descend directories. This can be specified multiple times on the
    70    command line.
    71  
    72  * `-config-file` - File to read JSON configuration from. Files must end with the
    73    extension ".json". This can be specified multiple times on the command line.
    74  
    75    Config files referenced using `-config-dir` and `-config-file` have the following
    76    format (shown populated with default values):
    77  
    78  ```javascript
    79    {
    80      "snapshot_agent": {
    81        "http_addr": "127.0.0.1:8500",
    82        "token": "",
    83        "datacenter": "",
    84        "ca_file": "",
    85        "ca_path": "",
    86        "cert_file": "",
    87        "key_file": "",
    88        "tls_server_name": "",
    89        "log": {
    90          "level": "INFO",
    91          "enable_syslog": false,
    92          "syslog_facility": "LOCAL0"
    93        },
    94        "snapshot": {
    95          "interval": "1h",
    96          "retain": 30,
    97          "stale": false,
    98          "service": "consul-snapshot",
    99          "deregister_after": "72h",
   100          "lock_key": "consul-snapshot/lock",
   101          "max_failures": 3
   102        },
   103        "local_storage": {
   104          "path": "."
   105        },
   106        "aws_storage": {
   107          "access_key_id": "",
   108          "secret_access_key": "",
   109          "s3_region": "",
   110          "s3_bucket": "",
   111          "s3_key_prefix": "consul-snapshot",
   112          "s3_server_side_encryption":false,
   113          "s3_static_snapshot_name":""
   114        }
   115      }
   116    }
   117  ```
   118  
   119  All fields are optional, and config files without a `snapshot_agent` object will
   120  be ignored. At least one config file needs to have a `snapshot_agent` object, or the
   121  snapshot agent will fail to start. The Consul agent is set up to ignore any
   122  `snapshot_agent` object, so it's safe to use common config directories for both agents
   123  if desired.
   124  
   125  #### Snapshot Options
   126  
   127  * <a name="interval">`-interval`</a> - Interval at which to perform snapshots
   128    as a time with a unit suffix, which can be "s", "m", "h" for seconds, minutes,
   129    or hours. If 0 is provided, the agent will take a single snapshot and then exit,
   130    which is useful for running snapshots via batch jobs. Defaults to "1h"
   131  
   132  * `-lock-key` - A prefix in Consul's KV store used to coordinate between
   133    different instances of the snapshot agent order to only have one active instance
   134    at a time. For highly available operation of the snapshot agent, simply run
   135    multiple instances. All instances must be configured with the same lock key in
   136    order to properly coordinate. Defaults to "consul-snapshot/lock".
   137  
   138  * `-max-failures` - Number of snapshot failures after which the snapshot agent
   139    will give up leadership. In a highly available operation with multiple snapshot
   140    agents available, this gives another agent a chance to take over if an agent
   141    is experiencing issues, such as running out of disk space for snapshots.
   142    Defaults to 3.
   143  
   144  * `-retain` - Number of snapshots to retain. After each snapshot is taken, the
   145    oldest snapshots will start to be deleted in order to retain at most this many
   146    snapshots. If this is set to 0, the agent will not perform this and snapshots
   147    will accumulate forever. Defaults to 30.
   148  
   149  
   150  #### Agent Options
   151  
   152  * `-deregister-after` - An interval, after which if the agent is unhealthy it will be
   153    automatically deregistered from Consul service discovery. This is a time with a
   154    unit suffix, which can be "s", "m", "h" for seconds, minutes, or hours. If 0 is
   155    provided, this will be disabled. Defaults to "72h".
   156  
   157  * `-log-level` - Controls verbosity of snapshot agent logs. Valid options are
   158    "TRACE", "DEBUG", "INFO", "WARN", "ERR". Defaults to "INFO".
   159  
   160  * `-service` - The service name to used when registering the agent with Consul.
   161    Registering helps monitor running agents and the leader registers an additional
   162    health check to monitor that snapshots are taking place. Defaults to
   163    "consul-snapshot".
   164  
   165  * `-syslog` - This enables forwarding logs to syslog. Defaults to false.
   166  
   167  * `-syslog-facility` - Sets the facility to use for forwarding logs to syslog.
   168    Defaults to "LOCAL0".
   169  
   170  #### Local Storage Options
   171  
   172  * `-local-path` - Location to store snapshots locally. The default behavior
   173    of the snapshot agent is to store snapshots locally in this directory. Defaults
   174    to "." to use the current working directory. If an alternate storage option is
   175    configured, then local storage will be disabled and this option will be ignored.
   176  
   177  #### S3 Storage Options
   178  Note that despite the AWS references, any S3-compatible endpoint can be specified with `-aws-s3-endpoint`.
   179  
   180  * `-aws-access-key-id` and `-aws-secret-access-key` - These arguments supply
   181    authentication information for connecting to S3. These may also be supplied using
   182    the following alternative methods:<br>
   183    - `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables
   184    - A credentials file (`~/.aws/credentials` or the file at the path specified by the
   185      `AWS_SHARED_CREDENTIALS_FILE` environment variable)
   186    - ECS task role metadata (container-specific)
   187    - EC2 instance role metadata
   188  
   189  * `-aws-s3-bucket` - S3 bucket to use. Required for S3 storage, and setting this
   190    disables local storage. This should be only the bucket name without any
   191    part of the key prefix.
   192  
   193  * `-aws-s3-key-prefix` - Prefix to use for snapshot files in S3. Defaults to
   194     "consul-snapshot".
   195  
   196  * `-aws-s3-region` - S3 region to use. Required for S3 storage.
   197  
   198  * `-aws-s3-endpoint` - Optional S3 endpoint to use. Can also be specified using the
   199    AWS_S3_ENDPOINT environment variable.
   200  
   201  * `-aws-s3-server-side-encryption` - Enables saving snapshots to S3 using server side encryption with [Amazon S3-Managed Encryption Keys](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html)
   202  
   203  * `-aws-s3-static-snapshot-name` - If this is given, all snapshots are saved with the same file name. The agent will not rotate or versionize snapshots, and will save them with the same name each time.
   204                                     Use this if you want to rely on [S3's versioning capabilities](http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html) instead of the agent handling it for you.
   205  
   206  * `-aws-s3-enable-kms` - Enables using [Amazon KMS](https://aws.amazon.com/kms/) for encrypting snapshots.
   207  
   208  * `-aws-s3-kms-key` -  Optional Amazon KMS key to use, if this is not set the default KMS master key will be used. Set this if you want to manage key rotation yourself.
   209  
   210  #### S3 Required Permissions
   211  
   212  Different S3 permissions are required depending on the configuration of the snapshot agent. In particular extra permissions are required when
   213  snapshot rotation is enabled. S3 storage snapshot rotation is enabled when the `retain` configuration is greater than 0 and when there is
   214  no `aws-s3-static-snapshot-name` configured.
   215  
   216  | Permission           | Resource                           | When you need it                                |
   217  | -------------------- | ---------------------------------- | ----------------------------------------------- |
   218  | `PutObject`          | `arn:aws:s3:::<bucket name>/<key>` | Required for all operations.                    |
   219  | `DeleteObject`       | `arn:aws:s3:::<bucket name>/<key>` | Required only when snapshot rotation is enabled |
   220  | `ListBucket`         | `arn:aws:s3:::<bucket name>`       | Required only when snapshot rotation is enabled |
   221  | `ListBucketVersions` | `arn:aws:s3:::<bucket name>`       | Required only when snapshot rotation is enabled |
   222  
   223  Within the table `<key>` refers to the the key used to store the snapshot. When `aws-s3-static-snapshot-name` is configured the `<key>` is simply the value of that configuration. Otherwise the `<key>` will be the `<aws-s3-key-prefix configuration>/consul-*.snap`.
   224  
   225  The following example IAM policy document assumes that the `aws-s3-bucket` is `consul-data` with defaults for `aws-s3-key-prefix`, `aws-s3-static-snapshot-name` and `retain`:
   226  
   227  ```json
   228  {
   229    "Version": "2012-10-17",
   230    "Statement": [
   231      {
   232        "Sid": "",
   233        "Effect": "Allow",
   234        "Action": [
   235          "s3:PutObject",
   236          "s3:DeleteObject"
   237        ],
   238        "Resource": "arn:aws:s3:::consul-data/consul-snapshots/consul-*.snap"
   239      },
   240      {
   241        "Sid": "",
   242        "Effect": "Allow",
   243        "Action": [
   244          "s3:ListBucketVersions",
   245          "s3:ListBucket"
   246        ],
   247        "Resource": "arn:aws:s3:::consul-data"
   248      }
   249    ]
   250  }
   251  ```
   252  
   253  ## Examples
   254  
   255  Running the agent with no arguments will run a long-running daemon process that will
   256  perform leader election for highly available operation, register itself with Consul
   257  service discovery with health checks, take snapshots every hour, retain the last 30
   258  snapshots, and save snapshots into the current working directory:
   259  
   260  ```
   261  $ consul snapshot agent
   262  ```
   263  
   264  To run a one-shot backup, set the backup interval to 0. This will run a single snapshot
   265  and delete any old snapshots based on the retain settings, but it will not perform any
   266  leader election or service registration:
   267  
   268  ```
   269  $ consul snapshot agent -interval=0
   270  ```
   271  
   272  Please see the [HTTP API](/api/snapshot.html) documentation for
   273  more details about snapshot internals.