This topic is about Microsatellites. If you installed Satellites previous to 4/06/2021, you are probably running Classic Satellites.

There are pricing implications to migrating to Microsatellites. Please speak with your Customer Success representative before migrating from Classic Satellites.

Installation and configuration of Lightstep Microsatellites vary, depending on if you’re installing to Docker, AWS/AMI, or Debian/Ubuntu, but all share the same configuration parameters. This topic describes each of these parameters. Read these topics for specific installation procedures, examples, and templates that you can use:

If the default port numbers work for you and you don’t require TLS, you need to modify only these parameters:

  • satellite_type: flavor (AWS/AMI only: be sure this is set to micro)

  • satellite_key
  • pool

Required parameters and highly recommended parameters are noted; all others are optional. Examples are shown using YAML files for Debian, Ubuntu, or AMI, and environment variables for Docker without Helm or a YAML file if using a Helm chart.

We prioritize Microsatellite configuration values as follows:
1. Any values found in flags are used if present.
2. Any values found in the file designated by the collector_base_config flag if present.
3. Any values found in the environment are used if present.
4. Any values found in the file designated by the COLLECTOR_BASE_CONFIG environment variable if present.

satellite_type

Needed for AWS/AMI only

Set this to micro

Determines whether you are installing a Microsatellite or a Classic Satellite.

Start tabs

Debian/Ubuntu/AMI

1
2
satellite_type:
  flavor: micro

Docker Env Vars

1
-e COLLECTOR_SATELLITE_TYPE_FLAVOR=micro

Docker with Helm

1
2
satellite_type:
  flavor: micro

End code tabs

span_fowarding buffer_size

REQUIRED

You can set the buffer size for spans forwarding to the Lightstep SaaS platform. We recommend setting this to 20,000 to avoid dropped spans.

Start tabs

Debian/Ubuntu/AMI

1
2
span_forwarding:      
  buffer_size: 20000

Docker Env Vars

1
-e COLLECTOR_SPAN_FORWARDING_BUFFER_SIZE=20000

Docker with Helm

1
2
span_forwarding:      
  buffer_size: 20000

End code tabs

Authentication

These parameters allow your Microsatellites to communicate with the Lightstep SaaS platform.

satellite_key

REQUIRED

This value authorizes a Microsatellite to communicate with the platform for span reporting. You can find or generate your Satellite key here. Copy and paste the key as the value for this parameter. Satellite keys expire after one year. You’ll need to replace this value when you generate a new one.

Start tabs

Debian/Ubuntu/AMI

1
satellite_key: your-satellite-key

Docker Env Vars

1
-e COLLECTOR_SATELLITE_KEY=your-satellite-key

Docker with Helm

1
2
3
4
satelliteKey: "your-satellite-key"
# OR if using a Kubernetes secret key
collector_satellite_key_secret_name: "your-satellite-key"
collector_satellite_key_secret_key: "your-satellite-key-secret"

End code tabs

Debugging

These parameters create IDs for your Microsatellites and pools for easy debugging.

pool

HIGHLY RECOMMENDED

A user-defined, human-readable name for this Microsatellite pool to facilitate troubleshooting. Lightstep uses this parameter to segment your traffic from other customers in metrics and logs. It is also displayed in the Lightstep UI as the Microsatellite pool name on the Satellite Pool Report page.

Guidelines:

  • DO use different names for Microsatellite pools that serve distinct Lightstep projects.
  • DO use different pool names for Microsatellites of different machine sizes or configuration settings. Try to keep individual instances within pools uniform.
  • DO use different names for Microsatellite pools in different regions.
  • DO use separate Microsatellite pool names for separate projects within Lightstep. This enables finer-grained tuning and optimization.

If you’re migrating from the Classic Satellites to Microsatellites, your pool can contain both types.

Start tabs

Debian/Ubuntu/AMI

1
pool: production-canary

Docker Env Vars

1
-e COLLECTOR_POOL=production-canary

Docker with Helm

1
collector_pool: rancher-satellite-pool

End code tabs

guid

HIGHLY RECOMMENDED

A user-defined, human-readable name for this Microsatellite instance. This ID is used to assist with matching Microsatellite information in the Lightstep application with instances running in your environment. The GUID allows you to identify individual Microsatellites within a pool. It’s displayed on the Satellites page when viewing a list of Microsatellites in a particular pool.

