# The start-all.sh Command

Scylla Monitoring Stack is container-based. The simplest way to configure and start the monitoring is with the start-all.sh command.

The start-all.sh script is a small utility that sets the dashboards and starts the containers with the appropriate configuration.

## General Options

**-h, –help** Help, Print the help, and exit.

**–version** print the current Scylla-Monitoring stack version, and exit.

**-l** local. Use the host network. This is important when one of the containers needs access to an application that runs on the host.
For example, when Scylla Manager runs on the localhost next to the monitoring.
Because the monitoring applications run inside containers by default, their local IP address (127.0.0.1) is the container’s local IP address.
You cannot use port mapping when using the `-l` flag

**-A bind-to-ip-address** Bind the listening-address to an explicit IP address.

**-D encapsulate docker param** Allows passing additional parameters to all the docker containers. For example, to start the monitoring containers with a specific network driver use -D “–net=network_name”.

**–auto-restart** When set, Docker will automatically restart all the services inside the containers in case of a failure.

**–compose** This is an experimental option. When set, it initiates a two-stage process. Firstly, a `docker-compose.yml` file is created along with an `.env` file. Following this, the script executes `docker-compose up`. Please note that having docker-compose is a prerequisite.

**–scrap scrap-interval** Allows changing Prometheus scrap interval.

**–quick-startup** When set, the script will not validate that each of the processes start correctly. The benefit is a quicker startup time. The lack of validation makes handling errors harder, use at your own risk.

**–alternator** When set, the monitoring stack starts with Alternator as the main dashboard.

**–archive /path/to/prometheus/data** Run the monitoring stack using downloaded data.

**–vector-search /path/to/vector-search/vector_search_servers.yml** Read metrics from a vector-search service machine. This will also include the
vector-search service dashboard. When used with –target-directory, the file path
is ignored and the file is expected to be named vector_search_servers.yml.

## Grafana Related Commands

**-G path/to/grafana data-dir** Use an external directory for the Grafana database.
This flag places the Grafana data directory outside of its container and, by doing that, makes it persistent.
This is only important if you are creating your own dashboards using the Grafana GUI and wish to keep them.
If not used, each run of the containers will clear all of Grafana’s information.

**-v comma-separated versions** Each Scylla version comes with its own set of dashboards. By default, Grafana starts with the two latest versions. The `-v` flag allows specifying a specific version or versions.

**-M scylla-manager version** Each Scylla-Manager version has its own dashboard. By default, Grafana starts with the latest Scylla Manager version.  The `-M` flag allows specifying a specific version.

**-j dashboard** Allows adding dashboards to Grafana. Multiple parameters are supported.

