LogGraph README 1 - About LogGraph is an application for viewing and filtering zookeeper logs. It can handle transaction logs and message logs. 2 - Compiling Run "ant jar" in src/contrib/loggraph/. This will download all dependencies and compile all the loggraph code. Once compilation has finished, you can run it the the loggraph.sh script in src/contrib/loggraph/bin. This will start and embedded web server on your machine. Navigate to http://localhost:8182/graph/main.html 3 - Usage LogGraph presents the user with 4 views, a) Simple log view This view simply displays the log text. This isn't very useful without filters (see "Filtering the logs"). b) Server view The server view shows the interactions between the different servers in an ensemble. The X axis represents time. * Exceptions show up as red dots. Hovering your mouse over them will give you more details of the exception * The colour of the line represents the election state of the server. - orange means LOOKING for leader - dark green means the server is the leader - light green means the server is following a leader - yellow means there isn't enough information to determine the state of the server. * The gray arrows denote election messages between servers. Pink dashed arrows are messages that were sent but never delivered. c) Session view The session view shows the lifetime of sessions on a server. Use the time filter to narrow down the view. Any more than about 2000 events will take a long time to view in your browser. The X axis represents time. Each line is a session. The black dots represent events on the session. You can click on the black dots for more details of the event. d) Stats view There is currently only one statistics view, Transactions/minute. Suggestions for other statistic views are very welcome. 4 - Filtering the logs The logs can be filtered in 2 ways, by time and by content. To filter by time simply move the slider to the desired start time. The time window specifies how many milliseconds after and including the start time will be displayed. Content filtering uses a adhoc filtering language, using prefix notation. The language looks somewhat similar to lisp. A statement in the language takes the form (op arg arg ....). A statement resolves to a boolean value. Statements can be nested. 4.1 - Filter arguments An argument can be a number, a string or a symbol. A number is any argument which starts with -, + or 0 to 9. If the number starts with 0x it is interpretted as hexidecimal. Otherwise it is interpretted as decimal. If the argument begins with a double-quote, (") it is interpretted as a string. Anything else is interpretted as a symbol. 4.2 - Filter symbols The possible filter symbols are: client-id : number, the session id of the client who initiated a transaction. cxid : number, the cxid of a transaction zxid : number, the zxid of a transaction operation : string, the operation being performed, for example "setData", "createSession", "closeSession", "error", "create" 4.3 - Filter operations The possible filter operations are: or : logical or, takes 1 or more arguments which must be other statements. and : logical and, takes 1 or more arguments which must be other statements. not : logical not, takes 1 argument which must be another statement. xor : exclusive or, takes 1 or more arguments which must be other statements. = : equals, takes 1 or more arguments, which must all be equal to each other to return true. > : greater than, takes 1 or more arguments, to return true the 1st argument must be greater than the 2nd argument which must be greater than the 3rd argument and so on... < : less than, takes 1 or more arguments, to return true the 1st argument must be less than the 2nd argument which must be less than the 3rd argument and so on... 4.3 - Filter examples Give me all the setData operations with session id 0xdeadbeef or 0xcafeb33r but not with zxid 0x12341234 -> (and (= operation "setData") (or (= client-id 0xdeadbeef) (= client-id 0xcafeb33r)) (not (= zxid 0x12341234)))