上一篇準備知識:http://www.reibang.com/p/dd1a3a0df63f
一互躬、ELK簡介
開源實時日志分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch拟枚、Logstash和Kiabana三個開源工具組成:
ElasticSearch是一個基于Lucene的開源分布式搜索服務器薪铜。它的特點有:分布式,零配置恩溅,自動發(fā)現(xiàn)隔箍,索引自動分片,索引副本機制脚乡,restful風格接口蜒滩,多數(shù)據(jù)源滨达,自動搜索負載等。它提供了一個分布式多用戶能力的全文搜索引擎俯艰,基于RESTful web接口捡遍。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布竹握,是最流行的企業(yè)搜索引擎画株。設計用于云計算中,能夠達到實時搜索啦辐,穩(wěn)定谓传,可靠芹关,快速续挟,安裝使用方便。
在ElasticSearch中侥衬,所有節(jié)點的數(shù)據(jù)是均等的。
Logstash是一個完全開源的工具肘习,他可以對你的日志進行收集、過濾罪塔、分析征堪,并將其存儲供以后使用(如,搜索)洲脂,您可以使用它。說到搜索枚粘,logstash帶有一個web界面,搜索和展示所有日志犬辰。
logstash收集日志基本流程: input-->codec-->filter-->codec-->output
input:從哪里收集日志诫欠。
filter:發(fā)出去前進行過濾
output:輸出至Elasticsearch或Redis消息隊列
codec:輸出至前臺英遭,方便邊實踐邊測試
數(shù)據(jù)量不大日志按照月來進行收集
Kibana 是一個基于瀏覽器頁面的Elasticsearch前端展示工具法精,也是一個開源和免費的工具爷狈,它Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面拓巧,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志一死。
二肛度、部署環(huán)境:
CentOS release 6.7,elasticsearch6.2.2投慈,logstash62.2,kibana6.2.2;虛擬機內(nèi)存要大于2G承耿。關閉防火墻和SELinux。
1.java環(huán)境(es需要安裝java才能使用)
[root@localhost ~]#? yum install java?
[root@localhost ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
2伪煤、安裝Elasticsearch
? ? ? 2.1. 導入elasticsearch PGP key
? ? ? ? ? ? ? rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
? ? ? 2.2.推薦去安裝新版本的
? ? ? ? ? ? ? 地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
? ? ? 2.3.添加elasticsearch的yum倉庫
? ? ? ? [root@localhost ~]# vim /etc/yum.repos.d/elasticsearch.repo
? ? ? ? ? ? ? [elasticsearch-6.x]
? ? ? ? ? ? ? name=Elasticsearch repository for 6.x packages
? ? ? ? ? ? ? baseurl=https://artifacts.elastic.co/packages/6.x/yum
? ? ? ? ? ? ? gpgcheck=1
? ? ? ? ? ? ? gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
? ? ? ? ? ? ? enabled=1
? ? ? ? ? ? ? autorefresh=1
? ? ? ? ? ? ? type=rpm-md
? ? ? ? 2.4.安裝ElasticSearch
? ? ? [root@localhost ~] # yum install -y elasticsearch
? ? ? ? ? 2.5.yum安裝使用普通用戶,需要配置limits
? ? ? [root@localhost ~]# vim /etc/security/limits.conf
? ? ? ? ? ? ? ? ? ? elasticsearch soft memlock unlimited
? ? ? ? ? ? ? ? ? ? elasticsearch hard memlock unlimited
? ? ? ? ? 2.6. 創(chuàng)建數(shù)據(jù)目錄并設置權限
? ? ? [root@localhost ~]# mkdir -p /data/es-data
? ? ? [root@localhost ~]# chown -R elasticsearch:elasticsearch /data/es-data
? ? ? ? ? 2.7. yum安裝 默認配置文件在 /etc/elasticsearch
? ? [root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml
? ? [root@localhost ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
? ? ? ? ? ? cluster.name: menghuan-elk-cluster? #集群名稱
? ? ? ? ? ? node.name: linux-node? #節(jié)點名稱
? ? ? ? ? ? path.data:? /data/es-data? #數(shù)據(jù)存放路徑
? ? ? ? ? ? path.logs:? /var/log/elasticsearch? #日志存放路徑
? ? ? ? ? ? bootstrap.memory_lock:? false? #6.x下測試 開啟會有問題 或許是內(nèi)存不充足導致還行調(diào)研
? ? ? ? ? ? network.host:? 192.168.56.11? ? #允許訪問的ip
? ? ? ? ? ? http.port:? 9200
? ? ? ? ? ? discovery.zen.ping.unicast.hosts: ["192.168.56.10","192.168.56.11"] #單播方式 組播在6.x下面貌似不好使
? ? ? [root@localhost ~]# chkconfig --add elasticsearch
? ? ? [root@localhost ~]# chkconfig elasticsearch on
? ? ? [root@localhost ~]# chkconfig --list |grep elasticsearch
? ? ? ? ? ? elasticsearch? 0:off 1:off 2:on 3:on 4:on 5:on 6:off
? ? ? [root@localhost ~]# service? elasticsearch? start
Starting elasticsearch: Exception in thread "main" 2018-03-10 09:39:39,721 main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
報錯 解決: 參數(shù)的冒號前后沒有加空格,加了之后就好
然后重新啟動后顯示:Starting elasticsearch:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]? 這個時候還是有一些問題 通過查看/var/log/elasticsearch/menghuan-elk-culster.log日志文件
發(fā)現(xiàn)有以下2個錯誤
[1]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解決如下:
[1]: [root@localhost init.d]# vim /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*? ? ? ? ? soft? ? nproc? ? 1024
*? ? ? ? ? soft? ? nproc? ? 4096
root? ? ? soft? ? nproc? ? unlimited
[2]:修改/etc/elasticsearch/elasticsearch.yml 增加配置:bootstrap.system_call_filter: false
修復完以上2個問題后重啟 就可以啟動成功了
[root@localhost ~]# ps -ef|grep elasticsearch
495? ? ? 25551? ? 1 73 10:21 ?? ? ? ? 00:00:23 /usr/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.Cp7sEmq3 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid -d
? ? ? 2.8.? 6.x新版本 請安裝此插件
? ? ? /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack
? ? ? 到此ES安裝完畢
3.安裝kibana
? ? 3.1. 推薦安裝新版本
? ? ? ? ? 地址: https://www.elastic.co/guide/en/kibana/current/rpm.html
? ? ? 3.2.添加kibana到y(tǒng)um倉庫
? ? [root@localhost ~]# vim /etc/yum.repos.d/kibana.repo
? ? ? ? ? ? [kibana-6.x]
? ? ? ? ? ? name=Kibana repository for 6.x packages
? ? ? ? ? ? baseurl=https://artifacts.elastic.co/packages/6.x/yum
? ? ? ? ? ? gpgcheck=1
? ? ? ? ? ? gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
? ? ? ? ? ? enabled=1
? ? ? ? ? ? autorefresh=1
? ? ? ? ? ? type=rpm-md
? ? ? 3.4.安裝kibana
? ? ? [root@localhost ~]# yum install -y kibana
? ? 3.5 kibana自啟動
? ? ? [root@localhost ~]# chkconfig --add kibana
? ? ? [root@localhost ~]# chkconfig kibana on? ? ? ? ?
? ? ? [root@localhost ~]# chkconfig --list |grep kibana
? ? ? ? ? ? ? ? ? kibana 0:off 1:off 2:on 3:on 4:on 5:on 6:off
? ? ? 3.6. 修改kibana配置文件
? ? [root@localhost ~]# vim /etc/kibana/kibana.yml
? ? [root@localhost kibana]# grep '^[a-z]' /etc/kibana/kibana.yml
? ? ? ? ? server.port: 5601? #訪問端口
? ? ? ? ? server.host: "192.168.56.10"? #允許訪問主機 (建議內(nèi)網(wǎng))
? ? ? ? ? elasticsearch.url: "http://192.168.56.10:9200"? ? #es地址
? ? ? ? ? kibana.index: ".kibana"
? ? ? 3.7. 運行Kibana
[root@localhost ~]# service kibana start
? ? ? ? kibana started
[root@localhost ~]# ps -ef|grep kibana
kibana? ? 2528? ? 1 43 07:59 pts/0? ? 00:00:02 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml
root? ? ? 2537? 1802? 0 07:59 pts/0? ? 00:00:00 grep kibana
? ? ? 3.8.訪問kibana_url:http://192.168.56.10:5601/
? ? 3.9.創(chuàng)建kibana索引(創(chuàng)建之前得先裝logstash加袋,把數(shù)據(jù)給ES才行)
4.安裝logstash
? ? 4.1.推薦安裝新版本
地址:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html#package-repositories
? ? 4.2.添加logstash的yum倉庫
? ? ? ? [root@localhost ~] # vim /etc/yum.repos.d/logstash.repo
? ? ? ? ? ? ? ? [logstash-6.x]
? ? ? ? ? ? ? ? name=Elastic repository for 6.x packages
? ? ? ? ? ? ? ? baseurl=https://artifacts.elastic.co/packages/6.x/yum
? ? ? ? ? ? ? ? gpgcheck=1
? ? ? ? ? ? ? ? gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
? ? ? ? ? ? ? ? enabled=1
? ? ? ? ? ? ? ? autorefresh=1
? ? ? ? ? ? ? ? type=rpm-md
? ? ? 4.3.安裝logstash
? ? ? ? ? ? [root@localhost ~]# yum install -y logstash
? ? ? 4.4.配置Logstash以及自啟動
logstash6生成init腳本后臺啟動
默認情況使用rpm包安裝完logstash之后沒有啟動腳本,這一點我覺得算是開發(fā)不夠徹底抱既。官網(wǎng)給了一個腳本职烧,需要根據(jù)不同的系統(tǒng)版本生成對應的啟動腳本,而且官網(wǎng)沒有給明使用方法蝙砌,對于新用戶來說算是個坑,不過在終端可以查看到腳本的使用幫助跋理。
我的系統(tǒng)是CentOS6择克,這里說一下6的使用方法,7類似前普,具體方法如下:
4.4.1.查看腳本使用幫助
[root@localhost ~]# cd /usr/share/logstash/bin/
[root@localhost ~]# ./system-install --help
Usage: system-install [OPTIONSFILE] [STARTUPTYPE] [VERSION]
NOTE: These arguments are ordered, and co-dependent
OPTIONSFILE: Full path to a startup.options file
OPTIONSFILE is required if STARTUPTYPE is specified, but otherwise looks first
in /usr/share/logstash/config/startup.options and then /etc/logstash/startup.options
Last match wins
STARTUPTYPE: e.g. sysv, upstart, systemd, etc.
OPTIONSFILE is required to specify a STARTUPTYPE.
VERSION: The specified version of STARTUPTYPE to use. The default is usually preferred here, so it can safely be omitted.
Both OPTIONSFILE & STARTUPTYPE are required to specify a VERSION.
a肚邢、要跟startup.options文件的絕對路徑,如果是rpm安裝的在/etc/logstash/startup.options拭卿,如果是二進制包解壓安裝的則在解壓目錄下的config目錄下面骡湖。
b、必須要跟啟動類型峻厚,比如CentOS6是sysv响蕴,CentOS7是systemd。
4.4.2.執(zhí)行腳本生成啟動文件
[root@localhost ~]# /usr/share/logstash/bin/system-install /etc/logstash/startup.options sysv
Successfully created system startup script for Logstash
4.4.3.執(zhí)行完就可以使用init腳本啟動logstash了
[root@localhost ~]# service logstash start
? ? ? logstash started
[root@localhost ~]# ps -ef|grep logstash
logstash? 3086? ? 1 99 09:36 pts/0? ? 00:00:09 /usr/bin/java -Xms256m -Xmx1g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -cp /usr/share/logstash/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/usr/share/logstash/logstash-core/lib/jars/commons-compiler-3.0.8.jar:/usr/share/logstash/logstash-core/lib/jars/error_prone_annotations-2.0.18.jar:/usr/share/logstash/logstash-core/lib/jars/google-java-format-1.5.jar:/usr/share/logstash/logstash-core/lib/jars/guava-22.0.jar:/usr/share/logstash/logstash-core/lib/jars/j2objc-annotations-1.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-annotations-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-core-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-databind-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-dataformat-cbor-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/janino-3.0.8.jar:/usr/share/logstash/logstash-core/lib/jars/javac-shaded-9-dev-r4023-3.jar:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.1.13.0.jar:/usr/share/logstash/logstash-core/lib/jars/jsr305-1.3.9.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-api-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-core-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-slf4j-impl-2.9.1.jar:/usr/share/logstash/logstash-core/lib/jars/logstash-core.jar:/usr/share/logstash/logstash-core/lib/jars/slf4j-api-1.7.25.jar org.logstash.Logstash --path.settings /etc/logstash
4.4.4?關閉logstash
? ? ? ? ?rpm 安裝的logstash有 initctl 的守護進程
? ? ? ? ?使用initctl stop logstash來關閉 logstash
? ? 4.5.測試
? ? [root@localhost ~]# /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout{codec => rubydebug} }'
雖然可以使用 但是會出現(xiàn)一些warngin如下圖:
解決如下:
mkdir -p /usr/share/logstash/config/
ln -s /etc/logstash/* /usr/share/logstash/config
chown -R logstash:logstash /usr/share/logstash/config/
再次測試不提示warning