The GUID does not need to be the same as the AWS instance ID.

Guidelines:

  • DO provide a globally unique identifier.
  • DO use a value that maps directly to an instance in your environment.

Start tabs

Debian/Ubuntu/AMI

1
2
pool: ec2-19-211-35-1.compute-1.amazonaws.com
guid: 999.9.9.9

Docker Env Vars

1
2
-e COLLECTOR_POOL=production-canary
-e COLLECTOR_GUID=999.9.9.9

Docker with Helm

1
2
collector_pool: rancher-satellite-pool
guid: 999.9.9.9

End code tabs

Monitoring

Microsatellites can optionally export a set of StatsD-compatible metrics that allow you to monitor key indicators of a Microsatellite’s health. Read Understand StatsD Reporting Metrics for more info about Microsatellite monitoring and the metrics you can monitor.

statsd

REQUIRED if enabling monitoring

host

REQUIRED if enabling monitoring

This parameter sets the host for the StatsD agent.

Using localhost may not work. Use 127.0.0.1 instead.

Start tabs

Debian/Ubuntu/AMI

1
2
statsd:
  host: 127.0.0.1

Docker Env Vars

1
-e COLLECTOR_STATSD_HOST=127.0.0.1

End code tabs

port

REQUIRED if enabling monitoring

Port number for the StatsD agent.

Start tabs

Debian/Ubuntu/AMI

1
port: 8125

Docker Env Vars

1
-e COLLECTOR_STATSD_PORT=8125

End code tabs

export_statsd or export_dogstatsd

REQUIRED if enabling monitoring

You can export metrics to either StatsD or to Datadog. You can only set one of them. The StatsD export generates metrics in basic StatsD format and does not support any tags. The Datadog export generates metrics compatible with Datadog, with two default tags:

  • lightstep_project: Holds the Lightstep project name
  • satellite_type: Shows the type of Satellite reporting: either full or micro.

You can also add custom tags.

Start tabs

Debian/Ubuntu/AMI

1
2
3
export_statsd: true
# OR
export_dogstatsd: true

Docker Env Vars

1
2
3
-e COLLECTOR_STATSD_EXPORT_STATSD=true
# OR
-e COLLECTOR_STATSD_EXPORT_DOGSTATSD=true

End code tabs

dogstatsd_tags

OPTIONAL if using Datadog for monitoring

These are tags used by Datadog when reporting metrics.
All tags must:

  • Start with a letter
  • Must only contain ASCII alphanumerics (lowercase recommended), underscores, and periods

Start tabs

Debian/Ubuntu/AMI

1
dogstats_tags: "pool:us-west-1,canary:true"

Docker Env Vars

1
-e COLLECTOR_STATSD_DOGSTATSD_TAGS="pool:us-west-1,canary:true"

End code tabs

prefix

OPTIONAL

Metrics exported by the Microsatellite are named as follows: <prefix>.<satellite_prefix|client_prefix>.<metric_name>

By default, the prefix is empty. You can add this custom prefix to have it prepended to the name of all metrics.

All prefixes must:

  • Start with a letter
  • Only contain ASCII alphanumerics (lowercase recommended), underscores, and periods

Best Practice:
Set the prefix to lightstep, so you know that these are the Microsatellite metrics.

Start tabs

Debian/Ubuntu/AMI

1
prefix: "lightstep"

Docker Env Vars

1
-e COLLECTOR_STATSD_PREFIX=lightstep

End code tabs

satellite_prefix

OPTIONAL

Metrics exported by the Microsatellite are named as follows: <prefix>.<satellite_prefix|client_prefix>.<metric_name>

The satellite_prefix field has a default value of satellite and is included in the name of all metrics that reflect Microsatellite behavior. You can change that value.

Start tabs

Debian/Ubuntu/AMI

1
satellite_prefix: "satellite-canary"

Docker Env Vars

1
-e COLLECTOR_STATSD_SATELLITE_PREFIX=satellite-canary

End code tabs

client_prefix

OPTIONAL

Metrics exported by the Microsatellite are named as follows: <prefix>.<satellite_prefix|client_prefix>.<metric_name>

The client_prefix field is used to identify the tracer and has a default value of client. It’s included in the name of all metrics that reflect the Lightstep tracer behavior (as reported by the Microsatellite). You can change that value.

