maelstromd Environment Variables

  • maelstromd configuration is done via environment variables.
  • All variables (except LOGXI vars) are prefixed with MAEL_.
  • All variables are upper case
  • Variables are bound to the Config struct in config.go using envconfig

Logging

maelstromd uses mgutz/logxi for logging, which has a set of environment variables that control the logging format. Please read the logxi docs for more details.

Variable Description Example
LOGXI Sets log levels LOGXI=*=DBG
LOGXI_FORMAT Sets format for logger LOGXI_FORMAT=text
LOGXI_COLORS Color schema for log levels LOGXI_COLORS=TRC,DBG,WRN=yellow,INF=green,ERR=red

HTTP

Variable Description Required? Default
MAEL_PUBLIC_PORT HTTP port to bind to for external HTTP reqs No 80
MAEL_PUBLIC_HTTPS_PORT HTTP port to bind to for external HTTPS reqs No 443
MAEL_PRIVATE_PORT HTTP port to bind to for internal HTTP reqs (node to node and RPC calls) No 8374
MAEL_PRIVATE_TLS_DIR Directory containing .key and .crt TLS keys for private port No None
MAEL_HTTP_READ_TIMEOUT Max duration (seconds) for reading the request (including body) No 300
MAEL_HTTP_WRITE_TIMEOUT Duration (seconds) before timing out writes of the response No 310
MAEL_HTTP_IDLE_TIMEOUT Max time to wait (seconds) for next req when keep-alives are enabled No 310

Database

Variable Description Required? Default
MAEL_SQL_DRIVER sql db driver to use (sqlite3, mysql) Yes None
MAEL_SQL_DSN DSN for maelstrom sql db Yes None

Example DSNs:

Driver Project Example DSN
sqlite3 go-sqlite3 file:test.db?cache=shared&mode=memory
mysql go-sql-driver/mysql user:passwd@(hostname:3306)/mael
postgres lib/pq postgres://user:passwd@host:port/mael

Refresh Intervals

Variable Description Required? Default
MAEL_CRON_REFRESH_SECONDS Interval to reload cron rules from db No 60

System Resources

Variable Description Required? Default
MAEL_TOTAL_MEMORY Memory (MiB) to make available to containers No System total memory
MAEL_DOCKER_PRUNE_MINUTES Interval to run the docker image pruner No 0 (off)
MAEL_DOCKER_PRUNE_UNREG_IMAGES If true, remove images not associated with components No false
MAEL_DOCKER_PRUNE_UNREG_KEEP Comma separated list of image tags to never delete No None

Read more about Docker image pruning

System Management

Variable Description Required? Default
MAEL_INSTANCE_ID ID of instance with VM provider (e.g. EC2 instance id) No 1 None
MAEL_NODE_LIVENESS_SECONDS If a node doesn’t report status within this interval it will be removed from the cluster No 300
MAEL_SHUTDOWN_PAUSE_SECONDS Seconds to pause before stopping containers at shutdown No 0
MAEL_TERMINATE_COMMAND Command to run if instance terminated. Only invoked if AWS lifecycle termination runs, not if SIGTERM/SIGINT received. No None
MAEL_AWS_TERMINATE_QUEUE_URL SQS queue URL for lifecycle hook termination queue No 1 None
MAEL_AWS_TERMINATE_MAX_AGE_SECONDS SQS messages older than this many seconds will be automatically deleted. This prevents stale messages from getting stuck in the queue. No 600
MAEL_AWS_SPOT_TERMINATE_POLL_SECONDS If > 0, maelstromd will poll EC2 metadata endpoint checking for spot termination requests. If action=stop or terminate, maelstromd will shutdown gracefully. Value of setting sets the polling interval in seconds. No 0

1: Required for AWS Auto Scale Lifecycle Hook support

Debugging

Variable Description Required? Default
MAEL_LOG_GC_SECONDS If set, print GC stats every x seconds No None
MAEL_CPU_PROFILE_FILENAME If set, write Go profiling info to this file No None
MAEL_PPROF If true, expose pprof HTTP routes No false

pprof routes are bound to the internal gateway port. For example, to get a heap profile, set MAEL_PPROF=true and request the /_mael/pprof/heap endpoint:

curl -sK -v http://localhost:8374/_mael/pprof/heap > heap.out