Building a ZAP Monitoring Environment (Grafana + InfluxDB + Statsd)

Hi hackers :D Here’s the first post of November!

Recently, both in my companies and individuals are working on projects related to ZAP. So while I was looking at the options and features of ZAP, I noticed a feature that I’ve never used before.

Today i am going to talk about configuring the environment to monitor ZAP using these Statistics, Grafana, InfluxDB and Statsd.

최근에 ZAP 관련해서 회사/개인 모두 각기의 프로젝트를 진행하고 있습니다. 그래서 ZAP의 옵션과 기능에 대해서 찾아보고 살펴보던 중 한번도 사용해보지 않았던 기능이 눈에 들어왔습니다.

오늘은 이 Statistics와 Grafana, InfluxDB 그리고 Statsd를 이용하여 ZAP을 모니터링할 수 있는 환경 구성에 대한 이야기를 하려고 합니다.

What is Statistics in ZAP?

Statistics is a monitoring-related option provided by ZAP. Think of it as a function that works with Statsd to collect various logs of ZAP.

Statistics는 ZAP에서 제공하고 있는 모니터링 관련 옵션입니다. 이는 Statsd와 연동되어 ZAP의 다양한 로그를 수집시킬 수 있는 기능이라고 생각하시면 됩니다.

Basic include E.G
response codes stats.code.200
response times in ms stats.responseTime.1
content types stats.contentType.text/css
tags stats.tag.Password
authentication info stats.auth.success

Why use it?

Statistics in ZAP is not an important function if it is simply used as an analysis tool, such as BurpSuite. If you have a role as a scanner that is included in DevSecOps or that runs multiple scans, performance monitoring is clearly required. In addition, if you plan to deploy Web Audit Search Engine (WASE) separately, these log collection capabilities can be very useful.

ZAP을 단순히 BurpSuite와 같이 분석 도구로서만 사용한다면 크게 중요한 기능은 아닙니다. DevSecOps에 포함되거나 다수의 스캔을 진행하는 스캐너로의 역할을 가지고 있다면 분명히 성능에 대한 모니터링이 필요합니다. 또한 WASE(Web Audit Search Engine) 등을 별도로 구축할 생각이라면 이러한 로그 수집 기능은 정말 유용하게 사용될 수 있습니다.


Choice visualizing tool and TSDB

I haven’t used much about monitoring/visualizing. So I was thinking about what to use, and I decided to build a Grafana that I’ve never used before. It’s pretty. So I looked up the Graphana + Statsd combination, and there were a few candidates, including Grapite and InfluxDB, and I decided to use InfluxDB that I didn’t use.

모니터링/비주얼라이징 관련해선 사실 써본게 많이 없긴 합니다. (써도 거의 업무적으로만…) 그러다 보니 어떤걸 사용해볼까 고민하다가, 한번도 안써본(구경만 해본) Grafana로 구축하기로 했습니다. 이쁘잖아요 :D

그래서 Grafana + Statsd 조합으로 찾아보다 보니 graphite, InfluxDB 등의 몇몇 후보군이 있었고 그냥 안써본 TSDB인 InfluxDB로 해보기로 했습니다.

(사실상 도커 이미지를 쓸거라 어떤 조합이던 크게 의미가 없네요.. 제가 구축하는 부분이 거의 없다보니)

Setup Statsd in ZAP

First, let’s proceed with the Statistics setting to send logs from ZAP to Statsd.

우선 ZAP에서 Statsd로 로그를 보내기 위해 Statistics 설정을 진행해줍시다.

Options > Statistics > Check Statsd Server Enabled and Write Hostname

이제 ZAP에서는 여러가지 ZAP에 관련된 로그를 Statsd로 전달하게 됩니다.

Setup with Docker

Let’s set it up at once using the docker image created by jlachowski!

직접 구축하면 다 좋겠지만 이미 다 만들어진 Docker 이미지가 워낙 많은 상태라.. 유혹을 뿌리칠 수 없었습니다. 몇가지 찾아보다가 적당한 이미지를 찾아서 해당 이미지로 진행해봅니다.

Pull image

docker pull samuelebistoletti/docker-statsd-influxdb-grafana

Run docker container

docker run --ulimit nofile=66000:66000 \
  -d \
  --name docker-statsd-influxdb-grafana \
  -p 3003:3003 \
  -p 3004:8888 \
  -p 8086:8086 \
  -p 8125:8125/udp \
docker start docker-statsd-influxdb-grafana

When you run a container, various services come up inside the container.

컨테이너를 실행하게 되면 여러가지 서비스가 컨테이너 내부에 올라오는데 포트별로 보면 이렇습니다. (위 이미지 기준)

  • 3003: grafana
  • 3004: Chronograf (이번에는 사용하지 않았어요)
  • 8086: InfluxDB
  • 8125: Statsd

Opened Grafana

Make Visualization Graph in Grafana

Just… make Graph!

사실 더 할게 없습니다.. 그냥 원하는 입맛대로 그래프를 만들어서 봐주기만 하면 됩니다.


Running Quick-Scan in ZAP

Logged data and show graph