ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但並不是所有。html
Elasticsearch是實時全文搜索和分析引擎,提供蒐集、分析、存儲數據三大功能;是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分佈式系統。它構建於Apache Lucene搜索引擎庫之上。node
Logstash是一個用來蒐集、分析、過濾日誌的工具。它支持幾乎任何類型的日誌,包括系統日誌、錯誤日誌和自定義應用程序日誌。它能夠從許多來源接收日誌,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它可以以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch。git
Kibana是一個基於Web的圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch指標中的日誌數據。它利用Elasticsearch的REST接口來檢索數據,不只容許用戶建立他們本身的數據的定製儀表板視圖,還容許他們以特殊的方式查詢和過濾數據github
docker pull elasticsearch:7.6.0 docker pull kibana:7.6.0 docker pull logstash:7.6.0 docker pull filebeat:7.6.0 docker pull mobz/elasticsearch‐head:5
建立一個elk文件夾, 後面的配置文件都放在裏面web
mkdir /home/elk
建立一個elasticsearch.yml
文件spring
vi /home/elk/elasticsearch.yml
在裏面添加以下配置:docker
cluster.name: "docker-cluster" network.host: 0.0.0.0 # 訪問ID限定,0.0.0.0爲不限制,生產環境請設置爲固定IP transport.host: 0.0.0.0 # elasticsearch節點名稱 node.name: node-1 # elasticsearch節點信息 cluster.initial_master_nodes: ["node-1"] # 下面的配置是關閉跨域驗證 http.cors.enabled: true http.cors.allow-origin: "*"
建立並啓動elasticsearch容器npm
docker run -di -p 9200:9200 -p 9300:9300 --name=elasticsearch -v /home/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.0
以後經過9200端口在瀏覽器上範圍,有信息返回則成功bootstrap
注意:若是須要添加插件將容器的插件目錄映射到實際的路徑中或者經過命令(如安裝ik分詞器:
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/
)將其拷貝到容器中centos
這與咱們剛纔修改的配置有關,由於elasticsearch在啓動的時候會進行一些檢查,好比最多打開的文件的個數以及虛擬內存
區域數量等等,若是你放開了此配置,意味着須要打開更多的文件以及虛擬內存,因此咱們還須要系統調優。
修改/etc/security/limits.conf ,添加以下內容:
* soft nofile 65536 * hard nofile 65536
nofile是單個進程容許打開的最大文件個數 soft nofile 是軟限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加內容
vm.max_map_count=655360
限制一個進程能夠擁有的VMA(虛擬內存區域)的數量
執行下面命令 修改內核參數立刻生效,以後重啓服務器和docker服務
sysctl ‐p
ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
這個是因爲elasticsearch7是集羣多節點的版本,須要在elasticsearch.yml中添加以下配置:
# elasticsearch節點名稱 node.name: node-1 # elasticsearch節點信息 cluster.initial_master_nodes: ["node-1"]
查看日誌發現以下錯誤
error=>"Elasticsearch Unreachable: [http://192.168.6.128:9200/][Manticore::...
這個問題一般是因爲安裝在一臺機器上的docker容器,防火牆開啓的狀態下,docker容器內部沒法訪問宿主機服務(可以訪問非宿主機的其餘局域網計算機的服務),解決方法:
docker run ‐di ‐‐name=es-head ‐p 9100:9100 mobz/elasticsearch‐head:5
啓動成功後訪問9100端口便可使用界面化進行管理elasticsearch。
安裝依賴
npm install
啓動
grunt server
打開瀏覽器,輸入 http://localhost:9100
kibana主要用於對elasticsearch的數據進行分析查看。注意選擇的版本必須和elasticsearch的版本相同或者低,建議和elasticsearch的版本相同,不然會沒法將沒法使用kibana。
建立一個kibana.yml
配置文件,在裏面編寫以下配置:
server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://elasticsearch的IP:9200"] # 操做界面語言設置 i18n.locale: "zh-CN"
建立並啓動kibana容器
docker run -di --name kibana -p 5601:5601 -v /home/elk/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.6.0
啓動成功後訪問5601端口便可進入kibana管理界面。(進入後要求選擇配置,直接選擇本身瀏覽便可)
這個先安裝logstash後再回過來操做;輸入log*
便可選擇logstash的日誌信息,建立成功後便可查看日誌信息
建立一個logstash.conf
配置文件,在裏面添加以下配置:
input { tcp { port => 5044 codec => "plain" } } filter{ } output { # 這個是logstash的控制檯打印(進行安裝調試的開啓,稍後成功後去掉這個配置便可) stdout { codec => rubydebug } # elasticsearch配置 elasticsearch { hosts => ["elasticsearch的IP:9200"] } }
建立和啓動logstash容器
docker run -di -p 5044:5044 -v /home/elk/logstash.conf:/usr/share/logstash/pipeline/logstash.conf --name logstash logstash:7.6.0
添加maven依賴
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.3</version> </dependency>
下面以springboot中logback做爲日誌處理,配置文件(logback-spring.xml
)配置信息以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg) %n</pattern> </layout> </appender> <!--logback輸出--> <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>192.168.6.128:5044</destination> <includeCallerData>true</includeCallerData> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <includeCallerData>true</includeCallerData> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80}.%M.%L - %msg %n</pattern> </providers> </encoder> </appender> <root level="INFO"> <!--本地開發調試將控制檯輸出打開,同時將日誌文件輸出關閉,提升日誌性能;線上部署請務必將控制檯輸出關閉--> <appender-ref ref="STDOUT"/> <appender-ref ref="STASH"/> </root> </configuration>