Created 11-25-2015 11:58 AM
Where can I find an audit trail of every changes done via Ambari ? I would like something similar to the configuration diff that we can do using the UI with the addition of the username.
Eg Olivier has changed umask to 077 in hdfs-site on Monday 5th of December 2014 at 2:20:21.123
I've found /var/log/ambari-server/ambari-config-changes.log but it doesn't show the specific change which has happened. I understand that I've got the version and i can diff w/ the previous version but i was wondering if we were recording it somewhere else.
Created 11-25-2015 10:54 PM
@Olivier Renault I don't think we have a separate audit tool or recording of the changes available, however a short Python script should solve this problem.
I just created a short example (quick and dirty solution, needs some tweaking! :P), take a look at this https://github.com/mr-jstraub/ambari-audit-config
The repo contains an audit.py script that you can use as follows:
Example (audit hive-site to shell):
python audit.py --target horton01.myhost.com:8080 --cluster bigdata --user admin --config hive-site
Example (audit hive-site to hive-site_audit.log)
python audit.py --target horton01.myhost.com:8080 --cluster bigdata --user admin --config hive-site --output hive-site_audit.log
Result:
hive-site: version 1 - ADDED - javax.jdo.option.ConnectionDriverName - com.mysql.jdbc.Driver hive-site: version 1 - ADDED - hive.fetch.task.aggr - false hive-site: version 1 - ADDED - hive.execution.engine - tez hive-site: version 1 - ADDED - hive.tez.java.opts - -server -Djava.net.preferIPv4Stack=true -XX:NewRatio=8 -XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps hive-site: version 1 - ADDED - hive.vectorized.groupby.maxentries - 100000 hive-site: version 1 - ADDED - hive.server2.table.type.mapping - CLASSIC ... ... ... hive-site: version 1 - ADDED - hive.compactor.check.interval - 300L hive-site: version 1 - ADDED - hive.compactor.delta.pct.threshold - 0.1f hive-site: version 2 - CHANGED - javax.jdo.option.ConnectionURL - jdbc:mysql://horton03.myhost.com/hive?createDatabaseIfNotExist=true => jdbc:mysql://horton03.myhost.com:3306/hive?createDatabaseIfNotExist=true hive-site: version 2 - CHANGED - hive.zookeeper.quorum - horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 => horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 2 - CHANGED - hive.cluster.delegation.token.store.zookeeper.connectString - horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 => horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 3 - CHANGED - javax.jdo.option.ConnectionURL - jdbc:mysql://horton03.myhost.com:3306/hive?createDatabaseIfNotExist=true => jdbc:mysql://horton03.myhost.com/hive?createDatabaseIfNotExist=true hive-site: version 4 - ADDED - atlas.cluster.name - default hive-site: version 4 - CHANGED - hive.exec.post.hooks - org.apache.hadoop.hive.ql.hooks.ATSHook => org.apache.hadoop.hive.ql.hooks.ATSHook,org.apache.atlas.hive.hook.HiveHook hive-site: version 4 - CHANGED - hive.metastore.sasl.enabled - false => true hive-site: version 4 - CHANGED - hive.server2.authentication.spnego.principal - /etc/security/keytabs/spnego.service.keytab => HTTP/_HOST@EXAMPLE.COM hive-site: version 4 - CHANGED - hive.server2.authentication.spnego.keytab - HTTP/_HOST@EXAMPLE.COM => /etc/security/keytabs/spnego.service.keytab hive-site: version 4 - ADDED - hive.server2.authentication.kerberos.keytab - /etc/security/keytabs/hive.service.keytab hive-site: version 4 - CHANGED - hive.zookeeper.quorum - horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 => horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 4 - ADDED - hive.server2.authentication.kerberos.principal - hive/_HOST@EXAMPLE.COM hive-site: version 4 - ADDED - atlas.rest.address - http://horton03.myhost.com:21000 hive-site: version 4 - CHANGED - hive.cluster.delegation.token.store.zookeeper.connectString - horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 => horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 4 - CHANGED - hive.server2.authentication - NONE => KERBEROS hive-site: version 5 - CHANGED - atlas.cluster.name - default => bigdata hive-site: version 6 - ADDED - my.prop.test - blub
I still need to add the username, however I haven't found it for every config version. Does anyone know if I can retrieve the username of the person that changed the configuration?
Hope that helps 🙂
Update: Found the usernames, but I need to map config type (hive-site, hive-env,...) to service name (HIVE).....bit tricky.....
Created 11-25-2015 10:54 PM
@Olivier Renault I don't think we have a separate audit tool or recording of the changes available, however a short Python script should solve this problem.
I just created a short example (quick and dirty solution, needs some tweaking! :P), take a look at this https://github.com/mr-jstraub/ambari-audit-config
The repo contains an audit.py script that you can use as follows:
Example (audit hive-site to shell):
python audit.py --target horton01.myhost.com:8080 --cluster bigdata --user admin --config hive-site
Example (audit hive-site to hive-site_audit.log)
python audit.py --target horton01.myhost.com:8080 --cluster bigdata --user admin --config hive-site --output hive-site_audit.log
Result:
hive-site: version 1 - ADDED - javax.jdo.option.ConnectionDriverName - com.mysql.jdbc.Driver hive-site: version 1 - ADDED - hive.fetch.task.aggr - false hive-site: version 1 - ADDED - hive.execution.engine - tez hive-site: version 1 - ADDED - hive.tez.java.opts - -server -Djava.net.preferIPv4Stack=true -XX:NewRatio=8 -XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps hive-site: version 1 - ADDED - hive.vectorized.groupby.maxentries - 100000 hive-site: version 1 - ADDED - hive.server2.table.type.mapping - CLASSIC ... ... ... hive-site: version 1 - ADDED - hive.compactor.check.interval - 300L hive-site: version 1 - ADDED - hive.compactor.delta.pct.threshold - 0.1f hive-site: version 2 - CHANGED - javax.jdo.option.ConnectionURL - jdbc:mysql://horton03.myhost.com/hive?createDatabaseIfNotExist=true => jdbc:mysql://horton03.myhost.com:3306/hive?createDatabaseIfNotExist=true hive-site: version 2 - CHANGED - hive.zookeeper.quorum - horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 => horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 2 - CHANGED - hive.cluster.delegation.token.store.zookeeper.connectString - horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 => horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 3 - CHANGED - javax.jdo.option.ConnectionURL - jdbc:mysql://horton03.myhost.com:3306/hive?createDatabaseIfNotExist=true => jdbc:mysql://horton03.myhost.com/hive?createDatabaseIfNotExist=true hive-site: version 4 - ADDED - atlas.cluster.name - default hive-site: version 4 - CHANGED - hive.exec.post.hooks - org.apache.hadoop.hive.ql.hooks.ATSHook => org.apache.hadoop.hive.ql.hooks.ATSHook,org.apache.atlas.hive.hook.HiveHook hive-site: version 4 - CHANGED - hive.metastore.sasl.enabled - false => true hive-site: version 4 - CHANGED - hive.server2.authentication.spnego.principal - /etc/security/keytabs/spnego.service.keytab => HTTP/_HOST@EXAMPLE.COM hive-site: version 4 - CHANGED - hive.server2.authentication.spnego.keytab - HTTP/_HOST@EXAMPLE.COM => /etc/security/keytabs/spnego.service.keytab hive-site: version 4 - ADDED - hive.server2.authentication.kerberos.keytab - /etc/security/keytabs/hive.service.keytab hive-site: version 4 - CHANGED - hive.zookeeper.quorum - horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 => horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 4 - ADDED - hive.server2.authentication.kerberos.principal - hive/_HOST@EXAMPLE.COM hive-site: version 4 - ADDED - atlas.rest.address - http://horton03.myhost.com:21000 hive-site: version 4 - CHANGED - hive.cluster.delegation.token.store.zookeeper.connectString - horton02.myhost.com:2181,horton03.myhost.com:2181,horton01.myhost.com:2181 => horton03.myhost.com:2181,horton02.myhost.com:2181,horton01.myhost.com:2181 hive-site: version 4 - CHANGED - hive.server2.authentication - NONE => KERBEROS hive-site: version 5 - CHANGED - atlas.cluster.name - default => bigdata hive-site: version 6 - ADDED - my.prop.test - blub
I still need to add the username, however I haven't found it for every config version. Does anyone know if I can retrieve the username of the person that changed the configuration?
Hope that helps 🙂
Update: Found the usernames, but I need to map config type (hive-site, hive-env,...) to service name (HIVE).....bit tricky.....
Created 11-26-2015 06:40 AM
Awesome stuff!
Created 11-26-2015 06:45 AM
thanks 🙂
Created 11-26-2015 10:43 AM
@Jonas Straub nice!!!
Created 11-27-2015 04:13 PM
@Jonas Straub - Cool stuff!!
Created 11-26-2015 06:25 AM
Great help, thanks a lot
Created 02-15-2016 02:46 PM
Looks useful, but exactly which python binary is this intended to work with? It fails immediately with a complaint about not being able to find the 'request' package. I grepped the /usr/hdp tree, but cannot find a 'request.py' module.
Created 02-15-2016 02:55 PM
[root@phdns01 ~]# find / -name audit.py
/usr/lib64/python2.6/site-packages/audit.py
/usr/lib64/python2.6/site-packages/sepolgen/audit.py
[root@phdns01 ~]#
[root@phdns01 ~]# find / -name request.py
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/request.py
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/request.py
/usr/lib/python2.6/site-packages/urllib3/request.py
/usr/lib/python2.6/site-packages/urllib3/util/request.py
/usr/lib/python2.6/site-packages/rbtools/api/request.py
/usr/lib/python2.6/site-packages/boto/ec2/autoscale/request.py
/usr/lib64/python2.6/site-packages/mercurial/hgweb/request.py
[root@phdns01 ~]#
Created 02-15-2016 07:43 PM
The python script is using the following modules:
requests json getpass logging sys getopt
On most of the systems you only have to install getpass and requests.
Requests is not python script, its a complete package that makes it easier to submit API requests, see this page http://docs.python-requests.org/en/master/ (You can install it with "pip install requests")
Let me know if you need any help with the script, I am happy to help and improve the script 🙂