Start tabs

Debian/Ubuntu/AMI

1
client_prefix: "client-via-canary"

Docker Env Vars

1
-e COLLECTOR_STATSD_CLIENT_PREFIX=client-via-canary

End code tabs

Ports

These parameters configure the ports your tracers use to communicate with your Microsatellites.

Ports can’t be shared and must be unique.

Microsatellites support four reporting mechanisms:

  • JSON over HTTP
  • Thrift over HTTP
  • Protocol buffers over HTTP
  • Protocol buffers over gRPC (HTTP/2)

span ingest

REQUIRED

Set at least one of these ports to handle incoming span traffic.

plain_port

This port accepts unencrypted span traffic.

Start tabs

Debian/Ubuntu/AMI

1
plain_port: 8383

Docker Env Vars

1
-e COLLECTOR_PLAIN_PORT=port -p port:port

Docker with Helm

1
plain_port: 8383

End code tabs

secure_port

This port accepts encrypted span traffic.

Start tabs

Debian/Ubuntu/AMI

1
secure_port: 9393

Docker Env Vars

1
-e COLLECTOR_SECURE_PORT=port -p port:port

Docker with Helm

1
secure_port: 9393

End code tabs

diagnostic_port

REQUIRED

This port serves the /diagnostics endpoint, which provides a status page with diagnostic information about the Microsatellite.

The value is flexible and can be set to a different (unbound) port number as needed. The default is 8000.

Start tabs

Debian/Ubuntu/AMI

1
diagnostic_port: 8000

Docker Env Vars

1
-e COLLECTOR_DIAGNOSTIC_PORT=port -p port:port

Docker with Helm

1
diagnostic_port: 8000

End code tabs

admin

REQUIRED

These ports (plain_port and secure_port) are used for health checks and diagnostics and serve the following endpoints:

  • /_ready: Used by load balancers for health checks. A 200 (OK) response indicates that the Microsatellite is both responding and able to handle incoming span traffic.
  • /_live: Used by orchestration tools like Kubernetes for liveness checks. A 200 (OK) response indicates that the Microsatellite is alive and responding, and you should not terminate the instance. However, it makes no promises about Microsatellite health. It may be temporarily overloaded and not accepting spans.

plain_port

REQUIRED

This port is the plaintext admin port and must always be set to an open port number for Microsatellite diagnostics to work properly. This port is also the destination for unencrypted health/readiness checks from a load balancer or orchestration framework.

secure_port

OPTIONAL

This port is only required if sending encrypted health/readiness checks to the Microsatellite (this is not common). If set to a non-zero value, the tls_cert_prefix parameter must also be set.

Start tabs

Debian/Ubuntu/AMI

1
2
3
admin:
  plain_port: 8180
  secure_port: 9090

Docker Env Vars

1
2
-e COLLECTOR_ADMIN_PLAIN_PORT=port -p port:port
-e COLLECTOR_ADMIN_SECURE_PORT -p port:port

Docker with Helm

1
2
admin_plain_port: 8180
admin_secure_port: 9090

End code tabs

TLS

A TLS value is required if you are using any secure ports to provide TLS termination at the Microsatellite. When setting a secure port, you must make certificates available to the Microsatellite. Copy TLS certificates and a key to PATH.bundle.pem and PATH.key.pem and set the TLS certificate prefix to PATH. The prefix may contain /. The bundle file must contain a complete chain of certificates from a root (for example, PATH.bundle.pem is often the concatenation of .crt and .ca-bundle).

tls_cert_prefix

REQUIRED IF USING SECURE PORTS

This string gives the file path prefix for certificate files used in serving TLS connections on the Microsatellite.

This example assumes the certificate is located at /root/certs/mydomain.bundle.pem and /root/certs/mydomain.key.pem

Start tabs

Debian/Ubuntu/AMI

1
tls_cert_prefix: /root/certs/mydomain

Docker Env Vars

1
-e COLLECTOR_TLS_CERT_PREFIX=/root/certs/mydomain

Docker with Helm

1
tls_cert_prefix: "/root/certs/mydomain"

End code tabs

Single Project Mode

If you are only running one project in Lightstep, then instead of needing to pass in an access token, you can set your Microsatellites to single-project mode and they won’t expect the token.

disable_access_token_checking

OPTIONAL

