GithubHelp home page GithubHelp logo

monitor-http-log-go's Introduction

What's this ?

This is an HTTP log parser. It reads log lines in Common Log Format (CLF) and prints some useful statistics (top Hits, bandwidth) on stdout at regular intervals. It also print alerts on the console whenever certain thresholds are crossed.

Build

Without Docker

go build .

With Docker

docker build -t monitor .

Run

Without Docker

./monitor -logpath /var/log/nginx/access.log -alertThreshold 10

With Docker

docker run monitor:latest -logpath /tmp/access.log

Test

go test -v ./...

Possible improvements on the overall solution

  • Use a real timeseries DB. Here I implemented an in-memory "data container" that is probably much slower and less efficient than a full blown TSDB. Beside, in-mem has no data persistance :) But I felt that using a 3rd party DB was cheating.
  • Though the code is structured as a pipeline, with each step executing in a goroutine, some steps could be parallelized (the readlines and parselines for instance), each executed in several goroutines.
  • The aggregation step is a bottleneck. We could shard the aggregation with one aggregator per sectionName but with need a "router" that routes the HTTP hit to a specific aggregator. Leveraging Kafka partitions and partitioning using the key sectionName would work.
  • The current design requires that logs are written to the log file in chronological order. That is, if line A is written before line B, then A must represent an HTTP hit that happened before the one corresponding to B. Kafka's semantic can help here too.

monitor-http-log-go's People

Contributors

jordanp avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.