前言



以上軟件都可以從官網下載:https://www.elastic.co/downloads或使用我共享網盤下載 ( 鏈接: https://pan.baidu.com/s/1hsw56tA 密碼: w6ey )
1.ES集群安裝配置 2.rsyslog客戶端配置 3.Kafka(zookeeper)集群配置 4.Kibana部署5.案例:nginx日志收集以及messages日志收集 6.Kibana報表基本使用
關閉防火牆,關閉selinux(生產環境按需關閉或打開)
同步服務器時間,選擇公網ntpd服務器或者自建ntpd服務器
[root@es1 ~]# crontab -l #為了方便直接使用公網服務器
#update time
*/5 * * * * /usr/bin/rdate -s time-b.nist.gov &>/dev/null
一、ES集群安裝配置
1.安裝jvm依賴環境
[root@es1 ~]# rpm -ivh jdk-8u25-x64.rpm #因為5.X版本需要1.8,為了以后升級麻煩直接安裝1.8 Preparing... ########################################### [100%] 1:jdk1.8.0_131 ########################################### [100%]
設置Java環境
[root@es1 ~]# cat /etc/profile.d/java.sh #編輯Java環境配置文件 export JAVA_HOME=/usr/java/latest export CLASSPATH=$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH [root@es1 ~]# . /etc/profile.d/java.sh [root@es1 ~]# java -version #確認配置 java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
2.安裝及配置elasticsearch
[root@es1 ~]# tar xf elasticsearch-2.1.0.tar.gz -C /usr/local/ [root@es1 ~]# cd /usr/local/ [root@es1 local]# ln -sv elasticsearch-2.1.0 elasticsearch "elasticsearch" -> "elasticsearch-2.1.0" [root@es1 local]# cd elasticsearch [root@es1 elasticsearch]# vim config/elasticsearch.yml [root@es1 elasticsearch]# grep "^[a-Z]" config/elasticsearch.yml cluster.name: pwb-cluster #集群名稱,同一集群需配置一致 node.name: pwb-node1 #集群節點名稱,集群內唯一 path.data: /Data/es/data #數據目錄 path.logs: /Data/es/logs #日志目錄 bootstrap.mlockall: true network.host: 10.1.1.243 http.port: 9200 discovery.zen.ping.unicast.hosts: ["10.1.1.243", "10.1.1.244"] discovery.zen.minimum_master_nodes: 1
3.創建相關目錄
[root@es1 elasticsearch]# mkdir -pv /Data/es/{data,logs} mkdir: 已創建目錄 "/Data" mkdir: 已創建目錄 "/Data/es" mkdir: 已創建目錄 "/Data/es/data" mkdir: 已創建目錄 "/Data/es/logs
4. Elasticsearch為了安全考慮,不允許使用root啟動,解決方法新建一個用戶,用此用戶進行相關的操作
[root@es1 elasticsearch]# useradd elasticsearch [root@es1 elasticsearch]# chown -R elasticsearch:elasticsearch /Data/es/ [root@es1 elasticsearch]# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-2.1.0/
5.配置其他環境參數(必須,否則后面啟動會報錯)
[root@es1 elasticsearch]# echo "elasticsearch hard nofile 65536" >> /etc/security/limits.conf [root@es1 elasticsearch]# echo "elasticsearch soft nofile 65536" >> /etc/security/limits.conf [root@es1 elasticsearch]# sed -i 's/1024/2048/g' /etc/security/limits.d/90-nproc.conf [root@es1 elasticsearch]# echo "vm.max_map_count=262144 " >> /etc/sysctl.conf [root@es1 elasticsearch]# sysctl -p
[root@es1 elasticsearch]# grep "ES_HEAP_SIZE=" bin/elasticsearch #設置elasticsearch使用內存大小,原則上越大越好,但是不要超過32G export ES_HEAP_SIZE=100m #測試環境內存有限
其他節點配置同上,各節點配置差異部分:
network.host: 10.1.1.243 #本機IP地址 node.name: pwb-node1 #分配的節點名稱
6.啟動elasticsearch
[root@es1 elasticsearch]# su - elasticsearch [elasticsearch@es1 ~]$ cd /usr/local/elasticsearch [elasticsearch@es1 elasticsearch]$ bin/elasticsearch&
通過屏幕輸出可以看到服務啟動並通過自動發現方式添加集群內其他節點
檢查服務是否正常
[root@es1 ~]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 944/sshd tcp 0 0 ::ffff:10.1.1.243:9300 :::* LISTEN 3722/java #ES節點之間通訊使用 tcp 0 0 :::22 :::* LISTEN 944/sshd tcp 0 0 ::ffff:10.1.1.243:9200 :::* LISTEN 3722/java #ES節點和外部通訊使用 [root@es1 ~]# curl http://10.1.1.243:9200/ #如果出現以下信息,說明安裝配置成功啦
{ "name" : "pwb-node1", "cluster_name" : "pwb-cluster", "version" : { "number" : "2.1.0", "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87", "build_timestamp" : "2015-11-18T22:40:03Z", "build_snapshot" : false, "lucene_version" : "5.3.1" }, "tagline" : "You Know, for Search" }
7.安裝elasticsearch常用插件
[root@es1 ~]# /usr/local/elasticsearch/bin/plugin install mobz/elasticsearch-head
安裝完成后,訪問URL http://10.1.1.243:9200/_plugin/head/,由於集群中現在暫時沒有數據,所以顯示為空(五角星表示主節點,圓點表示數據節點)
其他常用插件安裝方式(這里不一一演示,有興趣可以自己安裝)
./bin/plugin install lukas-vlcek/bigdesk #2.0一下版本使用改命令 ./bin/plugin install hlstudio/bigdesk #2.0以上版本使用該命令安裝 ./bin/plugin install lmenezes/elasticsearch-kopf/version
二、Logstash集群安裝配置
Logstash需要依賴java環境,所以這里還是需要安裝JVM,這里步驟省略
1.安裝logstash
[root@logstash1 ~]# tar xf logstash-2.0.0.tar.gz -C /usr/local/ [root@logstash1 ~]# cd /usr/local/ [root@logstash1 local]# ln -sv logstash-2.0.0 logstash "logstash" -> "logstash-2.0.0" [root@logstash1 local]# cd logstash [root@logstash1 logstash]# grep "LS_HEAP_SIZE" bin/logstash.lib.sh LS_HEAP_SIZE="${LS_HEAP_SIZE:=100m}" #設置使用內存大小
2.測試logstash向elasticsearch寫入日志,以系統messages文件為例
(1)編寫一個logstash配置文件
[root@logstash1 logstash]# cat conf/messages.conf input { file { #數據輸入使用input file 插件,從messages文件中讀取 path => "/var/log/messages" } } output { elasticsearch { #數據輸出指向ES集群 hosts => ["10.1.1.243:9200","10.1.1.244:9200"] #ES節點主機IP和端口 } } [root@logstash1 logstash]# /usr/local/logstash/bin/logstash -f conf/messages.conf --configtest --verbose #語法檢測 Configuration OK [root@logstash1 logstash]# /usr/local/logstash/bin/logstash -f conf/messages.conf #啟動 Default settings used: Filter workers: 1 Logstash startup completed
(2)向message寫入一些文件,我們安裝一些軟件
[root@logstash1 log]# yum install httpd -y
查看messages文件的變化
[root@logstash1 log]# tail /var/log/messages Oct 24 13:44:25 localhost kernel: ata2.00: configured for UDMA/33 Oct 24 13:44:25 localhost kernel: ata2: EH complete Oct 24 13:49:34 localhost rz[3229]: [root] logstash-2.0.0.tar.gz/ZMODEM: error: zgethdr returned 16 Oct 24 13:49:34 localhost rz[3229]: [root] logstash-2.0.0.tar.gz/ZMODEM: error Oct 24 13:49:34 localhost rz[3229]: [root] no.name/ZMODEM: got error Nov 8 22:21:25 localhost rz[3245]: [root] logstash-2.0.0.tar.gz/ZMODEM: 80604867 Bytes, 2501800 BPS Nov 8 22:24:27 localhost rz[3248]: [root] jdk-8u25-x64.rpm/ZMODEM: 169983496 Bytes, 1830344 BPS Nov 8 22:50:49 localhost yum[3697]: Installed: apr-util-ldap-1.3.9-3.el6_0.1.x86_64 Nov 8 22:50:50 localhost yum[3697]: Installed: httpd-tools-2.2.15-60.el6.centos.6.x86_64 Nov 8 22:51:07 localhost yum[3697]: Installed: httpd-2.2.15-60.el6.centos.6.x86_64
訪問elasticsearch head插件的web頁面
ok.已經看到logstash向elasticsearch集群可以正常寫入,logstash配置完成(其他節點配置相同)
三、Kafka+zookeeper集群安裝配置
在搭建kafka集群時,需要提前安裝zookeeper集群,可以單獨安裝也可以使用kafka自帶zookeeper程序,這里選擇kafka自帶的zookeeper程序
1.解壓安裝包
[root@kafka1 ~]# tar xf kafka_2.11-0.11.0.1.tgz -C /usr/local/ [root@kafka1 ~]# cd /usr/local/ [root@kafka1 local]# ln -sv kafka_2.11-0.11.0.1 kafka "kafka" -> "kafka_2.11-0.11.0.1" [root@kafka1 local]# cd kafka
2.配置zookeeper集群,修改配置文件
[root@kafka1 kafka]# grep "^[a-Z]" config/zookeeper.properties dataDir=/Data/zookeeper clientPort=2181 maxClientCnxns=0 tickTime=2000 initLimit=20 syncLimit=10 server.1=10.1.1.247:2888:3888 server.2=10.1.1.248:2888:3888
#說明:
tickTime: 這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
2888端口:表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;
3888端口:表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口
3.創建zookeeper所需要的目錄和myid文件
[root@kafka1 kafka]# mkdir -pv /Data/zookeeper mkdir: 已創建目錄 "/Data" mkdir: 已創建目錄 "/Data/zookeeper" [root@kafka1 kafka]# echo "1" > /Data/zookeeper/myid #myid文件,里面的內容為數字,用於標識主機,如果這個文件沒有的話,zookeeper無法啟動
4.kafka配置
[root@kafka1 kafka]# grep "^[a-Z]" config/server.properties broker.id=1 #唯一 listeners=PLAINTEXT://10.1.1.247:9092 #服務器IP地址和端口
num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/Data/kafka-logs #不需要提前創建 num.partitions=10 #需要配置較大,分片影響讀寫速度 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 #過期時間 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=10.1.1.247:2181,10.1.1.248:2181 #zookeeper服務器IP和端口 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0
其他節點配置相同,除以下幾點:
(1)zookeeper的配置 echo "x" > /Data/zookeeper/myid #唯一 (2)kafka的配置 broker.id=1 #唯一 host.name=本機IP
5.啟動zookeeper和kafka
(1)啟動zookeeper
[root@kafka1 kafka]# /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &
后面兩台執行相同操作,在啟動過程當中會出現以下報錯信息
java.net.ConnectException: 拒絕連接 at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562) at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:538) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433) at java.lang.Thread.run(Thread.java:745) [2017-11-08 23:44:36,351] INFO Resolved hostname: 10.1.1.248 to address: /10.1.1.248 (org.apache.zookeeper.server.quorum.QuorumPeer) [2017-11-08 23:44:36,490] WARN Cannot open channel to 2 at election address /10.1.1.248:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager) java.net.ConnectException: 拒絕連接 at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:614) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:913)
由於zookeeper集群在啟動的時候,每個結點都試圖去連接集群中的其它結點,先啟動的肯定連不上后面還沒啟動的,所以上面日志前面部分的異常是可以忽略的。通過后面部分可以看到,集群在選出一個Leader后,最后穩定了。
其他節點也可能會出現類似的情況,屬於正常
zookeeper服務檢查
[rootkafka1 ~]# netstat -nlpt | grep -E "2181|2888|3888" tcp 0 0 :::2181 :::* LISTEN 33644/java tcp 0 0 ::ffff:10.1.1.247:3888 :::* LISTEN 33644/java [root@kafka2 ~]# netstat -nlpt | grep -E "2181|2888|3888" tcp 0 0 :::2181 :::* LISTEN 35016/java tcp 0 0 ::ffff:10.1.1.248:2888 :::* LISTEN 35016/java #哪台是leader,那么他就擁有2888端口 tcp 0 0 ::ffff:10.1.1.248:3888 :::* LISTEN 35016/java
(2)啟動kafka
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
如有以下報錯
[2017-11-08 23:52:30,323] ERROR Processor got uncaught exception. (kafka.network.Processor) java.lang.ExceptionInInitializerError at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:124) at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:518) at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:511) at scala.collection.Iterator$class.foreach(Iterator.scala:891) at scala.collection.AbstractIterator.foreach(Iterator.scala:1334) at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) at scala.collection.AbstractIterable.foreach(Iterable.scala:54) at kafka.network.Processor.processCompletedReceives(SocketServer.scala:511) at kafka.network.Processor.run(SocketServer.scala:436) at java.lang.Thread.run(Thread.java:745) Caused by: java.net.UnknownHostException: kafka2.example.com: kafka2.example.com: 未知的名稱或服務 at java.net.InetAddress.getLocalHost(InetAddress.java:1473) at kafka.network.RequestChannel$.<init>(RequestChannel.scala:43) at kafka.network.RequestChannel$.<clinit>(RequestChannel.scala) ... 10 more Caused by: java.net.UnknownHostException: kafka2.example.com: 未知的名稱或服務 at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) at java.net.InetAddress.getLocalHost(InetAddress.java:1469) ... 12 more
編輯hosts文件,添加127.0.0.1 對當前主機名稱的解析
[root@kafka1 ~]# cat /etc/hosts 127.0.0.1 kafka1.example.com localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
啟動其他節點上的zookeeper和kafka
啟動完成后,進行一下測試
(1)建立一個主題
[root@kafka1 ~]# /usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic summer #注意:factor大小不能超過broker數,否則報錯,當前集群broker值值為2
Created topic "summer".
(2)查看有哪些主題已經創建
[root@kafka1 ~]/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 10.1.1.247:2181 #列出集群中所有topic summer
(3)查看topic的詳情
[root@kafka1 ~]# /usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 10.1.1.247:2181 --topic summer Topic:summer PartitionCount:1 ReplicationFactor:2 Configs: Topic: summer Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1 #主題名稱:summer #Partition:只有一個,從0開始 #leader :id為2的broker #Replicas 副本存在於broker id為2,1的上面 #Isr:活躍狀態的broker
(4)發送消息,這里使用的是生產者角色
[rootkafka1 ~]# /bin/bash /usr/local/kafka/bin/kafka-console-producer.sh --broker-list 10.1.1.247:9092 --topic summer >Hello,MR.Pan #輸入一些內容,回車
(5)接收消息,這里使用的是消費者角色
[root@kafka2 kafka]# /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper 10.1.1.247:2181 --topic summer --from-beginning Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper]. Hello,MR.Pan
如果能夠像上面一樣能夠接收到生產者發過來的消息,那說明基於kafka的zookeeper集群就成功啦。
六、配置客戶端rsyslog
1.查看當前rsyslog版本
[root@log-client1 ~]# rsyslogd -v rsyslogd 5.8.10, compiled with:
rsyslog對 kafka的支持是 v8.7.0版本后才提供的支持,所有需要升級系統rsyslog版本
2.升級rsyslog
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo -O /etc/yum.repos.d/rsyslog.repo #下載yum源 yum update rsyslog -y #更新rsyslog yum install rsyslog-kafka -y #安裝rsyslog-kafka模塊 ll /lib64/rsyslog/omkafka.so #查看模塊是否安裝完成 /etc/init.d/rsyslog restart #重啟服務
查看更新后版本
[root@log-client1 yum.repos.d]#wrsyslogd -v rsyslogd 8.30.0, compiled with:
3.下面測試將nginx日志通過rsyslog傳遞給kafka(nginx事先安裝完畢)
(1)編輯rsyslog的配置文件
[root@log-client1 yum.repos.d]# cat /etc/rsyslog.d/nginx_kafka.conf # 加載omkafka和imfile模塊 module(load="omkafka") module(load="imfile") # nginx template template(name="nginxAccessTemplate" type="string" string="%hostname%<-+>%syslogtag%<-+>%msg%\n") # ruleset ruleset(name="nginx-kafka") { #日志轉發kafka action ( type="omkafka" template="nginxAccessTemplate" confParam=["compression.codec=snappy", "queue.buffering.max.messages=400000"] partitions.number="4" topic="test_nginx" broker=["10.1.1.247:9092","10.1.1.248:9092"] queue.spoolDirectory="/tmp" queue.filename="test_nginx_kafka" queue.size="360000" queue.maxdiskspace="2G" queue.highwatermark="216000" queue.discardmark="350000" queue.type="LinkedList" queue.dequeuebatchsize="4096" queue.timeoutenqueue="0" queue.maxfilesize="10M" queue.saveonshutdown="on" queue.workerThreads="4" ) } # 定義消息來源及設置相關的action input(type="imfile" Tag="nginx,aws" File="/var/log/nginx/access.log" Ruleset="nginx-kafka")
測試conf文件是否語法錯誤
[root@log-client1 yum.repos.d]# rsyslogd -N 1 rsyslogd: version 8.30.0, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
測試沒有問題后重啟rsyslog,否則配置不生效
[root@log-client1 yum.repos.d]# /etc/init.d/rsyslog restart
啟動nginx,添加兩個測試頁面,進行訪問
切換到kafka集群服務器上,查看topic列表
[root@localhost ~]# /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 10.1.1.247:2181 summer test_nginx
可以看到除了之前測試創建的summer,又多了一個test_nginx topic,配置成功
七、配logstash將kafka數據傳輸到elasticsearch
[root@logstash1 ~]# cat /usr/local/logstash/conf/test_nginx.conf input { kafka{ zk_connect => "10.1.1.247:2181,10.1.1.248:2181" #kafka集群 group_id => "logstash" topic_id => "test_nginx" reset_beginning => false consumer_threads => 5 decorate_events => true } } output { elasticsearch { hosts => ["10.1.1.243:9200","10.1.1.244:9200"] #elasticsearch集群 index => "test-nginx-%{+YYYY-MM-dd}" #數據量大的情況下按天創建索引,后期刪除比較方便 } }
測試語法
[root@logstash1 ~]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/test_nginx.conf -t Configuration OK
啟動服務,其余節點也開啟服務
[root@logstash1 log]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/test_nginx.conf Default settings used: Filter workers: 1 Logstash startup completed
切換到ES集群節點es1.example.com 查看:
[root@es1 ~]# curl -XGET '10.1.1.243:9200/_cat/indices?v&pretty' health status index pri rep docs.count docs.deleted store.size pri.store.size green open logstash-2017.11.08 5 1 4 0 40.7kb 20.3kb green open test-nginx-2017-11 5 1 1 0 12.5kb 6.2kb
可以看到,test-nginx 索引已經有了
在訪問head插件的web界面
再次訪問測試下,使用強制刷新
訪問head插件web界面:
最新的訪問兩條記錄已經出來了
八、Kibana的部署
在ES集群節點上安裝kibana
[root@es1 ~]# tar xf kibana-4.2.1-linux-x64.tar.gz -C /usr/local/ [root@es1 ~]# cd /usr/local/ [root@es1 local]# ln -sv kibana-4.2.1-linux-x64/ kibana "kibana" -> "kibana-4.2.1-linux-x64/" [root@es1 local]# cd kibana [root@es1 kibana]# grep "^[a-Z]" config/kibana.yml #配置主機端口已經elasticsearch服務器IP地址和端口 server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://10.1.1.243:9200"
訪問kibana,添加索引:
點擊Discover,選擇索引名稱,查詢
由於測試環境數據太少,下面我使用kibana查詢生產環境數據:
默認查詢:
單個條件查詢(查詢狀態碼為4XX的訪問)
多條件並查詢(查詢訪問狀態為4XX並且agent為百度蜘蛛的),多條件查詢把AND改為OR就好了
着重說明一下URL查詢,在kibana語法中有許多特殊字符,在查詢時需要使用\進行轉移,否則會報語法錯誤
視圖:
創建一個視圖,以餅圖為例
查詢網站最后五分鍾,排名前20的IP
kibana還有很多常用操作,還有kibana語法,大家可以查官方文檔,或者百度和谷歌
nginx反向代理麻煩大家自行搭建測試,這里就不測試了
小結:在搭建的時候碰到很多坑,小弟想和大家分享一下
1.JDK版本不一致
使用yum安裝時JDK小版本號不一致,會導致ES集群無法發現其他節點,另外官方也建議使用oracle JDK。
2.ELK版本選擇
由於ELK在5.X之前版本比較混亂,很容易出錯,這也是大家看到5.X之后ELK版本全部從5開始,錯誤如下圖
百度和谷歌發現都是需要更改index.max_result_window值大小,看報錯也是,但是測試發現是版本不匹配導致的,我整理了5,.X之前相關版本的對應關系,下圖:
注意事項:
1.所有集群節點應當是奇數個
2.所有服務應配置為系統服務或使用nohup、screen等放入后台,如果使用nohup,注意out.put文件大小, 如果服務有問題,nohup的日志文件會非常大,會把磁盤占滿
3.ES服務使用內存越大越好,但是不要超過32G
4.客戶端日志收集工具有很多,有興趣可以自己找資料看看
5.最權威的資料還是官方文檔,https://www.elastic.co/guide/index.html 有興趣可以看一下
寫的不好,望各位大神海涵!!