**-c Grafana environment variable** Use this parameter to override Grafana’s configuration settings.  The `-c` flag allows adding an environment variable to Grafana and, by doing so, alters its configuration.
How Grafana [Configuration](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#override-configuration-with-environment-variables) work. For example to enable the new navigation, you add -c ‘GF_FEATURE_TOGGLES_ENABLE=newNavigation’ to start-all.sh.

**-g Grafana port** Override the default Grafana port. This is done using port mapping. Note that port mapping does not work when using the host network.

**-a admin password** Allows specifying the admin password.

**-Q Grafana anonymous role** By default, anonymous users have admin privileges. That means they can create and edit dashboards. The `-Q` flag changes this behavior by setting the role privileges to one of Admin, Editor, or Viewer.

**–allow-embedding** Enable embedding Grafana dashboards in iframes. Sets the required cookie security settings for cross-origin embedding.

**–disable-embedding** Disable iframe embedding and use Grafana’s default cookie security settings (`X-Frame-Options: deny`). This is the default.

### Embedding Grafana Dashboards

By default, iframe embedding is disabled. To enable it, use one of:

* The `--allow-embedding` command-line flag
* Environment variables (`GF_SECURITY_ALLOW_EMBEDDING`, `GF_SECURITY_COOKIE_SECURE`, `GF_SECURITY_COOKIE_SAMESITE`)
* An `env.sh` file in the monitoring directory (sourced by `start-all.sh`)

Example `env.sh`:

```shell
GF_SECURITY_ALLOW_EMBEDDING=true
```

When embedding is enabled, the monitoring stack configures Grafana with:

```ini
[security]
allow_embedding = true
cookie_secure = true
cookie_samesite = none
```

These map to the following environment variables in the Grafana container:

```shell
GF_SECURITY_ALLOW_EMBEDDING=true
GF_SECURITY_COOKIE_SECURE=true
GF_SECURITY_COOKIE_SAMESITE=none
```

When embedding dashboards on a different site, Grafana must be served over HTTPS. `cookie_secure` and `cookie_samesite = none` are required for cross-origin iframes in modern browsers.

To embed a dashboard:

```html
<iframe src="https://your-grafana-host/d/d/<uid>/<slug>?orgId=1&kiosk"
        width="100%" height="600"></iframe>
```

### Grafana LDAP support

Grafana supports [LDAP](https://grafana.com/docs/grafana/latest/auth/ldap/) for authentication and authorization.

Use the `-P` flag to supply an LDAP configuration file.

**-P ldap-config-file**

## Prometheus Related Commands

**-d path/to/data-dir** Use an external directory for the Prometheus data directory.
This flag places the Prometheus data directory outside of its container and by doing that makes it persistent.

#### NOTE
Specifying an external directory is important for systems in production. Without it,
every restart of the monitoring stack will result in metrics lost.

**-p prometheus-port** Override the default Prometheus port, this is done using port mapping, note that port mapping does not work when using the host network.

**-b command-line options** Allow adding command-line options that will be passed to the Prometheus server.

**-s scylla-target-file** Specify the location of the Scylla target files. This file contains the IP addresses of the Scylla nodes.

**-n node-target-file** Scylla Monitoring Stack collects OS metrics (Disk, network, etc.) using an agent called node_exporter. By default, Scylla Monitoring Stack assumes that there is a node_exporter running beside each Scylla node, for situations that this is not the case, for example, Scylla runs inside a container and the relevant metrics are of the host machine, it is possible to specify a target file for the node_exporter agents.

**-N manager target file** Specify the location of the Scylla Manager target file.

**-R prometheus-alert-file** By default Prometheus alert rules are found in `prometheus.rules.yml` in the `prometheus` directory. The `-R` flag allows specifying a different location.

**-L manager-address** Using Scylla Manager **Consul** API to resolve the servers’ IP address. When using this option, Prometheus will ignore the target files even if they are explicitly passed in the command line.

**–evaluation-interval duration** Override the default recording rules evaluation-interval.

**–no-cas** An optimization for users who do not use cas, Prometheus will drop all cas related metrics while scrapping

**–no-cdc** An optimization for users who do not use cdc, Prometheus will drop all cdc related metrics while scrapping

**–target-directory** Bind a target directory instead of specific files.
This is safer when replacing files while a container is running.
When using this option, the following files need to be added explicitly:
scylla_servers.yml, node_exporter_servers.yml, scylla_manager_agents.yml,
scylla_manager_servers.yml, and vector_search_servers.yml (if using the vector service).

### Prometheus Retention Period

Prometheus retention period is set for two weeks by default. A common request is how to set it to something else.
It is also an opportunity to demonstrate how to set a Prometheus specific command line option.
Prometheus storage configuration is covered [here](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects).

For example to set the retention time to 30 days add `-b "--storage.tsdb.retention.time=30d"` to the `start-all.sh` command

## Alert Manager

The Alertmanager handles the alerts and takes the following parameters:

**-m alertmanager-port** Override the default Alertmanager port, this is done using port mapping, note that port mapping does not work when using the host network.

**-r alert-manager-config** By default, the Alertmanager takes its configuration from `rule_config.yml` in the `prometheus` directory. The `-r` flag overrides it to another file.prometheus

**-C alertmanager-commands** Allows adding an arbitrary command line to the alertmanager container starting command.
