日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elk7.2 Docker

發(fā)布時間:2023/11/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elk7.2 Docker 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正如官方所說的那樣 https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html,Elasticsearch默認(rèn)使用mmapfs目錄來存儲索引。操作系統(tǒng)默認(rèn)的mmap計數(shù)太低可能導(dǎo)致內(nèi)存不足,我們可以使用下面這條命令來增加內(nèi)存
為了防止ElasticSearch啟動報錯,max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

vi /etc/sysctl.conf?

sysctl?-w vm.max_map_count=262144
?
添加配置

vm.max_map_count=655360


?
執(zhí)行命令

sysctl -p


?
目錄結(jié)構(gòu)

創(chuàng)建目錄

?

mkdir -p app/elk/elasticsearch/data/ app/elk/kibana/ app/elk/logstash/pipeline/


要授權(quán)給該目錄,否則elasticsearch無法啟動

chmod 777 app/elk/elasticsearch/data

?
創(chuàng)建各個文件夾下的文件

?

touch app/elk/docker-compose.yml app/elk/elasticsearch/elasticsearch.yml app/elk/kibana/kibana.yml app/elk/logstash/pipeline/logstash.conf app/elk/logstash/logstash.yml

?
把下列文件內(nèi)容復(fù)制進(jìn)去,不要落下

elasticsearch.yml---

## Default Elasticsearch configuration from Elasticsearch base image. ## https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/elasticsearch.yml # cluster.name: "docker-cluster" network.host: 0.0.0.0## X-Pack settings ## see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html # xpack.license.self_generated.type: trial xpack.security.enabled: true xpack.monitoring.collection.enabled: true?


#kibana.yml

## Default Kibana configuration from Kibana base image. ### https://github.com/elastic/kibana/blob/master/src/dev/build/tasks/os_packages/docker_generator/templates/kibana_yml.template.js server.name: kibana server.host: 0.0.0.0 ##漢化kibana? i18n.locale: "zh-CN" elasticsearch.hosts: [ "http://elasticsearch:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true ### X-Pack security credentials elasticsearch.username: elastic elasticsearch.password: changeme


logstash.conf
注意下:我配置的是多來源日志,不同的系統(tǒng),訪問不同的TCP端口,如果只有一個來源的話,就刪除掉一個就行

input {tcp {type => "springboot1"mode => "server"host => "0.0.0.0"port => 5000codec => json_lines}tcp {type => "springboot2"mode => "server"host => "0.0.0.0"port => 5010codec => json_lines} } output {if [type] == "springboot1" {elasticsearch {hosts => "elasticsearch:9200"index => "springboot1-logstash-%{+YYYY.MM.dd}"user => elasticpassword => changeme}}else if [type] == "springboot2" {elasticsearch {hosts => "elasticsearch:9200"index => "springboot2-logstash-%{+YYYY.MM.dd}"user => elasticpassword => changeme}} }


logstash.yml

## Default Logstash configuration from Logstash base image. ### https://github.com/elastic/logstash/blob/master/docker/data/logstash/config/logstash-full.yml http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ] #elasticsearch 這里寫的是你的ip ## X-Pack security credentials xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changeme


docker-compose.yml

version: "3" services:###配置elasticsearchelasticsearch:image: elasticsearch:7.2.0container_name: elasticsearch user: rootprivileged: trueports:- "9200:9200"- "9300:9300"environment:discovery.type: single-node##es的密碼ELASTIC_PASSWORD: changeme#設(shè)置JVM最大(小)可用內(nèi)存為1024,這個很重要,我一開始沒有設(shè)置這個,我的es起不來ES_JAVA_OPTS: "-Xmx1024m -Xms1024m" ES_JAVA_OPTS: "-Xmx1g -Xms1g"volumes:# 這里注意一下 如果你想吧docker中es的數(shù)據(jù) 映射出來 你本地的 /home/elasticsearch 必須擁有 777權(quán)限- /app/elk/elasticsearch/data/:/usr/share/elasticsearch/data- /app/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml#network_mode: host###配置Logstashlogstash:image: logstash:7.2.0container_name: logstashports:- "5000:5000/tcp"- "5010:5010/tcp"- "5000:5000/udp"- "9600:9600"#network_mode: hostuser: rootprivileged: trueenvironment:discovery.type: single-nodeES_JAVA_OPTS: "-Xmx256m -Xms256m"volumes:###將本機目錄/opt/elk/logstach/pipeline下的文件映射到docker容器里面- /app/elk/logstash/pipeline:/usr/share/logstash/pipeline- /app/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.ymldepends_on:- elasticsearch ###配置Kibana 64位系統(tǒng)下內(nèi)存約為1.4GB,32位系統(tǒng)下約為0.7GBkibana:image: kibana:7.2.0container_name: kibanauser: rootprivileged: trueports:- "5601:5601"volumes:###將本機目錄/opt/elk/kibana/kibana.yml下的文件映射到docker容器里面- /app/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.ymlenvironment:- ELASTICSEARCH_URL=http://elasticsearch:9200 #network_mode: hostdepends_on:- elasticsearch


