🕵️ inspector is a simple tool to compare HTTP Content between 2 origin.
It's originally designed for our web cache proxy hitori.
Feel free to use it for other purposes.
git clone https://github.com/bocchi-the-cache/inspector.git
cd inspector
make build
Binary file and default config file will be generated in dist/inspector-VERSION/inspector
A default config file in dist/inspector-VERSION/config/config.yaml
http:
listen_port: 4399
host:
baseline:
"127.0.0.1:9090"
test:
"127.0.0.1:8080"
storage:
base_case_path:
"bad_case"
Change baseline
and test
address to your own server address.
If http content is different, the content will be saved in bad_case
directory.
./dist/inspector-VERSION/inspector
There several check status between baseline and test http content. The checking order is also same as below.
FETCH_ERROR
: eitherbaseline
ortest
can't be fetched.STATUS_NOT_MATCH
: http status code is different.EMPTY_CONTENT
: eitherbaseline
ortest
http body is empty.STATUS_NOT_200/206_SKIP
: http status code is same, but not 200/206.CONTENT_NOT_MATCH
: http body is different.PASS
: http body is same.
log/log.txt
logs inspector's running status.
log/result.txt
logs the result of compare.
Bad body content will be saved in bad_case
directory.
Metrics are exposed on /metrics
endpoint.
You can use Prometheus/Grafana to monitor inspector and results.
var (
RequestReceiveTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_request_receive_total",
Help: "total number of requests received",
}, []string{"node", "method", "host"})
RequestSendTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_request_send_total",
Help: "total number of requests sent",
}, []string{"node", "method", "host", "dst", "status"})
ResultTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_result_total",
Help: "result of http content checking",
}, []string{"node", "method", "status"})
ErrorTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_error_total",
Help: "error of inspector",
}, []string{"node", "method", "process", "error"})
ElapsedMonitor = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "RequestTimeConsumingStatistics",
Help: "api request elapsed time histogram",
Buckets: []float64{0.1, 0.5, 1, 5, 10, 20, 50, 100, 500, 1000, 5000},
}, []string{"node", "process"})
)
A possible practice is to use inspector
to monitor web cache.