diff --git a/CHANGES.txt b/CHANGES.txt index 8350848aa3..81da11db10 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0 + * Support a means of logging all queries as they were invoked (CASSANDRA-13983) * Presize collections (CASSANDRA-13760) * Add GroupCommitLogService (CASSANDRA-13530) * Parallelize initial materialized view build (CASSANDRA-12245) diff --git a/NEWS.txt b/NEWS.txt index 622cc5416d..a14f7ba75f 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -34,6 +34,14 @@ New features threads is specified by the property `cassandra.yaml:concurrent_materialized_view_builders`. This property can be modified at runtime through both JMX and the new `setconcurrentviewbuilders` and `getconcurrentviewbuilders` nodetool commands. See CASSANDRA-12245 for more details. + - There is now a binary full query log based on Chronicle Queue that can be controlled using + nodetool enablefullquerylog, disablefullquerylog, and resetfullquerylog. The log + contains all queries invoked, approximate time they were invoked, any parameters necessary + to bind wildcard values, and all query options. A human readable version of the log can be + dumped or tailed using the new bin/fqltool utility. The full query log is designed to be safe + to use in production and limits utilization of heap memory and disk space with limits + you can specify when enabling the log. + See nodetool and fqltool help text for more information. Upgrading --------- diff --git a/bin/fqltool b/bin/fqltool new file mode 100755 index 0000000000..8a05af1a36 --- /dev/null +++ b/bin/fqltool @@ -0,0 +1,88 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ "x$CASSANDRA_INCLUDE" = "x" ]; then + # Locations (in order) to use when searching for an include file. + for include in "`dirname "$0"`/cassandra.in.sh" \ + "$HOME/.cassandra.in.sh" \ + /usr/share/cassandra/cassandra.in.sh \ + /usr/local/share/cassandra/cassandra.in.sh \ + /opt/cassandra/cassandra.in.sh; do + if [ -r "$include" ]; then + . "$include" + break + fi + done +elif [ -r "$CASSANDRA_INCLUDE" ]; then + . "$CASSANDRA_INCLUDE" +fi + +# Use JAVA_HOME if set, otherwise look for java in PATH +if [ -x "$JAVA_HOME/bin/java" ]; then + JAVA="$JAVA_HOME/bin/java" +else + JAVA="`which java`" +fi + +if [ "x$JAVA" = "x" ]; then + echo "Java executable not found (hint: set JAVA_HOME)" >&2 + exit 1 +fi + +if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" ]; then + echo "You must set the CASSANDRA_CONF and CLASSPATH vars" >&2 + exit 1 +fi + +# Run cassandra-env.sh to pick up JMX_PORT +if [ -f "$CASSANDRA_CONF/cassandra-env.sh" ]; then + JVM_OPTS_SAVE=$JVM_OPTS + MAX_HEAP_SIZE_SAVE=$MAX_HEAP_SIZE + . "$CASSANDRA_CONF/cassandra-env.sh" + MAX_HEAP_SIZE=$MAX_HEAP_SIZE_SAVE + JVM_OPTS=$JVM_OPTS_SAVE +fi + +# JMX Port passed via cmd line args (-p 9999 / --port 9999 / --port=9999) +# should override the value from cassandra-env.sh +ARGS="" +JVM_ARGS="" +while true +do + if [ ! $1 ]; then break; fi + case $1 in + -D*) + JVM_ARGS="$JVM_ARGS $1" + ;; + *) + ARGS="$ARGS $1" + ;; + esac + shift +done + +if [ "x$MAX_HEAP_SIZE" = "x" ]; then + MAX_HEAP_SIZE="512m" +fi + +"$JAVA" $JAVA_AGENT -ea -da:net.openhft... -cp "$CLASSPATH" $JVM_OPTS -Xmx$MAX_HEAP_SIZE \ + -Dlog4j.configurationFile=log4j2-tools.xml \ + $JVM_ARGS \ + org.apache.cassandra.tools.FullQueryLogTool $ARGS + +# vi:ai sw=4 ts=4 tw=0 et diff --git a/bin/fqltool.bat b/bin/fqltool.bat new file mode 100644 index 0000000000..f3103d8d6d --- /dev/null +++ b/bin/fqltool.bat @@ -0,0 +1,36 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED JAVA_HOME goto :err + +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% -Dcassandra.logdir="%CASSANDRA_HOME%\logs" + +"%JAVA_HOME%\bin\java" -cp %CASSANDRA_CLASSPATH% %CASSANDRA_PARAMS% -Dlog4j.configurationFile=log4j2-tools.xml org.apache.cassandra.tools.FullQueryLogTool %* +goto finally + +:err +echo The JAVA_HOME environment variable must be set to run this program! +pause + +:finally +ENDLOCAL & set RC=%ERRORLEVEL% +exit /B %RC% diff --git a/build.xml b/build.xml index 7c63c82b6a..5dee75d603 100644 --- a/build.xml +++ b/build.xml @@ -114,6 +114,13 @@ + + + + + + + @@ -422,6 +429,11 @@ + + + + +