通過docker-compose鏡像安裝啟動
下載慢的話最好配置下鏡像加速器 ,配置如下 登錄阿里云找到容器鏡像服務(wù)

cd /app/elk/ docker-compose up -d


Springboot 的logback.xml配置
1.maven安裝對應(yīng)的包

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.4</version> </dependency>



2.配置logback.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--配置logStash 服務(wù)地址--><destination>192.168.10.128:5000</destination><!-- 日志輸出編碼 --><encoder charset="UTF-8"class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><timestamp><timeZone>UTC</timeZone></timestamp><pattern><pattern>{"logLevel": "%level","serviceName": "system-user","pid": "${PID:-}","thread": "%thread","class": "%logger{40}","message": "%message"}</pattern></pattern></providers></encoder></appender><root level="INFO"><appender-ref ref="LOGSTASH" /><appender-ref ref="CONSOLE" /></root> </configuration>


?
如果是多來源的日志搜集,只要改下紅色框里的端口就行,剛才我配置的logstash.conf就是 兩個系統(tǒng)的 一個系統(tǒng)logback.xml 訪問5000端口,另一個系統(tǒng)訪問5010端口


運行起springboot 就能在kibana里看到索引

kibana訪問地址:http://192.168.10.128:5601/
賬號密碼 elastic changeme

在JAVA里打印了些日志

kibana里也有了

?

?

其他相關(guān)問題:

docker FATAL CLI ERROR Error: EACCES: permission denied, open '/usr/share/kibana/config/kibana.yml'

? ?問題原因及解決辦法
? ?原因是CentOS7中的安全模塊selinux把權(quán)限禁掉了,至少有以下三種方式解決掛載的目錄沒有權(quán)限的問題:
? ?1.在運行容器的時候,給容器加特權(quán),及加上 --privileged=true 參數(shù):
? ?docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash
? ?2.臨時關(guān)閉selinux:
? ?setenforce 0
? ?3.添加selinux規(guī)則,改變要掛載的目錄的安全性文本

使用的是docker版本的jenkins,運行后,出現(xiàn)如下錯誤:

[root@localhost CICD]# docker logs -f jenkins? touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?


?
我jenkins掛載的目錄是 /opt/jenkins/xxxxx,root 用戶創(chuàng)建,而 jenkins user的uid為1000
所以需要進(jìn)行 chown 設(shè)置,如下:

sudo chown -R 1000:1000 /opt/jenkins
?
然后重啟容器,錯誤就沒有了。
?

?

docker原生支持眾多的日志引擎,適用于各種不同的應(yīng)用場景,本篇文檔對其作一個簡單的說明。

Docker日志引擎說明

docker支持的日志引擎如下:

  • none:關(guān)閉docker的回顯日志, docker logs 看不到任何輸出。使用這種方式也就意味著無法查看任何容器輸出的日志

  • json-file:把每個容器的回顯日志打到每個容器的內(nèi)部, 形式為json 文件。在實際使用中, 有些容器在啟動后有大量的回顯日志, 尤其在程序內(nèi)部報錯時打出的日志信息尤其巨大, 很可能會因為某幾個容器的json 日志過大而撐爆整個宿主機的磁盤

  • syslog:把所有容器的回顯日志打到系統(tǒng)的syslog中。

    目前harbor私有鏡像倉庫使用docker-compose方式啟動的話,就默認(rèn)使用的這種方式。將所有容器的日志都集中收集到一個harbor-log的容器中,在執(zhí)行docker logs的時候會提示"logs" command is supported only for "json-file" and "journald" loggin drivers (got: syslog)

  • journald:把所有容器的回顯日志打到系統(tǒng)的journald服務(wù)中,這是推薦的方式。

  • fluentd:把所有容器的回顯日志打到fluentd服務(wù)中

  • gelf 把所有容器的回顯日志打到支持 GELF(Graylog Extended Log Format) 格式的服務(wù)中, 比如Graylog或Logstash

