Skip to content

Commit adf5806

Browse files
Merge pull request #102 from edx/nadeem/dd-users-and-schema
feat: setup datadog user and schema for mysql monitoring
2 parents 973de8e + 1ba8976 commit adf5806

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

playbooks/create_db_and_users.yml

+126
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,129 @@
115115
when: RDS_BINLOG_RETENTION_HOURS is defined
116116
tags:
117117
- users
118+
119+
- name: Ensure Datadog user exists
120+
mysql_user:
121+
name: "{{ datadog_user }}"
122+
host: '%'
123+
password: "{{ datadog_user_password }}"
124+
priv: "*.*:REPLICATION CLIENT,PROCESS"
125+
append_privs: yes
126+
login_host: "{{ database_connection.login_host }}"
127+
login_user: "{{ database_connection.login_user }}"
128+
login_password: "{{ database_connection.login_password }}"
129+
when: datadog_mysql_monitoring_enabled | default(false)
130+
131+
- name: Set max connections for Datadog user
132+
mysql_query:
133+
query: "ALTER USER '{{ datadog_user }}'@'%' WITH MAX_USER_CONNECTIONS {{ datadog_max_connections }};"
134+
login_host: "{{ database_connection.login_host }}"
135+
login_user: "{{ database_connection.login_user }}"
136+
login_password: "{{ database_connection.login_password }}"
137+
when: datadog_mysql_monitoring_enabled | default(false)
138+
139+
- name: Grant SELECT on performance_schema to Datadog user
140+
mysql_user:
141+
name: "{{ datadog_user }}"
142+
host: '%'
143+
priv: "performance_schema.*:SELECT"
144+
append_privs: yes
145+
login_host: "{{ database_connection.login_host }}"
146+
login_user: "{{ database_connection.login_user }}"
147+
login_password: "{{ database_connection.login_password }}"
148+
when: datadog_mysql_monitoring_enabled | default(false)
149+
150+
- name: Create Datadog schema if it does not exist
151+
mysql_db:
152+
name: "{{ datadog_schema }}"
153+
state: present
154+
login_host: "{{ database_connection.login_host }}"
155+
login_user: "{{ database_connection.login_user }}"
156+
login_password: "{{ database_connection.login_password }}"
157+
when: datadog_mysql_monitoring_enabled | default(false)
158+
159+
- name: Grant EXECUTE on Datadog schema to Datadog user
160+
mysql_user:
161+
name: "{{ datadog_user }}"
162+
host: '%'
163+
priv: "{{ datadog_schema }}.*:EXECUTE,CREATE TEMPORARY TABLES"
164+
append_privs: yes
165+
login_host: "{{ database_connection.login_host }}"
166+
login_user: "{{ database_connection.login_user }}"
167+
login_password: "{{ database_connection.login_password }}"
168+
when: datadog_mysql_monitoring_enabled | default(false)
169+
170+
- name: Create the explain_statement procedure in datadog schema
171+
mysql_query:
172+
query: |
173+
CREATE PROCEDURE {{ datadog_schema }}.explain_statement(IN query TEXT)
174+
SQL SECURITY DEFINER
175+
BEGIN
176+
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
177+
PREPARE stmt FROM @explain;
178+
EXECUTE stmt;
179+
DEALLOCATE PREPARE stmt;
180+
END
181+
login_host: "{{ database_connection.login_host }}"
182+
login_user: "{{ database_connection.login_user }}"
183+
login_password: "{{ database_connection.login_password }}"
184+
when: datadog_mysql_monitoring_enabled | default(false)
185+
ignore_errors: yes
186+
187+
- name: Grant EXECUTE on explain_statement procedure to Datadog user
188+
mysql_query:
189+
query: "GRANT EXECUTE ON PROCEDURE {{ datadog_procedure_schema }}.explain_statement TO {{ datadog_user }}@'%';"
190+
login_host: "{{ database_connection.login_host }}"
191+
login_user: "{{ database_connection.login_user }}"
192+
login_password: "{{ database_connection.login_password }}"
193+
when: datadog_mysql_monitoring_enabled | default(false)
194+
195+
- name: Create Runtime setup consumer for datadog
196+
mysql_query:
197+
query: |
198+
CREATE PROCEDURE {{ datadog_schema }}.enable_events_statements_consumers()
199+
SQL SECURITY DEFINER
200+
BEGIN
201+
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
202+
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
203+
END
204+
login_host: "{{ database_connection.login_host }}"
205+
login_user: "{{ database_connection.login_user }}"
206+
login_password: "{{ database_connection.login_password }}"
207+
when: datadog_mysql_monitoring_enabled | default(false)
208+
ignore_errors: yes
209+
210+
- name: Grant EXECUTE on enable_events_statements_consumers procedure to Datadog user
211+
mysql_query:
212+
query: "GRANT EXECUTE ON PROCEDURE {{ datadog_procedure_schema }}.enable_events_statements_consumers TO {{ datadog_user }}@'%';"
213+
login_host: "{{ database_connection.login_host }}"
214+
login_user: "{{ database_connection.login_user }}"
215+
login_password: "{{ database_connection.login_password }}"
216+
when: datadog_mysql_monitoring_enabled | default(false)
217+
218+
- name: Grant EXECUTE on explain_statement procedure in database {{ item }} to Datadog user
219+
mysql_query:
220+
query: |
221+
CREATE PROCEDURE {{ item }}.explain_statement(IN query TEXT)
222+
SQL SECURITY DEFINER
223+
BEGIN
224+
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
225+
PREPARE stmt FROM @explain;
226+
EXECUTE stmt;
227+
DEALLOCATE PREPARE stmt;
228+
END
229+
login_host: "{{ database_connection.login_host }}"
230+
login_user: "{{ database_connection.login_user }}"
231+
login_password: "{{ database_connection.login_password }}"
232+
with_items: "{{ datadog_monitored_dbs }}"
233+
when: datadog_mysql_monitoring_enabled | default(false)
234+
ignore_errors: yes
235+
236+
- name: Grant EXECUTE on explain_statement procedure in database {{ item }} to Datadog user
237+
mysql_query:
238+
query: "GRANT EXECUTE ON PROCEDURE {{ item }}.explain_statement TO {{ datadog_user }}@'%';"
239+
login_host: "{{ database_connection.login_host }}"
240+
login_user: "{{ database_connection.login_user }}"
241+
login_password: "{{ database_connection.login_password }}"
242+
with_items: "{{ datadog_monitored_dbs }}"
243+
when: datadog_mysql_monitoring_enabled | default(false)

0 commit comments

Comments
 (0)