Set this to true if you are running a single project in Lightstep and don’t want to have to pass your access token from your tracer to your Microsatellites.

project_name

REQUIRED IF DISABLE_ACCESS_TOKEN_CHECKING IS SET TO TRUE

The name of the project in Lightstep.

Start tabs

Debian/Ubuntu/AMI

1
2
disable_access_token_checking: true
project_name: "My Project"

Docker Env Vars

1
2
COLLECTOR_DISABLE_ACCESS_TOKEN_CHECKING=true
COLLECTOR_PROJECT_NAME=${PROJECT}

Docker with Helm

1
2
disable_access_token_checking: true
project_name: "My Project"

End code tabs

Ingestion Tags

Ingestions tags are static tags added to all spans received by the Microsatellite.

ingestion_tags

OPTIONAL

A comma-separated name/value pair list of tags/values. These tags are static - the same tag and value is applied to every span the Microsatellite receives.

Start tabs

Debian/Ubuntu/AMI

1
ingestion_tags: myTagKey1:myTagValue1,myTagKey2:myTagValue2

Docker Env Vars

1
COLLECTOR_INGESTION_TAGS=myTagKey1:myTagValue1,myTagKey2:myTagValue2

Docker with Helm

1
collector_ingestion_tags: "myTagKey1:myTagValue1,myTagKey2:myTagValue2"

End code tabs

Receivers

When you use an OpenTracing auto-installer for instrumentation, you may end up with non human-readable operation names, or operation names that don’t make sense. This can happen because the auto-installer is getting the name from a parameter in Datadog (the original owner of the installer) that might not be appropriate for your language. You can set that parameter to different values to see if that results in better operation names.

You can use either the resource or the name parameter, or both.

Which to use (or if using the both, the order to use) depends on the language of the installer. Refer to the Datadog docs for more info.

operation_name_extractors

OPTIONAL

Set the parameter to either resource, name, or both. If you set both, the order of the values matters. Lightstep tries to extract a name from the first variable value. If one isn’t found, it looks for the second value and uses that.

This parameter can only be used with YAML configuration.

Start tabs

Debian/Ubuntu/AMI

1
2
3
4
5
receivers:
  datadog:
    operation_name_extractors:
  	  - resource
  	  - name

End code tabs

Sampling

By default, Microsatellites collect 100% of the trace data emitted by your instrumentation. If you wish to reduce the number of spans sent to the platform for cost reasons, you can configure your Microsatellites to sample data.

If you decide to use this parameter, you will lose data. Microsatellites base sampling on trace_id to ensure that only full traces are sent. Spans in the same trace will either all be sent or all be dropped. Stream statistics remain accurate.

sample_one_in_n

OPTIONAL (should be used only when necessary)

This parameter allows you to send only a percentage of span data to the platform. When this parameter is set to a value greater than 0, the Microsatellite will send 1 out of every N spans. For example, if sample_one_in_n is set to 10, the Microsatellite will send only 1 out of every 10 spans, or 10% of all spans.

This setting must be the same on all Microsatellites in the pool to avoid broken traces.

Start tabs

Debian/Ubuntu/AMI

1
sample_one_in_n: 10

Docker Env Vars

1
COLLECTOR_SAMPLE_ONE_IN_N=10

Docker with Helm

1
sample_one_in_n: 10

End code tabs

Use the API to Set Sampling

If you want to control sampling programmatically (for example, to increase sampling at particular times during the day), you can use the Lightstep API to set the sample_one_in_n parameter.

You will need an API key to access the API. You will also need to know the Lightstep organization and project name to make the request. Your organization name and project name can be found on the Project Settings page.

Set the Parameter

Set the sample_one_in_n parameter

1
2
3
4
5
6
7
8
9
10
11
curl --location --request POST 'https://api.lightstep.com/public/v0.2/<YOUR_ORGNAIZATION>/projects/<PROJECT_NAME>/sampling-rate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_API_TOKEN>' \
--data-raw '{
   "data": {
       "attributes": {
           "sample_one_in_n": <VALUE>
       }
   }
}'

To turn off sampling, set the parameter to 1.

Get the Parameter

Get the sample_one_in_n parameter

1
2
3
4
curl --location --request GET 'https://api.lightstep.com/public/v0.2/<YOUR_ORGNAIZATION>/projects/<PROJECT_NAME>/sampling-rate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_API_TOKEN>' \