44
Jeremy Glick, MySQL DBA San Francisco MySQL Meetup

Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Jeremy Glick, MySQL DBASan Francisco MySQL Meetup

Page 2: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Who am I?

Jeremy Glick

• 6 Years MySQL DBA• Chicago / Sacramento• Organizer, Chicago MySQL Meetup

Page 3: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Andrew Moore

• Remote DBA @ Percona• Organizer, SW UK MySQL Meetup

Page 4: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Agenda• Why log• How to log• Audit plugins• Elasticsearch ELK• Demos

Page 5: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Logs

[timestamp]: [some useful data]

Page 6: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Why log?

Page 7: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Why log?

Page 8: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Why log?

Page 9: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Why log?

Page 10: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

How [not] to log● General log● Slow log● Binary log● Sniff network● In schema● init_connect

Page 11: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MySQL Pluggable Audit Interface• Available since 5.5.3• Audit interface notifies plugin of

– General log messages– Error log messages– Query results sent to client

* https://dev.mysql.com/doc/refman/5.6/en/audit-plugins.html

Page 12: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MySQL Pluggable Audit Interface

• Custom plugin• Most popular open source plugins

– McAfee– Percona– MariaDB

Page 13: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Installing PluginsCLI:INSTALL PLUGIN plugin_name SONAME='shared_lib_name.so'

my.cnf: (RECOMMENDED)plugin-load=plugin_name=shared_lib_name.so

Startup:mysqld –plugin-load='plugin_name'='shared_lib_name.so'

Page 14: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Installing PluginsForce:plugin_name=FORCE_PLUS_PERMANENT

Configuration Options: (vary from plugin to plugin)• Filtering• Sync/performance• File|syslog[ng]

Page 15: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

McAfee Audit Plugin• Available for 5.1+

– Binary hooking• Great community support• Most filtering options• JSON output• Socket and file options

Page 16: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

McAfee Audit Plugin• Install may require generation of

offsets

./offset-extract.sh /path/to/mysqld /path/to/mysqld.debug

Page 17: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

McAfee Audit Plugin• Filtering

– audit_record_cmds– audit_record_objects– audit_whitelist_users– audit_whitelist_cmds

Page 18: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

McAfee Audit Plugin{"msg-type":"activity", "date":"1425967153721", "thread-id":"2", "query-id":"17", "user":"root", "priv_user":"root", "host":"localhost", "ip":"", "cmd":"select", "objects":[{"db":"test","name":"people","obj_type":"TABLE"}], "query":"select * from people"}

Page 19: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

McAfee Audit Plugin{"msg-type":"activity", "date":"1425967153721", "thread-id":"2", "query-id":"17", "user":"root", "priv_user":"root", "host":"localhost", "ip":"", "cmd":"select", "objects":[{"db":"test","name":"people","obj_type":"TABLE"}], "query":"select * from people"}

{"msg-type":"activity", "date":"1425968812525", "thread-id":"3", "query-id":"29", "user":"root", "priv_user":"root", "host":"localhost", "ip":"", "cmd":"select", "objects": [{"db":"test","name":"people_vw","obj_type":"VIEW"}, {"db":"test","name":"people","obj_type":"TABLE"}], "query":"select * from people_vw"}

Page 20: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Percona Audit Plugin• Available for 5.5.3+• Ships with Percona Server• Drop in replacement for

Oracle's plugin• Limited filtering• JSON, XML, CSV output

Page 21: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Percona Audit Plugin• audit_log_strategy

– ASYNCHRONOUS– PERFORMANCE– SEMISYNCHRONOUS– SYNCHRONOUS

Page 22: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Percona Audit Plugin

● Support for syslog– audit_log_handler = FILE|SYSLOG

Page 23: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Percona Audit Plugin<AUDIT_RECORD NAME="Query" RECORD="20_2015-03-10T06:49:49" TIMESTAMP="2015-03-10T06:53:55 UTC" COMMAND_CLASS="select" CONNECTION_ID="3" STATUS="0" SQLTEXT="select * from people" USER="root[root] @ localhost []" HOST="localhost" OS_USER="" IP=""/>

Page 24: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Percona Audit Plugin<AUDIT_RECORD NAME="Query" RECORD="32_2015-03-10T06:49:49" TIMESTAMP="2015-03-10T06:55:35 UTC" COMMAND_CLASS="select" CONNECTION_ID="4" STATUS="0" SQLTEXT="select * from people_vw" USER="root[root] @ localhost []" HOST="localhost" OS_USER="" IP=""/>

Page 25: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MariaDB Audit Plugin

• Available for 5.5+• Expanded Audit API• Included by default

Page 26: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MariaDB Audit Plugin

• Table level events• CSV output• Syslog• Plain text passwords

– < 5.5.42 (1.2.0)

Page 27: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MariaDB Audit Plugin

• Filtering– server_audit_events– server_audit_excl_users– server_audit_incl_users

Page 28: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MariaDB Audit Plugin20150310 03:07:25,localhost.localdomain,root,localhost,3,10,QUERY,test,'select * from people',0

Page 29: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

MariaDB Audit Plugin20150310 03:11:18,localhost.localdomain,root,localhost,3,9,READ,test,people,20150310 03:11:18,localhost.localdomain,root,localhost,3,9,QUERY,test,'select * from people_vw',0

Page 30: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

ReplicationMcAfee

• Slaves log replication events by default*Whitelist blank user “{}” to prevent

Percona and MariaDB• Not logged

Page 31: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Best practices• Secure data

– OS level not logged• Utilize log rotation

Page 32: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Best practices• Sequential logging lives away from

random access• Use FS with journalling to be crash

safe(r)• Synchronizing writes to disk hurts a lot

Page 33: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Log File Storage• Secure storage (encryption)• Sign logs to ensure not altered• Set permissions• Store offsite (encrypted of course)• Store on read only media

Page 34: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Log Aggregation● Proprietary

– Oracle Audit Vault– McAfee DAM– Splunk

● Open Source– Elasticsearch ELK Stack

Page 35: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,
Page 36: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Elasticsearch ELK

Page 37: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Elasticsearch

● Full text and analytics● Apache Lucene● RESTful web interface● Schema-free JSON

documents

Page 38: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Elasticsearch

● Index = table● Document = row

Page 39: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Logstash

● Centralize logs● Supports many input types● Filtering

Page 40: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Logstash

● Output plugins available– Nagios and Nagios_nsca– XMPP (hipchat, slack, etc.)– Pager duty

Page 41: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

/etc/logstash/logstash.conf

input { file { path => "/var/log/mysql/audit.log" type => "mysql-audit" }

filter { do_something

}

output { elasticsearch { cluster => "logstash"

host => elasticsearch1}

}

Page 42: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Kibana

● Browser based dashboards● Real-time search and

analytics● Seamless integration with

Elasticsearch

Page 43: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Elasticsearch ELK

Page 44: Jeremy Glick, MySQL DBA San Francisco MySQL Meetupfiles.meetup.com/107604/20150311_sf_meetup.pdfWho am I? Jeremy Glick • 6 Years MySQL DBA • Chicago / Sacramento • Organizer,

Demo

● Audit Plugin Performance● ELK