修改docker日志引擎

  • 修改docker配置文件/etc/docker/daemon.json如下:
    { "log-driver": "journald" }
  • 在容器運行時指定其日志引擎:
    docker run --log-driver=journald alpint /bin/sh
  • journald配置說明

    journald配置文件說明

    ?
  • # /etc/systemd/jornald.conf示例:

  • ?
  • [Journal]

  • #Storage=auto 存儲為自動模式, 其他模式有無日志模式, 純內(nèi)存模式和純磁盤模式

  • #Compress=yes 默認(rèn)啟動壓縮功能

  • #Seal=yes 默認(rèn)加密, 日志文件為二進(jìn)制文件, 無法 vim或tail 查看

  • #SplitMode=uid

  • #SyncIntervalSec=5m

  • #RateLimitIntervalSec=30s

  • #RateLimitBurst=1000

  • #SystemMaxUse= 精確設(shè)置日志可以占用的最大磁盤空間

  • #SystemKeepFree= 保證系統(tǒng)剩余的空間大小

  • #SystemMaxFileSize=

  • #SystemMaxFiles=100

  • #RuntimeMaxUse=

  • #RuntimeKeepFree=

  • #RuntimeMaxFileSize=

  • #RuntimeMaxFiles=100

  • #MaxRetentionSec=

  • #MaxFileSec=1month

  • #ForwardToSyslog=no

  • #ForwardToKMsg=no

  • #ForwardToConsole=no

  • #ForwardToWall=yes

  • #TTYPath=/dev/console

  • #MaxLevelStore=debug

  • #MaxLevelSyslog=debug

  • #MaxLevelKMsg=notice

  • #MaxLevelConsole=info

  • #MaxLevelWall=emerg

  • journald 默認(rèn)配置下, 默認(rèn)日志最大限制為所在文件系統(tǒng)容量的 10%

    默認(rèn)配置下, journald 的日志存放在 /var/log/journal 下, 如果該目錄在根分區(qū)下, 且根分區(qū)空間大小為10G, 那么 journald 存放日志最大的大小為1G, 超出1G 后將刪除最早的日志

    也可以精確指定占用的空間大小:

    SystemMaxUse=50M

    journalctl基本用法

    • journalctl 從頭查看所有日志

    • journalctl -b 查看本次開機后的所有系統(tǒng)引導(dǎo)日志

    • journalctl -b -1 顯示上次開機后的系統(tǒng)引導(dǎo)日志, 以此類推

    • journalctl -f 類似于 tail -f或tailf

    • journalctl /usr/bin/dockerd 后加程序的絕對路徑,可以顯示該程序的所有日志信息

    • journalctl -xe systemd 啟動程序失敗時會提示你使用這個命令查看錯誤信息, 其中x 表示在日志輸出中增加一些解釋性的短文本, e表示立即跳轉(zhuǎn)至日志的尾部

    journald注意事項

    journald配置中,有兩個非常重要的優(yōu)化項目:

    ?
  • ForwardToSyslog=yes

  • ForwardToWall=yes

  • 以上兩個參數(shù)默認(rèn)都是 yes 意味著 journald 收集日志后還會轉(zhuǎn)發(fā)到 syslog 中

    由此造成的影響是: journald 雖然可以乖乖的按照上面的配置進(jìn)行日志的清理, 但是 syslog 卻不在 journald 的控制范圍之內(nèi)

    在日志量很大的情況下,syslog中的日志量也變得巨大,所以我們需要把上面兩個參數(shù)的值改為no

    重啟journald服務(wù):

    systemctl restart systemd-journald.service sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://ip0m9guf.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

    總結(jié)

    以上是生活随笔為你收集整理的Elk7.2 Docker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。