Salt is a great tool for managing the configuration of many servers. And when you have many servers, you should also be monitoring them with a tool like Dataset (aka Scalyr). The scalyr agent can monitor many things, but in this example, I’m going to show you how to create a MySQL user for the scalyr agent with just the right amount of permissions.
Salt Formula
{% set scalyr_user = salt['pillar.get']('scalyr:mysql:user', 'scalyr-agent-monitor') %}
mysql_scalyr_user:
mysql_user.present:
# - host: localhost
- name: {{ scalyr_user }}
- password: {{ pillar['scalyr']['mysql']['password'] }}
mysql_grants.present:
- grant: 'process, replication client'
- database: '*.*'
# - host: localhost
- user: {{ scalyr_user }}
- require:
- mysql_user: {{ scalyr_user }}Salt uses yaml with jinja templating to define states. This template does the following:
- Creates a MySQL user for scalyr
- Grants permissions for that scalyr user to access MySQL process & replication metrics on all databases
You can view the full range of options for the mysql_user and mysql_grants states if you need to customize it more.
Pillar Configuration
The above salt recipe requires a corresponding pillar configuration that looks like this:
scalyr:
mysql:
user: scalyr-agent-monitor
password: RANDOM_PASSWORDScalyr Agent Configuration
Then in your scalyr agent JSON, you can use a template like this:
{
logs: [{
path: "/var/log/mysql/error.log",
attributes: {parser: "mysql_error"}
}, {
path: "/var/log/mysql/slow.log",
attributes: {parser: "mysql_slow"}
}],
monitors: [{
module: "scalyr_agent.builtin_monitors.mysql_monitor",
database_username: "{{ salt['pillar.get']('scalyr:mysql:user') }}",
database_password: "{{ salt['pillar.get']('scalyr:mysql:password') }}",
database_socket: "/var/run/mysqld/mysqld.sock"
}]
}How to use it
If you’re already familiar with salt, then hopefully this all makes sense. Let’s say you named your state mysql_user in a scalyr state directory. Then you could apply it like this:
salt SERVER_ID state.sls scalyr.mysql_user
And now you have a MySQL user just for scalyr. This same idea can likely be applied to any other MySQL monitoring program.
If you’d like some help automating your server configuration and monitoring using tools and formulas like this, contact us at Streamhacker Technologies.

