* Update chart to support Graylog 3 Signed-off-by: KongZ <goonohc@gmail.com> * bump version Signed-off-by: KongZ <goonohc@gmail.com>
Graylog
This chart provide the Graylog deployments. Note: It is strongly recommend to use on Official Graylog image to run this chart.
Quick Installation
This chart requires the following charts before install Graylog
- MongoDB
- Elasticsearch
To install the Graylog Chart with all dependencies
kubectl create namespace graylog
helm install --namespace "graylog" -n "graylog" stable/graylog
Manually Install Dependencies
This method is recommended when you want to expand the availability, scalability, and security of the services. You need to install MongoDB replicaset and Elasticsearch with proper settings before install Graylog.
To install MongoDB, run
helm install --namespace "graylog" -n "mongodb" stable/mongodb-replicaset
To install Elasticsearch, run
helm install --namespace "graylog" -n "elasticsearch" stable/elasticsearch
Note: There are many alternative Elasticsearch available on GitHub. If you found the stable/elasticsearch is not suitable, you can search other charts from GitHub repositories.
Install Chart
To install the Graylog Chart into your Kubernetes cluster (This Chart requires persistent volume by default, you may need to create a storage class before install chart.
helm install --namespace "graylog" -n "graylog" stable/graylog \
--set tags.install-mongodb=false\
--set tags.install-elasticsearch=false\
--set graylog.mongodb.uri=mongodb://mongodb-mongodb-replicaset-0.mongodb-mongodb-replicaset.graylog.svc.cluster.local:27017/graylog?replicaSet=rs0 \
--set graylog.elasticsearch.hosts=http://elasticsearch-client.graylog.svc.cluster.local:9200
After installation succeeds, you can get a status of Chart
helm status "graylog"
If you want to delete your Chart, use this command
helm delete --purge "graylog"
Install Chart with specific Graylog cluster size
By default, this Chart will create a graylog with 2 nodes (1 master, 1 coordinating). If you want to change the cluster size during installation, you can use --set graylog.replicas={value} argument. Or edit values.yaml
For example: Set cluster size to 5
helm install --namespace "graylog" -n "graylog" --set graylog.replicas=5 stable/graylog
The command above will install 1 master and 4 coordinating.
Install Chart with specific node pool
Sometime you may need to deploy your graylog to specific node pool to allocate resources.
Using node selector
For example, you have 6 vms in node pools and you want to deploy graylog to node which labeled as cloud.google.com/gke-nodepool: graylog-pool
Set the following values in values.yaml
graylog:
nodeSelector: { cloud.google.com/gke-nodepool: graylog-pool }
Using tolerations
For example, you have 6 vms in node pools and 3 nodes are tainted with NO_SCHEDULE graylog=true
Set the following values in values.yaml
graylog:
tolerations:
- key: graylog
value: "true"
operator: "Equal"
Configuration
The following table lists the configurable parameters of the Cassandra chart and their default values.
| Parameter | Description | Default |
|---|---|---|
graylog.image |
graylog image repository |
graylog/graylog:2.4 |
graylog.imagePullPolicy |
Image pull policy | IfNotPresent |
graylog.replicas |
The number of Graylog instances in the cluster. The chart will automatic create assign master to one of replicas | 2 |
graylog.resources |
CPU/Memory resource requests/limits | Memory: 1024Mi, CPU: 500m |
graylog.heapSize |
Override Java heap size. If this value empty, chart will allocate heapsize using -XX:+UseCGroupMemoryLimitForHeap |
`` |
graylog.nodeSelector |
Graylog server pod assignment | {} |
graylog.affinity |
Graylog server affinity | {} |
graylog.tolerations |
Graylog server tolerations | [] |
graylog.nodeSelector |
Graylog server node selector | {} |
graylog.env |
Graylog server env variables | {} |
graylog.service.type |
Kubernetes Service type | ClusterIP |
graylog.service.port |
Graylog Service port | 9000 |
graylog.service.master.port |
Graylog Master Service port | 9000 |
graylog.service.master.annotations |
Graylog Master Service annotations | {} |
graylog.podAnnotations |
Kubernetes Pod annotations | {} |
graylog.terminationGracePeriodSeconds |
Pod termination grace period | 120 |
graylog.updateStrategy |
Update Strategy of the StatefulSet | OnDelete |
graylog.persistence.enabled |
Use a PVC to persist data | true |
graylog.persistence.storageClass |
Storage class of backing PVC | nil (uses storage class annotation) |
graylog.persistence.accessMode |
Use volume as ReadOnly or ReadWrite | ReadWriteOnce |
graylog.persistence.size |
Size of data volume | 10Gi |
graylog.ingress.enabled |
If true, Graylog Ingress will be created | false |
graylog.ingress.port |
Graylog Ingress port | false |
graylog.ingress.annotations |
Graylog Ingress annotations | {} |
graylog.ingress.hosts |
Graylog Ingress host names | [] |
graylog.ingress.tls |
Graylog Ingress TLS configuration (YAML) | [] |
graylog.input |
Graylog Input configuration (YAML) Sees #Input section for detail | {} |
graylog.metrics.enabled |
If true, add Prometheus annotations to pods | false |
graylog.geoip.enabled |
If true, Maxmind Geoip Lite will be installed to ${GRAYLOG_HOME}/etc/GeoLite2-City.mmdb | false |
graylog.plugins |
A list of Graylog installation plugins | [] |
graylog.rootUsername |
Graylog root user name | admin |
graylog.rootPassword |
Graylog root password. If not set, random 10-character alphanumeric string | `` |
graylog.rootEmail |
Graylog root email. | `` |
graylog.rootTimezone |
Graylog root timezone. | UTC |
graylog.elasticsearch.hosts |
Graylog Elasticsearch host name. You need to specific where data will be stored. | `` |
graylog.mongodb.uri |
Graylog MongoDB connection string. You need to specific where data will be stored. | `` |
graylog.transportEmail.enabled |
If true, enable transport email settings on Graylog | false |
graylog.config |
Add additional server configuration to graylog.conf file. |
`` |
graylog.serverFiles |
Add additional server files on /etc/graylog/server. This is useful for enable TLS on input | {} |
graylog.journal.deleteBeforeStart |
Delete all journal files before start Graylog | false |
rbac.create |
If true, create & use RBAC resources | true |
rbac.serviceAccount.create |
If true, create the Graylog service account | true |
rbac.serviceAccount.name |
Name of the server service account to use or create | {{ graylog.fullname }} |
tags.install-mongodb |
If true, this chart will install MongoDB from requirement dependencies. If you want to install MongoDB by yourself, please set to false |
true |
tags.install-elasticsearch |
If true, this chart will install Elasticsearch from requirement dependencies. If you want to install Elasticsearch by yourself, please set to false |
true |
How it works
This chart will create a Graylog statefulset with one Master node. The chart will automatically create Master node Pod label graylog-role=master, if it does not exists. The others Pods will be label with graylog-role=coordinating
This chart will automatically calculate Java heap size from given resources.requests.memory value. If you want to specify number of heap size, you can set graylog.heapSize to your desired value. The graylog.heapSize value must be in JVM -Xmx format.
Input
You can enable input ports by edit the input values. For example, you want to create a GELF input on port 12222, and 12223 with Cloud LoadBalancer and syslog on UDP port 5410 without load balancer.
input:
tcp:
service:
type: LoadBalancer
loadBalancerIP:
ports:
- name: gelf1
port: 12222
- name: gelf2
port: 12223
udp:
service:
type: ClusterIP
ports:
- name: syslog
port: 5410
Note: Name must be in IANA_SVC_NAME (at most 15 characters, matching regex a-z0-9* and it must contains at least one letter [a-z], hyphens cannot be adjacent to other hyphens)
Note: The port list should be sorted by port number.
Input TLS
To enable TLS on input in Graylog, you need to specify the server private key and certificate. You can add them in graylog.serverFiles value. For example
graylog:
serverFiles:
server.cert: |
-----BEGIN CERTIFICATE-----
MIIFYTCCA0mgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwcjELMAkGA1UEBhMCVEgx
EDAOBgNVBAgMB0Jhbmdrb2sxEDAOBgNVBAcMB0Jhbmdrb2sxGDAWBgNVBAoMD09t
aXNlIENvLiwgTHRkLjEPMA0GA1UECwwGRGV2b3BzMRQwEgYDVQQDDAtjYS5vbWlz
ZS5jbzAeFw0xNzA2MDEwOTQ0NTJaFw0xOTA2MjEwOTQ0NTJaMHkxCzAJBgNVBAYT
AlRIMRAwDgYDVQQIDAdCYW5na29rMRAwDgYDVQQHDAdCYW5na29rMRgwFgYDVQQK
DA9PbWlzZSBDby4sIEx0ZC4xDzANBgNVBAsMBkRldm9wczEbMBkGA1UEAwwSZ3Jh
4YE6FOKJmiDV7KsmoSO2JTEaZAK6sdxI7zFJJH0TNFIuKewEBsVH/W5RccjwK/z/
BHwoTQc95zbfFjt1JwDiq8jGTVnQoXH99wAIW+HDYq6hqHyqW3YuQ8QvXfi/ebAs
rn0urmEC7JhsZIg92AqVYEgdp5H6uFqPIK1U6aYrz5zzZpRfEA==
-----END CERTIFICATE-----
server.key: |
-----BEGIN PRIVATE KEY-----
MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQC1zwgrnurQGlwe
ZcKe2RXLs9XzQo4PzNsbxRQXSZef/siUZ/X3phd7Tt7QbQv8sxoZFR1/R4neN3KV
tsWJ6YL3CY1IwqzxtR6SHzkg/CgUFgP4Jq9NDodOFRlmkZBK9iO9x/VITxLZPBQt
f+ygeNhfG/oZZxlLSWNC/adlFfUGI8TujCGGyydxAegyWRYmhkLM7F3vRqMXiUn2
UP/nPEMasHiHS7r99RzJILbU494aNYTxprfBAoGAdWwO/4I/r3Zo672AvCs2s/P6
G85cX2hKMFy3B4/Ww53jFA3bsWTOyXBv4srl3v9C3xkQmDwUxPDshEN45JX1AMIc
vxQkW5cm2IaPHB1BsuQpAuW6qIBT/NZqLmexb4jipAjTN4wQ2dkjI/zK2/SST5wb
vNufGafZ1IpvkUsDkA0=
-----END PRIVATE KEY-----
Then configure Graylog input to
| Parameter | Value |
|---|---|
| tls_cert_file: | /etc/graylog/server/server.cert |
| tls_enable: | true |
| tls_key_file: | /etc/graylog/server/server.key |
Get Graylog status
You can get your Graylog status by running the command
kubectl get po -L graylog-role
Output
NAME READY STATUS RESTARTS AGE graylog-ROLE
graylog-0 1/1 Running 0 1d master
graylog-1 1/1 Running 0 1d coordinating
graylog-2 1/1 Running 0 1m coordinating
Trouble shooting
If you are encounter "Unprocessed Messages" or Journal files corrupted, you may need to delete all journal files before staring Graylog.
You can do this automatically by setting graylog.journal.deleteBeforeStart to true
The chart will delete all journal files before starting Graylog.
Note: All uncommitted logs will be permanently DELETED when this value is true