Installation Guide
Welcome to the Installation Guide! This page will help you set up and configure the system using Docker, Podman, or Kubernetes.
If you are upgrading from a previous version of Monitor, please refer to the Migration Guides before proceeding with the installation. These guides contain important steps to ensure a smooth upgrade process.
Installation Methods:
- Docker Setup: Quick and easy containerized installation.
- Podman Setup: Docker-compatible, rootless containers.
- Kubernetes Setup: For scalable, production-grade deployments.
- Docker Setup
- Podman Setup
- Kubernetes Setup
To install using Docker:
- Download the provided
docker-compose.ymlfile below. - Pull the container image from the registry:
docker pull registry.frafos.net/abc/mon:<tag> - Update your
docker-compose.ymlto use the registry image:image: registry.frafos.net/abc/mon:<tag> - Run:
docker-compose up -d - Access the dashboard at
http://localhost:445
Fresh installations use plain HTTP only, as nginx and self-signed certificates are not included by default.
Container images are available at: Frafos Container Registry
Possible CAPs to be used during runtime
CAP_NET_BIND_SERVICE: Needed to give the container access to open a port for receiving syslog messages.
Show example docker-compose.yml
# Example Docker Compose file for Frafos monitoring stack
# Each service below represents a containerized application.
services:
ccm:
# Call Control Manager (CCM) service
image: registry.frafos.net/abc/ccm:5.5
container_name: ccm
ports:
- "443-444:443-444" # Expose ports 443 and 444
networks:
- monitoring # Connect to monitoring network
- signaling # Connect to signaling network
restart: always # Always restart on failure
volumes:
- ccm-data:/data # Persist data in named volume
cap_add:
- AUDIT_CONTROL # Add audit control capability
- AUDIT_WRITE # Add audit write capability
elastic:
# Elasticsearch service for log and metric storage
image: docker.elastic.co/elasticsearch/elasticsearch:9.1.5
container_name: elastic
ports:
- "9200:9200" # HTTP API
- "9300:9300" # Transport protocol
environment:
- discovery.type=single-node # Run as single node
- xpack.ml.enabled=false # Disable ML features
- network.host=_local_,_site_ # Bind to local and site interfaces
- path.repo=/usr/share/elasticsearch/snapshots # Path for snapshots
- logger.level=debug # Set logging level to debug
#- thread_pool.search.queue_size=10000 # (optional) Increase search queue size
#- http.max_initial_line_length=16kb # (optional) Increase max HTTP header size
#- cluster.max_shards_per_node=166 # (optional) Increase max shards
#- indices.lifecycle.history_index_enabled=false # (optional) Disable ILM history
# 1. FOR PLAIN HTTP USE THE FOLLOWING VARIABLES -----
- xpack.security.enabled=false # Disable security
- xpack.security.http.ssl.enabled=false # Disable HTTP SSL
# 1.2 OR ENABLE SECURITY --- (default user = elastic) ---
# - xpack.security.enabled=true
# - ELASTIC_PASSWORD=Test1234 # curl -u elastic:Test1234 http://localhost:9200/
# 2. FOR SSL USE THE FOLOWING VARIABLES -------------
# - xpack.security.enabled=true
# - xpack.security.http.ssl.enabled=true
# - xpack.security.http.ssl.certificate=certs/server.crt
# - xpack.security.http.ssl.key=certs/server.key
# - xpack.security.transport.ssl.enabled=true
# - xpack.security.transport.ssl.certificate=certs/server.crt
# - xpack.security.transport.ssl.key=certs/server.key
# - xpack.security.transport.ssl.verification_mode=certificate
# - xpack.security.transport.ssl.certificate_authorities=certs/ca.crt
# 2.2 --- ANONYMOUS AUTH --- (not recommended for production, but can be useful for development and testing purposes)
# - xpack.security.authc.anonymous.username=anonymous
# - xpack.security.authc.anonymous.roles=superuser
# - xpack.security.authc.anonymous.authz_exception=false
# 2.3 --- OR ---
# - ELASTIC_PASSWORD=Test1234 # curl --cacert ./path/to/certs/ca.crt -u elastic:Test1234 https://localhost:9200/
networks:
- monitoring
restart: always
ulimits:
nofile:
soft: 65536
hard: 65536
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 4g
volumes:
- es-data:/usr/share/elasticsearch/data # Data volume
- es-snapshots:/usr/share/elasticsearch/snapshots # Snapshots volume
#- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # (optional) Custom config
# - ./path/to/certs:/usr/share/elasticsearch/config/certs:ro
chrome:
# Headless Chrome for PDF generation or browser automation
image: zenika/alpine-chrome:124
#image: registry.frafos.net/contrib/alpine-chrome:latest # (alternative image)
container_name: chrome
#shm_size: "1gb" (optional) not required - zenika/alpine-chrome uses --disable-dev-shm-usage by default.
networks:
- monitoring
expose:
- "9222" # Expose remote debugging port
command:
- "--no-sandbox"
- "--remote-debugging-address=::"
- "--remote-debugging-port=9222"
restart: always
healthcheck:
test: [ "CMD", "wget", "-q", "--spider", "http://localhost:9222/json/version" ]
interval: 30s
timeout: 10s
retries: 3
monitor:
# Monitoring service (MONITOR)
image: registry.frafos.net/abc/mon:10.2
container_name: monitor
ports:
- "445:5000" # SERVER_PORT (445 on host, 5000 in container - fresh install uses HTTP, no nginx/certificates)
- "514:514/udp" # VECTOR_SYSLOG_PORT (default VECTOR_SYSLOG_TRANSPORT_PROTOCOL is UDP)
- "514:514/tcp" # VECTOR_SYSLOG_PORT (when VECTOR_SYSLOG_TRANSPORT_PROTOCOL is TCP)
- "5044:5044" # VECTOR_SOCKET_PORT
- "5045:5045" # VECTOR_SOCKET_TLS_PORT
- "3042:3042" # UPLOAD_API_PORT
- "873:873" # UPLOAD_API_RSYNC_PORT
environment:
- BROWSER_URL=http://chrome:9222/
- PDF_RENDER_URL=http://monitor:5000
#- CCM=ccm # (optional) CCM service name
#- ES=http://elastic:9200 # (optional) ES endpoint
#- REPORT_URL=http://localhost:445/report # (optional) Report URL (use localhost or bracketed IPv6 like http://[::1]:445/report)
#- ES_USERNAME=monitor # (optional) ES user
#- ES_PASSWORD=password # (optional) ES password
#- ADVANCED_ALERTS=true # (optional) Enable Advanced Alerts
#- ADVANCED_ALERTS_URL=http://alerts:80 # (optional) Advanced Alerts URL
volumes:
- monitor-data:/data:U # Persist MONITOR data
networks:
- monitoring
depends_on:
- chrome
mem_limit: 750m
cpus: 1.0
deploy:
resources:
limits:
memory: 750M
cpus: "1.0"
tty: true # Enable TTY
stdin_open: true # Keep STDIN open
alerts:
image: registry.frafos.net/fril/alerts:10.2
container_name: alerts
restart: always
environment:
REDIS_HOST: "redis"
elasticConfigUrl: "http://elastic:9200/"
cap_add:
- AUDIT_CONTROL
- NET_RAW
- AUDIT_WRITE
ports:
- "80:80"
networks:
- monitoring
depends_on:
elastic:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: [ "CMD-SHELL", "curl -fsS 'http://localhost:80/api/alertapi/help' || exit 1" ]
interval: 15s
timeout: 5s
retries: 20
start_period: 15s
redis:
image: registry.frafos.net/fril/redis-stack-server:latest
container_name: redis
restart: always
expose: [ "6379" ]
security_opt: [ "no-new-privileges:true" ]
cap_drop: [ MKNOD, NET_RAW, AUDIT_WRITE ]
networks:
- monitoring
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 20
start_period: 10s
rq2rest:
image: registry.frafos.net/fril/rq2rest:latest
container_name: rq2rest
command:
[
"-c",
"/etc/rq2rest.ini",
"-d",
"5",
"--redis_url=redis:6379",
"--http_url=http://alerts:80/ingestion/http/00000000-0000-0000-0000-0\
00000000000",
]
tty: true
networks:
- monitoring
depends_on:
redis:
condition: service_healthy
alerts:
condition: service_healthy
volumes:
es-data:
es-snapshots:
monitor-data:
ccm-data:
networks:
monitoring:
driver: bridge
enable_ipv6: true
signaling:
driver: bridge
enable_ipv6: true
Docker is the recommended way for quick setup and easy updates.
To install using Podman:
- Download the provided
docker-compose.ymlfile below. - Pull the container image from the registry:
podman pull registry.frafos.net/abc/mon:<tag> - Run the container:
podman run -d -p 445:5000 registry.frafos.net/abc/mon:<tag> - Or use Compose:
podman-compose up -d - Access the dashboard at
http://localhost:445
Fresh installations use plain HTTP only, as nginx and self-signed certificates are not included by default.
Container images are available at: Frafos Container Registry
Possible CAPs to be used during runtime
CAP_NET_BIND_SERVICE: Needed to give the container access to open a port for receiving syslog messages.
Show example docker-compose.yml
# Example Docker Compose file for Frafos monitoring stack
# Each service below represents a containerized application.
services:
ccm:
# Call Control Manager (CCM) service
image: registry.frafos.net/abc/ccm:5.5
container_name: ccm
ports:
- "443-444:443-444" # Expose ports 443 and 444
networks:
- monitoring # Connect to monitoring network
- signaling # Connect to signaling network
restart: always # Always restart on failure
volumes:
- ccm-data:/data # Persist data in named volume
cap_add:
- AUDIT_CONTROL # Add audit control capability
- AUDIT_WRITE # Add audit write capability
elastic:
# Elasticsearch service for log and metric storage
image: docker.elastic.co/elasticsearch/elasticsearch:9.1.5
container_name: elastic
ports:
- "9200:9200" # HTTP API
- "9300:9300" # Transport protocol
environment:
- discovery.type=single-node # Run as single node
- xpack.ml.enabled=false # Disable ML features
- network.host=_local_,_site_ # Bind to local and site interfaces
- path.repo=/usr/share/elasticsearch/snapshots # Path for snapshots
- logger.level=debug # Set logging level to debug
#- thread_pool.search.queue_size=10000 # (optional) Increase search queue size
#- http.max_initial_line_length=16kb # (optional) Increase max HTTP header size
#- cluster.max_shards_per_node=166 # (optional) Increase max shards
#- indices.lifecycle.history_index_enabled=false # (optional) Disable ILM history
# 1. FOR PLAIN HTTP USE THE FOLLOWING VARIABLES -----
- xpack.security.enabled=false # Disable security
- xpack.security.http.ssl.enabled=false # Disable HTTP SSL
# 1.2 OR ENABLE SECURITY --- (default user = elastic) ---
# - xpack.security.enabled=true
# - ELASTIC_PASSWORD=Test1234 # curl -u elastic:Test1234 http://localhost:9200/
# 2. FOR SSL USE THE FOLOWING VARIABLES -------------
# - xpack.security.enabled=true
# - xpack.security.http.ssl.enabled=true
# - xpack.security.http.ssl.certificate=certs/server.crt
# - xpack.security.http.ssl.key=certs/server.key
# - xpack.security.transport.ssl.enabled=true
# - xpack.security.transport.ssl.certificate=certs/server.crt
# - xpack.security.transport.ssl.key=certs/server.key
# - xpack.security.transport.ssl.verification_mode=certificate
# - xpack.security.transport.ssl.certificate_authorities=certs/ca.crt
# 2.2 --- ANONYMOUS AUTH --- (not recommended for production, but can be useful for development and testing purposes)
# - xpack.security.authc.anonymous.username=anonymous
# - xpack.security.authc.anonymous.roles=superuser
# - xpack.security.authc.anonymous.authz_exception=false
# 2.3 --- OR ---
# - ELASTIC_PASSWORD=Test1234 # curl --cacert ./path/to/certs/ca.crt -u elastic:Test1234 https://localhost:9200/
networks:
- monitoring
restart: always
ulimits:
nofile:
soft: 65536
hard: 65536
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 4g
volumes:
- es-data:/usr/share/elasticsearch/data # Data volume
- es-snapshots:/usr/share/elasticsearch/snapshots # Snapshots volume
#- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # (optional) Custom config
# - ./path/to/certs:/usr/share/elasticsearch/config/certs:ro
chrome:
# Headless Chrome for PDF generation or browser automation
image: zenika/alpine-chrome:124
#image: registry.frafos.net/contrib/alpine-chrome:latest # (alternative image)
container_name: chrome
#shm_size: "1gb" (optional) not required - zenika/alpine-chrome uses --disable-dev-shm-usage by default.
networks:
- monitoring
expose:
- "9222" # Expose remote debugging port
command:
- "--no-sandbox"
- "--remote-debugging-address=::"
- "--remote-debugging-port=9222"
restart: always
healthcheck:
test: [ "CMD", "wget", "-q", "--spider", "http://localhost:9222/json/version" ]
interval: 30s
timeout: 10s
retries: 3
monitor:
# Monitoring service (MONITOR)
image: registry.frafos.net/abc/mon:10.2
container_name: monitor
ports:
- "445:5000" # SERVER_PORT (445 on host, 5000 in container - fresh install uses HTTP, no nginx/certificates)
- "514:514/udp" # VECTOR_SYSLOG_PORT (default VECTOR_SYSLOG_TRANSPORT_PROTOCOL is UDP)
- "514:514/tcp" # VECTOR_SYSLOG_PORT (when VECTOR_SYSLOG_TRANSPORT_PROTOCOL is TCP)
- "5044:5044" # VECTOR_SOCKET_PORT
- "5045:5045" # VECTOR_SOCKET_TLS_PORT
- "3042:3042" # UPLOAD_API_PORT
- "873:873" # UPLOAD_API_RSYNC_PORT
environment:
- BROWSER_URL=http://chrome:9222/
- PDF_RENDER_URL=http://monitor:5000
#- CCM=ccm # (optional) CCM service name
#- ES=http://elastic:9200 # (optional) ES endpoint
#- REPORT_URL=http://localhost:445/report # (optional) Report URL (use localhost or bracketed IPv6 like http://[::1]:445/report)
#- ES_USERNAME=monitor # (optional) ES user
#- ES_PASSWORD=password # (optional) ES password
#- ADVANCED_ALERTS=true # (optional) Enable Advanced Alerts
#- ADVANCED_ALERTS_URL=http://alerts:80 # (optional) Advanced Alerts URL
volumes:
- monitor-data:/data:U # Persist MONITOR data
networks:
- monitoring
depends_on:
- chrome
mem_limit: 750m
cpus: 1.0
deploy:
resources:
limits:
memory: 750M
cpus: "1.0"
tty: true # Enable TTY
stdin_open: true # Keep STDIN open
alerts:
image: registry.frafos.net/fril/alerts:10.2
container_name: alerts
restart: always
environment:
REDIS_HOST: "redis"
elasticConfigUrl: "http://elastic:9200/"
cap_add:
- AUDIT_CONTROL
- NET_RAW
- AUDIT_WRITE
ports:
- "80:80"
networks:
- monitoring
depends_on:
elastic:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: [ "CMD-SHELL", "curl -fsS 'http://localhost:80/api/alertapi/help' || exit 1" ]
interval: 15s
timeout: 5s
retries: 20
start_period: 15s
redis:
image: registry.frafos.net/fril/redis-stack-server:latest
container_name: redis
restart: always
expose: [ "6379" ]
security_opt: [ "no-new-privileges:true" ]
cap_drop: [ MKNOD, NET_RAW, AUDIT_WRITE ]
networks:
- monitoring
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 20
start_period: 10s
rq2rest:
image: registry.frafos.net/fril/rq2rest:latest
container_name: rq2rest
command:
[
"-c",
"/etc/rq2rest.ini",
"-d",
"5",
"--redis_url=redis:6379",
"--http_url=http://alerts:80/ingestion/http/00000000-0000-0000-0000-0\
00000000000",
]
tty: true
networks:
- monitoring
depends_on:
redis:
condition: service_healthy
alerts:
condition: service_healthy
volumes:
es-data:
es-snapshots:
monitor-data:
ccm-data:
networks:
monitoring:
driver: bridge
enable_ipv6: true
signaling:
driver: bridge
enable_ipv6: true
Podman is Docker-compatible and supports rootless containers. You can use podman-compose for multi-container setups.
To install using Kubernetes:
- Download the provided manifest file below.
- Make sure your manifest uses the registry image:
image: registry.frafos.net/abc/mon:<tag> - Apply the Kubernetes manifests:
kubectl apply -f manifest.example.yaml - Monitor pods and services:
kubectl get pods,kubectl get svc - Access the dashboard via the exposed service (see your cluster's configuration)
Container images are available at: Frafos Container Registry
Show example manifest (manifest.yaml)
# --------------------------
# Persistent Volume Claims
# --------------------------
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ccm-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-snapshots
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: monitor-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
# --------------------------
# CCM
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ccm
spec:
replicas: 1
selector:
matchLabels:
app: ccm
template:
metadata:
labels:
app: ccm
spec:
containers:
- name: ccm
image: registry.frafos.net/abc/ccm:5.5
ports:
- containerPort: 443
- containerPort: 444
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
volumeMounts:
- name: ccm-storage
mountPath: /data
securityContext:
capabilities:
add: ["AUDIT_CONTROL", "AUDIT_WRITE"]
volumes:
- name: ccm-storage
persistentVolumeClaim:
claimName: ccm-data
---
apiVersion: v1
kind: Service
metadata:
name: ccm
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: ccm
ports:
- name: https
port: 443
targetPort: 443
- name: https2
port: 444
targetPort: 444
type: ClusterIP
# --------------------------
# Elasticsearch
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: elastic
spec:
replicas: 1
selector:
matchLabels:
app: elastic
template:
metadata:
labels:
app: elastic
spec:
containers:
- name: elastic
image: docker.elastic.co/elasticsearch/elasticsearch:9.1.5
ports:
- containerPort: 9200
- containerPort: 9300
env:
- name: discovery.type
value: "single-node"
- name: network.host
value: "_local_,_site_"
- name: path.repo
value: "/usr/share/elasticsearch/snapshots"
- name: xpack.ml.enabled
value: "false"
#- name: thread_pool.search.queue_size # (optional) Increase search queue size
# value: "10000"
#- name: http.max_initial_line_length # (optional) Increase max HTTP header size
# value: "16kb"
#- name: cluster.max_shards_per_node # (optional) Increase max shards
# value: "166"
#- name: indices.lifecycle.history_index_enabled # (optional) Disable ILM history
# value: "false"
# 1. FOR PLAIN HTTP USE THE FOLLOWING VARIABLES -----
- name: xpack.security.enabled
value: "false"
- name: xpack.security.http.ssl.enabled
value: "false"
# 1.2 OR ENABLE SECURITY --- (default user = elastic) ---
#- name: xpack.security.enabled
# value: "true"
#- name: ELASTIC_PASSWORD # curl -u elastic:Test1234 http://localhost:9200/
# value: "Test1234"
# 2. FOR SSL USE THE FOLLOWING VARIABLES -------------
#- name: xpack.security.enabled
# value: "true"
#- name: xpack.security.http.ssl.enabled
# value: "true"
#- name: xpack.security.http.ssl.certificate
# value: "certs/server.crt"
#- name: xpack.security.http.ssl.key
# value: "certs/server.key"
#- name: xpack.security.transport.ssl.enabled
# value: "true"
#- name: xpack.security.transport.ssl.certificate
# value: "certs/server.crt"
#- name: xpack.security.transport.ssl.key
# value: "certs/server.key"
#- name: xpack.security.transport.ssl.verification_mode
# value: "certificate"
#- name: xpack.security.transport.ssl.certificate_authorities
# value: "certs/ca.crt"
# 2.2 --- ANONYMOUS AUTH --- (not recommended for production)
#- name: xpack.security.authc.anonymous.username
# value: "anonymous"
#- name: xpack.security.authc.anonymous.roles
# value: "superuser"
#- name: xpack.security.authc.anonymous.authz_exception
# value: "false"
# 2.3 --- OR ---
#- name: ELASTIC_PASSWORD # curl --cacert ./path/to/certs/ca.crt -u elastic:Test1234 https://localhost:9200/
# value: "Test1234"
resources:
limits:
memory: "4Gi"
cpu: "1000m"
requests:
memory: "2Gi"
cpu: "500m"
volumeMounts:
- name: es-data
mountPath: /usr/share/elasticsearch/data
- name: es-snapshots
mountPath: /usr/share/elasticsearch/snapshots
#- name: es-certs # (optional) Mount certificates for SSL
# mountPath: /usr/share/elasticsearch/config/certs
# readOnly: true
volumes:
- name: es-data
persistentVolumeClaim:
claimName: es-data
- name: es-snapshots
persistentVolumeClaim:
claimName: es-snapshots
#- name: es-certs # (optional) Secret or ConfigMap containing certs
# secret:
# secretName: es-certs
---
apiVersion: v1
kind: Service
metadata:
name: elastic
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: elastic
ports:
- name: http
port: 9200
targetPort: 9200
- name: transport
port: 9300
targetPort: 9300
# --------------------------
# Chrome
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: chrome
spec:
replicas: 1
selector:
matchLabels:
app: chrome
template:
metadata:
labels:
app: chrome
spec:
containers:
- name: chrome
image: zenika/alpine-chrome:124
args:
- "--no-sandbox"
- "--remote-debugging-address=::"
- "--remote-debugging-port=9222"
ports:
- containerPort: 9222
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "128Mi"
cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
name: chrome
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: chrome
ports:
- name: debug
port: 9222
targetPort: 9222
# --------------------------
# MONITOR
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: monitor
spec:
replicas: 1
selector:
matchLabels:
app: monitor
template:
metadata:
labels:
app: monitor
spec:
containers:
- name: monitor
image: registry.frafos.net/abc/mon:10.2
ports:
- containerPort: 445
- containerPort: 514
- containerPort: 5045
- containerPort: 5044
- containerPort: 3042
- containerPort: 873
volumeMounts:
- name: monitor-storage
mountPath: /data
tty: true
stdin: true
resources:
limits:
memory: "750Mi"
cpu: "1"
requests:
memory: "250Mi"
cpu: "250m"
volumes:
- name: monitor-storage
persistentVolumeClaim:
claimName: monitor-data
---
apiVersion: v1
kind: Service
metadata:
name: monitor
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: monitor
ports:
- name: server
port: 445
targetPort: 445
- name: vector_syslog_port
port: 514
targetPort: 514
- name: vector_socket_port
port: 5045
targetPort: 5045
- name: vector_socket_tls_port
port: 5044
targetPort: 5044
- name: upload-api
port: 3042
targetPort: 3042
- name: upload-rsync
port: 873
targetPort: 873
# --------------------------
# Redis
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
securityContext:
runAsNonRoot: true
capabilities:
drop: ["MKNOD", "NET_RAW", "AUDIT_WRITE"]
containers:
- name: redis
image: registry.frafos.net/fril/redis-stack-server:latest
ports:
- containerPort: 6379
livenessProbe:
exec:
command: ["redis-cli", "ping"]
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
resources:
limits:
memory: "1Gi"
cpu: "500m"
requests:
memory: "512Mi"
cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: redis
ports:
- name: redis
port: 6379
targetPort: 6379
# --------------------------
# Alerts
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: alerts
spec:
replicas: 1
selector:
matchLabels:
app: alerts
template:
metadata:
labels:
app: alerts
spec:
containers:
- name: alerts
image: registry.frafos.net/fril/alerts:10.2
ports:
- containerPort: 80
env:
- name: REDIS_HOST
value: "redis"
- name: elasticConfigUrl
value: "http://elastic:9200/"
securityContext:
capabilities:
add: ["AUDIT_CONTROL", "NET_RAW", "AUDIT_WRITE"]
readinessProbe:
httpGet:
path: /api/alertapi/help
port: 80
initialDelaySeconds: 15
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 20
resources:
limits:
memory: "1Gi"
cpu: "500m"
requests:
memory: "512Mi"
cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
name: alerts
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: alerts
ports:
- name: http
port: 80
targetPort: 80
# --------------------------
# rq2rest
# --------------------------
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rq2rest
spec:
replicas: 1
selector:
matchLabels:
app: rq2rest
template:
metadata:
labels:
app: rq2rest
spec:
containers:
- name: rq2rest
image: registry.frafos.net/fril/rq2rest:latest
command:
- "/bin/sh"
- "-c"
- >
rq2rest -c /etc/rq2rest.ini -d 5
--redis_url=redis:6379
--http_url=http://alerts:80/ingestion/http/00000000-0000-0000-0000-000000000000
tty: true
resources:
limits:
memory: "1Gi"
cpu: "500m"
requests:
memory: "512Mi"
cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
name: rq2rest
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
selector:
app: rq2rest
ports:
- name: rq
port: 8080
targetPort: 8080
Kubernetes setup is ideal for scalable, resilient, and production-grade deployments.
Chrome Service
The Chrome service provides headless browser capabilities for generating PDF reports in Auto Trigger. It is pre-configured and starts automatically with the stack.
Configuration:
| Variable | Default | Description |
|---|---|---|
BROWSER_URL | http://chrome:9222/ | Connection URL for Chrome service |
PDF_RENDER_URL | http://monitor:5000 | URL Chrome uses to render reports |
Update PDF_RENDER_URL if your monitor service uses a different name or port.
Troubleshooting:
# Verify Chrome is running and healthy
docker ps | grep chrome
# View logs
docker logs chrome
If Chrome crashes frequently, increase shared memory:
chrome:
shm_size: '2gb'
shm_size is not required when using zenika/alpine-chrome — the image already uses --disable-dev-shm-usage by default, which bypasses Docker's 64MB shared memory limit.