需要包含以下幾個主要特:
收集-能夠採集多種來源的日誌數據
傳輸-能夠穩定的把日誌數據傳輸到中央系統
存儲-如何存儲日誌數據
分析-可以支持 UI 分析
警告-能夠提供錯誤報告,監控機制
一、概念:1.1 Elasticsearch:定義: 是一個基於Lucene的搜索伺服器,開源分布式搜尋引擎,提供搜集、分析、存儲數據三大功能。特點: 1) 分布式、零配置,自動發現,索引自動分片,索引副本機制,restful 風格接口,數據源,自動搜索負載等。 2) 高性能(集群的概念):支持一主多從且擴容簡易,只要cluster.name 一致且在同一個網絡中就能自動加入當前集群。 3) 高可用:在一個集群的多個節點中進行分布式存儲,索引支持shards(分片)和複製,即使部分節點down掉,也能自動進行數據恢復和主從切換 4)倒排索引1.2 Logstash:主要是用來日誌的搜集、分析、過濾日誌的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。由於Logstash是跑在JVM上面,資源消耗比較大。 Logstash由input、filter和output三部分組成,input負責從數據源提取數據,filter負責解析、處理數據,output負責輸出數據,每部分都有提供豐富的插件。可以非常詳細的將日誌轉化為各種圖表,為用戶提供強大的數據可視化支持 grok:過濾器插件是Logstash中默認可用的幾個插件之一,grok過濾器插件允許你將非結構化日誌數據解析為結構化和可查詢的數據。1.3 Kibana:Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以非常詳細地將日誌轉換為各種圖表,幫助匯總、分析和搜索重要數據日誌。1.4 Filebeat隸屬於Beats:一、定義: 新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個伺服器上搜集日誌後傳輸給Logstash,官方也推薦此工具。 基於原先 Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會是 ELK Stack 在 shipper 端的第一選擇。 Filebeat:ELK 協議棧的新成員,一個輕量級開源日誌文件數據搜集器,基於 Logstash-Forwarder 原始碼開發,是對它的替代。在需要採集日誌數據的 server 上安裝 Filebeat,並指定日誌目錄或日誌文件後,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。
二、目前Beats包含四種工具: Packetbeat(搜集網絡流量數據) Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據) Filebeat(搜集文件數據) Winlogbeat(搜集 Windows 事件日誌數據)1.5 Kafka:數據緩衝隊列,作為消息隊列解耦了處理過程,同時提高了可擴展性。具有峰值處理能力,使用消息隊列能夠使關鍵組件頂住突發的訪問壓力,而不會因為突發的超負荷的請求而完全崩潰。 1)發布和訂閱記錄流,類似於消息隊列或企業消息傳到系統; 2)以容錯持久的方式存儲記錄流; 3)處理記錄發生的流。二、架構:// 1. 日誌文件.log ——> logstash(日誌收集) ——> elasticsearch(存儲和搜索)——> kibana(可視化和生成報表)
//2.以Beats 作為日誌搜集器日誌文件.log ——> betes(日誌收集) ——> logstash(日誌過濾) ——> elasticsearch(存儲和搜索)——> kibana(可視化和生成報表) 優點:架構解決了 Logstash 在各伺服器節點上佔用系統資源高的問題。 Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和伺服器雙向認證,保證了通信安全。
//3.引入消息隊列模式:日誌文件.log ——> logstash(日誌收集,不處理) ——> kafka、redis、rabbitMQ ——> logstash(日誌過濾) ——> elasticsearch(存儲和搜索)——> kibana(可視化和生成報表) 模式特點: 這種架構適合於日誌規模比較龐大的情況。但由於 Logstash 日誌解析點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列, 均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 佔用系統資源過多的問題 工作流程: Filebeat採集—> logstash轉發到kafka—> logstash處理從kafka緩存的數據進行分析—> 輸出到es—> 顯示在kibana三、linux 下搭建 ELK: (7.5.1版本)
3.1、準備工作:一、關閉防火牆和selinux: 1)systemctl stop firewalld //停止 systemctl disable firewalld //禁止開機自啟 2)關閉selinux: (selinux是美國國家安全局(NSA)對於強制訪問控制的實現,是 Linux歷史上最傑出的新安全子系統。) 臨時生效: setenforce 0 永久生效: sed -i 's/SELINUX=enforcing/\SELINUX=permissive/' /etc/selinux/config ==> vim /etc/selinux/config/ --> SELINUX=enforcing[效果同上] ( SELINUX參數enforcing代表打開,disabled代表關閉 ) getenforce二、配置yum源: cd /etc/yum.repos.d/ wget http://mirrors.aliyun.com/repo/Centos-7.repo
三、安裝kjdk: yum -y list java* //查看可安裝的版本 yum install -y java-1.8.0-openjdk-devel.x86_64 //安裝 (要選擇-devel的安裝,因為這個安裝的是jdk,而那個不帶-devel的安裝完了其實是jre。) 3.2、es安裝:3.2.1.下載安裝配置:1) 下載: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
2)解壓到指定目類下: tar -zxvd elasticsearch-7.5.1-linux-x86_64.tar.gz -C /opt/elk/
3)設置JVM堆大小:vim /opt/elk/elasticsearch-7.5.1/config/jvm.options -Xms1g ----修改成 -Xms512m (由於內存不夠,不設置為256m) -Xmx1g ----修改成 -Xms512m (由於內存不夠,不設置為256m) #一般設置為虛擬機內存的一半,最少為2G,推薦設置為4G { 注意:確保堆內存最小值(Xms)與最大值(Xmx)的大小相同,防止程序在運行時改變堆內存大小。堆內存大小不要超過系統內存的50% }
4)創建ES數據及日誌存儲目錄: mkdir -p /opt/elk/elasticsearch-7.5.1/data/ mkdir -p /opt/elk/elasticsearch-7.5.1/logs/
5)創建運行ES的普通用戶,以及修改安裝目錄及存儲目錄權限: useradd es echo "123456" | passwd --stdin "es" //不設置密碼,則跳過 (或者:passwd es) chown -R es:es /opt/elk/elasticsearch-7.5.1/
6)配置ES: vim /opt/elk/elasticsearch-7.5.1/config/elasticsearch.yml cluster.name: elk node.name: elk01 node.master: true node.data: true cluster.initial_master_nodes: ["elk01"] path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 0.0.0.0 http.port: 9200 #discovery.zen.ping.unicast.hosts: ["115.159.111.143","115.159.111.144"] #discovery.zen.minimum_master_nodes: 2 #discovery.zen.ping_timeout: 150s #discovery.zen.fd.ping_retries: 10 #client.transport.ping_timeout: 60s http.cors.enabled: true http.cors.allow-origin: "*"
//配置項含義: { cluster.name 集群名稱,各節點配成相同的集群名稱。 node.name 節點名稱,各節點配置不同。 node.master 指示某個節點是否符合成為主節點的條件。 node.data 指示節點是否為數據節點。數據節點包含並管理索引的一部分。 path.data 數據存儲目錄。 path.logs 日誌存儲目錄。 bootstrap.memory_lock 內存鎖定,是否禁用交換。 bootstrap.system_call_filter 系統調用過濾器。 network.host 綁定節點IP。 http.port 埠。 path.data: ...elasticsearch-7.5.1/data #elasticsearch數據文件存放目錄 path.logs: .../elasticsearch-7.5.1/logs #elasticsearch日誌文件存放目錄 discovery.zen.ping.unicast.hosts 提供其他 Elasticsearch 服務節點的單點廣播發現功能。 discovery.zen.minimum_master_nodes 集群中可工作的具有Master節點資格的最小數量,官方的推薦值是(N/2)+1,其中N是具有master資格的節點的數量。 discovery.zen.ping_timeout 節點在發現過程中的等待時間。 discovery.zen.fd.ping_retries 節點發現重試次數。 http.cors.enabled 是否允許跨源 REST 請求,用於允許head插件訪問ES。 http.cors.allow-origin 允許的源地址。 } 3.2.2.系統優化配置:1)修改系統限制:vim /etc/security/limits.conf (末尾添加) * soft nofile 65536 * hard nofile 65536 * soft nproc 5000 * hard nproc 5000 root soft nproc 5000 root hard nproc 5000
//配置項含義: { soft xxx : 代表警告的設定,可以超過這個設定值,但是超過後會有警告。 hard xxx : 代表嚴格的設定,不允許超過這個設定的值。 nofile : 是每個進程可以打開的文件數的限制 nproc : 是作業系統級別對每個用戶創建的進程數的限制 }
2) 增加最大內存映射數(修改信號量):vim /etc/sysctl.conf sysctl -w vm.max_map_count=262144 vm.max_map_count=262144 vm.swappiness=0 sysctl -p 3.2.3.啟動ES:#放後臺啟動:/opt/elk/elasticsearch-7.5.1/ nohup ./bin/elasticsearch &
#查看啟動日誌 tailf nohup.out
#啟動成功後,可以檢查埠是否使用: netstat -antop|grep 92003.2.4 使用curl測試:一、ES交互方式: 1)curl命令: 2)es-head插件: 3)kibana:
二、curl命令: 1) 語法:curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>' -H:指定內容類型,這裡為josn格式的文檔 -X:指定請求方式 <VERB>:GET,POST,PUT,DELETE 一般請求為GET、提交變更為POST、上傳文件為PUT、刪除操作為DELETE <PROTOCOL>:協議,一般為HTTP協議 <HOST>:主機,可為主機的IP位址或Hostname <PORT>:主機埠 <PATH>:路徑,主機埠後的路徑,如下幾個路徑:/_cat, /_search,/_cluster /_cat路徑覆蓋了大多數的信息內容,/_search為搜索所有的索引和文檔類型 { /index-name:指定文檔的索引名稱,必須小寫(同一個索引名稱下不允許出現兩個文檔類型) /type-name:指定文檔的類型名稱,必須小寫 /10:文檔的ID編號 } <QUERY_STRING>:查詢字符串匹配規則 { pretty:人性化創建索引 } -d:指定主體內容(指定使用JSON方式來撰寫上傳文檔) <BODY>:json格式的請求主體 例子1: 添加:curl -H "Content-Type:application/json" -XPOST 'http://172.17.0.8:9200/index-name/type-name/2?pretty' -d '{"name": "zhy", "age": 18, "job": "Linux", "company": "GY" } ' 例子2: 查詢:curl -XGET 'http://172.17.0.8:9200/index-name/type-name/_search?pretty'(查詢index-name索引type-name文檔類型的所有數據) 例子3: 查詢:curl -XGET 'http://172.17.0.8:9200/index-name/type-name/_search?q="18"&pretty'(查詢index-name索引type-name文檔類型的下有value值為18的數組) 注意: 查看所有索引:_cat/indices 3.3、kibana安裝:3.3.1.下載安裝配置:1) 下載: wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz
2)解壓到指定目類下: tar -zxvd kibana-7.5.1-linux-x86_64.tar.gz -C /opt/elk/
3)修改配置:/opt/elk/kibana-7.5.1/config/kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://115.159.111.142:9200"] #ES主節點地址+埠 i18n.locale: "zh-CN" kibana.index: ".kibana" 配置項含義: { server.port #kibana服務埠,默認5601 server.host #kibana主機IP位址,默認localhost elasticsearch.hosts #用來做查詢的ES節點,默http://localhost:9200 kibana.index #kibana在Elasticsearch中使用索引來存儲保存searches, visualizations和dashboards,默認.kibana } 3.3.2.啟動kibana:#放後臺啟動:/opt/elk/kibana-7.5.1/ nohup ./bin/kibana --allow-root &
#查看啟動日誌 tailf nohup.out
#啟動成功後,可以檢查埠是否使用: netstat -antop|grep 56013.4、logstash安裝:3.4.1 下載安裝配置:1) 下載: wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz
2)解壓到指定目類下: tar -zxvd logstash-7.5.1.tar.gz -C /opt/elk/
3)修改配置:/opt/elk/logstash-7.5.1/config/logstash.conf cp logstash-sample.conf logstash.conf input { file { path => "/usr/local/nginx/logs/access.log" type => "nginx-log" codec => json start_position => "beginning" } } input { file { path => "/data/admin/log/access.log" type => "admin-log" codec => plain start_position => "beginning" } } Filters{ ... } output { if [type] == "nginx-log"{ elasticsearch { hosts => ["http://115.159.111.142:9200"] index => "nginx-log-%{+YYYY.MM.dd}" } } if [type] == "admin-log"{ elasticsearch { hosts => ["http://115.159.111.142:9200"] index => "admin-log-%{+YYYY.MM.dd}" } } } //配置解析: { 1) input: start_position:指定起始讀取位置,「beginning」表示從文件頭開始,「end」表示從文件尾開始(類似tail -f)。 sincedb_path:通常Logstash會記錄每個文件已經被讀取到的位置,保存在sincedb中,如果Logstash重啟,那麼對於同一個文件,會繼續從上次記錄的位置開始讀取。如果想重新從頭讀取文件,需要刪除sincedb文件,sincedb_path則是指定了該文件的路徑。根據需要將其設置為「/dev/null」,即不保存位置信息。 2) Filters:(數據中間處理,對數據進行操作) grok:解析任意文本數據,Grok 是 Logstash 最重要的插件。它的主要作用就是將文本格式的字符串,轉換成為具體的結構化的數據,配合正則表達式使用。內置120多個解析語法。 官方提供的grok表達式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns mutate:對欄位進行轉換。例如對欄位進行刪除、替換、修改、重命名等。 drop:丟棄一部分events不進行處理。 clone:拷貝 event,這個過程中也可以添加或移除欄位。 geoip:添加地理信息(為前臺kibana圖形化展示使用)
例子1: grok{match => ["message","%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:logmessage}"]} //message代表原來的日誌消息,時間戳匹配成timestamp,日誌等級匹配成level,剩下的信息匹配成logmessage。這樣就將原有的message信息分解成了三個欄位信息。 例子2: mutate { add_field => {"servicename" => "testName"} remove_field => "message" remove_field => "@timestamp" remove_field => "@version" remove_field => "host" remove_field => "path" remove_field => "tags" } //其中刪除的欄位為logstath自己添加的欄位信息,message因為已經分解為三個欄位所以不再需要。添加的欄位可以寫定為一個字符串,相當於給日誌信息做個標籤名稱。 }3.4.2 啟動logstash:#測試(終端輸入和輸出): bin/logstash -e 'input { stdin{}} output{stdout{codec => rubydebug }}'
#後臺啟動:/opt/elk/logstash-7.5.1/ nohup ./bin/logstash -f ./config/logstash.conf
#查看啟動日誌 tailf nohup.out3.5、filebeat安裝:3.5.1 下載安裝配置:1) 下載: wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
2)解壓到指定目類下: tar -zxvd filebeat-7.5.1-linux-x86_64.tar.gz -C /opt/elk/
3)修改配置:/opt/elk/filebeat-7.5.1/config/filebeat.yml 例子: filebeat.inputs: - type: log enabled: true paths: - /usr/local/nginx/logs/access.log tags: ["nginx-access"] fields: logtype: nginx - type: log enabled: true paths: - /data/admin/access.log tags: ["admin-access"] fields: logtype: admin output.logstash: hosts: [115.159.111.142:5044]
4)配置欄位解析: filebeat.inputs: //6.3以前是 filebeat.prospectors: type: log //type:指定input類型,有log、stdin、redis、tcp、syslog等 enable: true #表示是該log類型配置生效 paths: #指定要監控的日誌,目前按照Go語言的glob函數處理。 #沒有對配置目錄做遞歸處理,比如配置的如果是: -/var/log/*/*.log #則只會去/var/log目錄的所有子目錄中尋找以".log"結尾的文件, #而不會尋找/var/log目錄下以".log"結尾的文件。 tags: ["nginx-access"] #列表中添加標籤,用過過濾,例如:tags: ["json"] fields: #可選欄位,選擇額外的欄位進行輸出可以是標量值,元組,字典等嵌套類型 默認在sub-dictionary位置 recursive_glob.enabled: true { #啟用全局遞歸模式,例如/foo/**包括/foo, /foo/*, /foo/*/* } encoding:#指定被監控的文件的編碼類型,使用plain和utf-8都是可以處理中文日誌的 exclude_lines: ['^DBG'] #不包含匹配正則的行 include_lines: ['^ERR', '^WARN'] #包含匹配正則的行 harvester_buffer_size: 16384 #每個harvester在獲取文件時使用的緩衝區的字節大小 max_bytes: 10485760 { #單個日誌消息可以擁有的最大字節數。max_bytes之後的所有字節都被丟棄而不發送。默認值為10MB (10485760) } exclude_files: ['\.gz$'] #用於匹配希望Filebeat忽略的文件的正則表達式列表 ingore_older: 0 #默認為0,表示禁用,可以配置2h,2m等,注意ignore_older必須大於close_inactive的值.表示忽略超過設置值未更新的 文件或者文件從來沒有被harvester收集 close_* #close_ *配置選項用於在特定標準或時間之後關閉harvester。關閉harvester意味著關閉文件處理程序。如果在harvester關閉 後文件被更新,則在scan_frequency過後,文件將被重新拾取。但是,如果在harvester關閉時移動或刪除文件,Filebeat將無法再次接收文件,並且harvester未讀取的任何數據都將丟失。 close_inactive #啟動選項時,如果在固定時間沒有被讀取,將關閉文件句柄 讀取的最後一條日誌定義為下一次讀取的起始點,而不是基於文件的修改時間 如果關閉的文件發生變化,一個新的harverster將在scan_frequency運行後被啟動 建議至少設置一個大於讀取日誌頻率的值,配置多個prospector來實現針對不同更新速度的日誌文件 使用內部時間戳機制,來反映記錄日誌的讀取,每次讀取到最後一行日誌時開始倒計時使用2h 5m 來表示 close_rename #當選項啟動,如果文件被重命名和移動,filebeat關閉文件的處理讀取 close_removed #當選項啟動,文件被刪除時,filebeat關閉文件的處理讀取這個選項啟動後,必須啟動clean_removed close_eof #適合只寫一次日誌的文件,然後filebeat關閉文件的處理讀取 close_timeout #當選項啟動時,filebeat會給每個harvester設置預定義時間,不管這個文件是否被讀取,達到設定時間後,將被關閉 close_timeout 不能等於ignore_older,會導致文件更新時,不會被讀取如果output一直沒有輸出日誌事件,這個timeout是不會被啟動的, 至少要要有一個事件發送,然後haverter將被關閉 設置0 表示不啟動 clean_inactived #從註冊表文件中刪除先前收穫的文件的狀態 設置必須大於ignore_older+scan_frequency,以確保在文件仍在收集時沒有刪除任何狀態 配置選項有助於減小註冊表文件的大小,特別是如果每天都生成大量的新文件 此配置選項也可用於防止在Linux上重用inode的Filebeat問題 clean_removed #啟動選項後,如果文件在磁碟上找不到,將從註冊表中清除filebeat 如果關閉close removed 必須關閉clean removed scan_frequency #prospector檢查指定用於收穫的路徑中的新文件的頻率,默認10s tail_files:#如果設置為true,Filebeat從文件尾開始監控文件新增內容,把新增的每一行文件作為一個事件依次發送, 而不是從文件開始處重新發送所有內容。 symlinks:#符號連結選項允許Filebeat除常規文件外,可以收集符號連結。收集符號連結時,即使報告了符號連結的路徑, Filebeat也會打開並讀取原始文件。 backoff:#backoff選項指定Filebeat如何積極地抓取新文件進行更新。默認1s,backoff選項定義Filebeat在達到EOF之後 再次檢查文件之間等待的時間。 max_backoff:#在達到EOF之後再次檢查文件之前Filebeat等待的最長時間 backoff_factor:#指定backoff嘗試等待時間幾次,默認是2 harvester_limit:#harvester_limit選項限制一個prospector並行啟動的harvester數量,直接影響文件打開數
filebeat.inputs: fields: app_id: query_engine_12 fields_under_root #如果值為ture,那麼fields存儲在輸出文檔的頂級位置 multiline.pattern #必須匹配的regexp模式 multiline.negate #定義上面的模式匹配條件的動作是 否定的,默認是false 假如模式匹配條件'^b',默認是false模式,表示講按照模式匹配進行匹配 將不是以b開頭的日誌行進行合併 如果是true,表示將不以b開頭的日誌行進行合併 multiline.match # 指定Filebeat如何將匹配行組合成事件,在之前或者之後,取決於上面所指定的negate multiline.max_lines #可以組合成一個事件的最大行數,超過將丟棄,默認500 multiline.timeout #定義超時時間,如果開始一個新的事件在超時時間內沒有發現匹配,也將發送日誌,默認是5s max_procs #設置可以同時執行的最大CPU數。默認值為系統中可用的邏輯CPU的數量。 name #為該filebeat指定名字,默認為主機的hostname setup.kibana: host: "115.159.111.142:5601" output.elasticsearch: //output配置輸出的位置,比如kafka,logstash,es,redis,file等 hosts: ["115.159.111.142:9200"] index: "nginx-%{+yyyy.MM.dd}" processors: (處理器配置,不是必需的) - drop_fields: #刪除欄位,不在kibana裡面展示,默認情況kibana裡面會自動展示這些beat欄位 fields:["beat.hostname","beat.version","source"...] #自定義index配置 setup.template.name: "nginx" setup.template.pattern: "nginx-*" setup.template.overwrite: true setup.template.enabled: true # 7.x的版本中需要禁用此索引生命周期,否則在指定es索引名字的時候會有問題 setup.ilm.enabled: false3.5.2 修改logstash配置:input { beats { port => 5044 }}output { if[fields][logtype] == "admin" { elasticsearch { hosts => ["115.159.111.142:9200"] index => "abc-admin-%{+YYYY.MM.dd}" } } if[fields][logtype] == "nginx" { elasticsearch { hosts => ["115.159.111.142:9200"] index => "abc-nginx-%{+YYYY.MM.dd}" } }}
nohup ./bin/logstash -f ./config/logstash.conf3.5.3 啟動filebeat:./filebeat -e -c filebeat.yml {後臺啟動:nohup ./filebeat -e -c filebeat.yml -d publish &} 注意:一、內存buff/cache佔用過大(logstash或es啟動不起來):
echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_cache 釋放後free -m查看內存佔用情況cache明顯減少 echo 0 > /proc/sys/vm/drop_caches二、報錯:
1.報錯:BindTransportException: Failed to bind to [9300-9400] 解決: 針對這個錯誤網上各種解決辦法,都是誤導人的。常見的錯誤解決方法是把network.host改成0.0.0.0或者127.0.0.1等,還有就是改成localhost雖然能跑起來,但是外網還是不能訪問的。 正確的解決辦法是改成雲伺服器的內網ip:172.17.0.8;
2.報錯:bootstrap checks failed (根據報錯信息,修改 /etc/security/limits.conf和 /etc/sysctl.conf) 解決:1)編輯 /etc/security/limits.conf,追加以下內容; * soft nofile 65536 //*代表所有用戶 * hard nofile 65536 2)編輯 /etc/sysctl.conf,追加以下內容: vm.max_map_count=655360 //具體數值看錯誤提示 sysctl -p //保存後,啟動,使之生效 3.運行過程中自動killed,查看日誌也沒有錯誤。(內存不夠用) 解決:更改/opt/es_software/kibana-6.6.1/config/jvm.options文件, 改為合適的大小即可: Xms512m Xmx512m 4.OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N (啟動logstash報錯) 原因:某些軟體包啟動的時候默認啟用 -XX:+AssumeMP導致; 解決:在jvm.optipons配置文件添加 -XX:-AssumeMP