Seite ursprünglich erstellet im GBV-Wiki von Florian Gleixner
Ingolf hat mich gebeten, unsere Doku aus dem LRZ auch hier einzustellen. Wir betreiben im LRZ einige Folio Instanzen für Bibliotheken des BVB.
Ziel
Die teilnehmenden Bibliotheken sollen bei Fehlern oder Unklarheiten die Möglichkeit haben, auf die Logs der Docker Container, von Okapi, dem Betriebssystem und der Datenbank schauen können.
Installation Server
Neue Debian 10 Openstack VM foliotest-log.
apt-get update
apt-get upgrade
apt-get install gnupg
wget -qO - https: //artifacts .elastic.co /GPG-KEY-elasticsearch | apt-key add -
apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources .list.d /elastic-7 .x.list
apt-get update
apt-get install elasticsearch
systemctl enable elasticsearch
apt-get install kibana
systemctl enable kibana
|
Elasticsearch (Single Instance)
Konfiguration /etc/elasticsearch/elasticsearch.yml:
cluster.name: folio-logs
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
discovery. type : single-node
xpack.security.enabled: true
|
Elasticsearch starten und Passwörter setzen:
systemctl start elasticsearch
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
|
Für alle das selbe Passwort gesetzt. Es steht in /home/debian/elastic-pw
Compute Cloud ungeeignet für Elasticsearch (→ Elastic Cluster)
Der Rechner auf der Compute Cloud hatte so eine schlechte Schreib-Performance, dass ich die Elasticsearch Node auf einen Rechner der SolraaS Infrastruktur verschieben musste.
Dabei wurde ein Elastic Cluster aus 4 Nodes aufgebaut. Der Cluster funktioniert aber nur, wenn man Zertifikate installiert:
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
mkdir /etc/elasticsearch/certs
cp /usr/share/elasticsearch/elastic-certificates .p12 /etc/elasticsearch/certs/
chown -r elasticsearch /etc/elasticsearch/certs
|
Die Datei elastic-certificates.p12 muss man dann auf alle Knoten in das Verzeichnis legen. Die /etc/elastasticsearch/elastic.yml sieht dann so aus:
cluster.name: folio-logs
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
cluster.initial_master_nodes: [ "search-dar1-01" ]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs /elastic-certificates .p12
xpack.security.transport.ssl.truststore.path: certs /elastic-certificates .p12
|
search-dar1-01 = 10.195.16.101 ist dabei der erste Elasticsearch Clusterknoten.
Kibana
Konfiguration von /etc/kibana/kibana.yml
Die Einstellung elasticsearch.hosts kann weggelassen werden, wenn auf dem Rechner auch ein Elasticsearch läuft.
Starten
Client - Filebeat
Auf den einzelnen Folio Instanzen werden die Logs per Filebeat geschickt:
wget -qO - https: //artifacts .elastic.co /GPG-KEY-elasticsearch | apt-key add -
apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources .list.d /elastic-7 .x.list
apt-get update && apt-get install filebeat
systemctl enable filebeat
|
Konfiguration /etc/filebeat/filebeat.yml
filebeat.inputs:
- type : container
enabled: true
paths:
- /var/lib/docker/containers/ */*.log
- type : log
enabled: true
paths:
- /var/log/ *.log
- /var/log/syslog
- /var/log/folio/ *.log
- /var/log/postgresql/ *.log
filebeat.config.modules:
path: ${path.config} /modules .d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.elasticsearch:
hosts: [ "10.195.16.101:9200" ]
indices:
- index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
username: "elastic"
password: "********"
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata:
host: "unix:///var/run/docker.sock"
- add_kubernetes_metadata: ~
- decode_json_fields:
fields: [ "message" ]
target: "json"
overwrite_keys: true
- drop_event:
when:
regexp:
message: " filebeat"
|
Die Filebeat Integration ist inzwischen per Ansible Playbook automatisiert. Der Indexname hat den Rechnernamen vorgestellt, so dass man die Indexe den einzelnen Bibliotheken zuweisen kann.
Kibana GUI
Die Kibana GUI ist dann auf Port 5601 erreichbar. Login mit dem User "elastic". Als erstes muss man unter "Stack Management" → "Index Patterns" so einen erstellen mit Index-Pattern Name "filebeat-*". Dann kann man unter Analytics → Discover diesen ansehen.
Sinnvoll ist die Auswahl der Felder wie im Bild
SSL
Die Kommunikation zwischen Filebeat und Elasticserach sowie zwischen Kibana und Elasticserach ist momentan nicht verschlüsselt. Ist auch nicht zwingend notwendig (interne Netze). Wie das geht sollte hier beschrieben sein:
https://www.elastic.co/de/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash
Damit User von aussen sich per https auf kibana einloggen können wurde ein Zertifikat erstellt, und ein nginx als Proxy vorgeschaltet:
apt-get install nginx
egrep -ve "^\s*#" /etc/nginx/sites-enabled/default
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/private/foliotest-log-chain .pem;
ssl_certificate_key /etc/ssl/private/foliotest-log-sec-key-ohnepass .pem;
root /var/www/html ;
index index.html index.htm index.nginx-debian.html;
server_name foliotest-log.bib-bvb.de;
location / {
proxy_pass http: //localhost :5601;
}
}
systemctl enable nginx --now
|