對於能安裝Beats的設備,咱們直接使用Beats來收集日誌,對於不能安裝Beats的設備(例如防火牆、交換機等),咱們配置Rsyslog遠程傳輸到Logstash收集端,最後都發送到Kafka隊列裏。javascript
系統類型:Centos7.5
節點IP:172.16.244.2五、172.16.244.2六、172.16.244.27
軟件版本:jdk-8u121-linux-x64.tar.gz、elasticsearch-6.5.4.tar.gz
示例節點:172.16.244.25css
ES運行依賴jdk8html
tar zxvf /usr/local/package/jdk-8u121-linux-x64.tar.gz -C /usr/local/ echo ' JAVA_HOME=/usr/local/jdk1.8.0_121 PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH ' >>/etc/profile source /etc/profile
useradd elsearch echo "******" | passwd --stdin "elsearch"
tar zxvf /usr/local/package/elasticsearch-6.5.4.tar.gz -C /usr/local/ echo ' cluster.name: bjbpe01-elk node.name: elk01 node.master: true node.data: true path.data: /opt/data/elasticsearch/data path.logs: /opt/data/elasticsearch/logs bootstrap.memory_lock: true bootstrap.system_call_filter: false network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["172.16.244.26", "172.16.244.27"] 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: "*" ' >>/usr/local/elasticsearch-6.5.4/config/elasticsearch.yml
配置項含義:前端
cluster.name 集羣名稱,各節點配成相同的集羣名稱。 node.name 節點名稱,各節點配置不一樣。 node.master 指示某個節點是否符合成爲主節點的條件。 node.data 指示節點是否爲數據節點。數據節點包含並管理索引的一部分。 path.data 數據存儲目錄。 path.logs 日誌存儲目錄。 bootstrap.memory_lock 內存鎖定,是否禁用交換。 bootstrap.system_call_filter 系統調用過濾器。 network.host 綁定節點IP。 http.port rest api端口。 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 容許的源地址。
sed -i 's/-Xms1g/-Xms4g/' /usr/local/elasticsearch-6.5.4/config/jvm.options sed -i 's/-Xmx1g/-Xmx4g/' /usr/local/elasticsearch-6.5.4/config/jvm.options
注意:
確保堆內存最小值(Xms)與最大值(Xmx)的大小相同,防止程序在運行時改變堆內存大小。
若是系統內存足夠大,將堆內存最大和最小值設置爲31G,由於有一個32G性能瓶頸問題。
堆內存大小不要超過系統內存的50%java
mkdir -p /opt/data/elasticsearch/data mkdir -p /opt/data/elasticsearch/logs
chown -R elsearch:elsearch /opt/data/elasticsearch chown -R elsearch:elsearch /usr/local/elasticsearch-6.5.4
永久生效方法:
echo」* - nofile 65536」 >> /etc/security/limits.confnode
echo 「* soft nproc 31717」 >> /etc/security/limits.conflinux
echo 「vm.max_map_count=262144」 >> /etc/sysctl.conf sysctl –p
su - elsearch -c "cd /usr/local/elasticsearch-6.5.4 && nohup bin/elasticsearch &"
測試:瀏覽器訪問http://172.16.244.25:9200nginx
wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz tar -zxf node-v4.4.7-linux-x64.tar.gz –C /usr/local echo ‘ NODE_HOME=/usr/local/node-v4.4.7-linux-x64 PATH=$NODE_HOME/bin:$PATH export NODE_HOME PATH ‘ >>/etc/profile source /etc/profile node –version #檢查node版本號
wget https://github.com/mobz/elasticsearch-head/archive/master.zip unzip –d /usr/local elasticsearch-head-master.zip
cd /usr/local/elasticsearch-head-master npm install -g grunt-cli grunt –version #檢查grunt版本號
vi /usr/local/elasticsearch-head-master/Gruntfile.js
添加hostname,注意在上一行末尾添加逗號
vi /usr/local/elasticsearch-head-master/_site/app.js
本來是http://localhost:9200 ,若是head和ES不在同一個節點,注意修改爲ES的IP地址git
wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2 yum -y install bzip2 tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/
cd /usr/local/elasticsearch-head-master/ npm install nohup grunt server &
訪問http://172.16.244.25:9100github
系統類型:Centos7.5
節點IP:172.16.244.28
軟件版本:nginx-1.14.二、kibana-6.5.4-linux-x86_64.tar.gz
tar zxf /usr/local/package/kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/
echo ' server.port: 5601 server.host: "172.16.244.28" elasticsearch.url: "http://172.16.244.25:9200" kibana.index: ".kibana" '>>/usr/local/kibana-6.5.4-linux-x86_64/config/kibana.yml
配置項含義:
server.port kibana服務端口,默認5601 server.host kibana主機IP地址,默認localhost elasticsearch.url 用來作查詢的ES節點的URL,默認http://localhost:9200 kibana.index kibana在Elasticsearch中使用索引來存儲保存的searches, visualizations和dashboards,默認.kibana
其餘配置項可參考:
https://www.elastic.co/guide/en/kibana/6.5/settings.html
cd /usr/local/kibana-6.5.4-linux-x86_64/ nohup ./bin/kibana &
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx httpd-tools
注意:httpd-tools用於生成nginx認證訪問的用戶密碼文件
cat /etc/nginx/nginx.conf
user nginx; worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; worker_rlimit_nofile 65535; events { worker_connections 65535; use epoll; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; server_names_hash_bucket_size 128; autoindex on; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模塊設置 gzip on; #開啓gzip壓縮輸出 gzip_min_length 1k; #最小壓縮文件大小 gzip_buffers 4 16k; #壓縮緩衝區 gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0) gzip_comp_level 2; #壓縮等級 gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型,默認就已經包含textml,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。 gzip_vary on; #開啓限制IP鏈接數的時候須要使用 #limit_zone crawler $binary_remote_addr 10m; #tips: #upstream bakend{#定義負載均衡設備的Ip及設備狀態}{ # ip_hash; # server 127.0.0.1:9090 down; # server 127.0.0.1:8080 weight=2; # server 127.0.0.1:6060; # server 127.0.0.1:7070 backup; #} #在須要使用負載均衡的server中增長 proxy_pass http://bakend/; server { listen 80; server_name 172.16.244.28; #charset koi8-r; # access_log /var/log/nginx/host.access.log main; access_log off; location / { auth_basic "Kibana"; #能夠是string或off,任意string表示開啓認證,off表示關閉認證。 auth_basic_user_file /etc/nginx/passwd.db; #指定存儲用戶名和密碼的認證文件。 proxy_pass http://172.16.244.28:5601; proxy_set_header Host $host:5601; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; } location /status { stub_status on; #開啓網站監控狀態 access_log /var/log/nginx/kibana_status.log; #監控日誌 auth_basic "NginxStatus"; } location /head/{ auth_basic "head"; auth_basic_user_file /etc/nginx/passwd.db; proxy_pass http://172.16.244.25:9100; proxy_set_header Host $host:9100; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
htpasswd -cm /etc/nginx/passwd.db
systemctl start nginx
瀏覽器訪問http://172.16.244.28 剛開始沒有任何數據,會提示你建立新的索引。
系統類型:Centos7.5
節點IP:172.16.244.3一、172.16.244.3二、172.16.244.33
軟件版本:jdk-8u121-linux-x64.tar.gz、kafka_2.11-2.1.0.tgz
示例節點:172.16.244.31
tar zxvf /usr/local/package/jdk-8u121-linux-x64.tar.gz -C /usr/local/ echo ' JAVA_HOME=/usr/local/jdk1.8.0_121 PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH ' >>/etc/profile source /etc/profile
Kafka運行依賴ZK,Kafka官網提供的tar包中,已經包含了ZK,這裏再也不額下載ZK程序。
tar zxvf /usr/local/package/kafka_2.11-2.1.0.tgz -C /usr/local/
sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties echo ' dataDir=/opt/data/zookeeper/data dataLogDir=/opt/data/zookeeper/logs clientPort=2181 tickTime=2000 initLimit=20 syncLimit=10 server.1=172.16.244.31:2888:3888 server.2=172.16.244.32:2888:3888 server.3=172.16.244.33:2888:3888 '>>/usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
配置項含義:
dataDir ZK數據存放目錄。 dataLogDir ZK日誌存放目錄。 clientPort 客戶端鏈接ZK服務的端口。 tickTime ZK服務器之間或客戶端與服務器之間維持心跳的時間間隔。 initLimit 容許follower(相對於Leaderer言的「客戶端」)鏈接並同步到Leader的初始化鏈接時間,以tickTime爲單位。當初始化鏈接時間超過該值,則表示鏈接失敗。 syncLimit Leader與Follower之間發送消息時,請求和應答時間長度。若是follower在設置時間內不能與leader通訊,那麼此follower將會被丟棄。 server.1=172.16.244.31:2888:3888 2888是follower與leader交換信息的端口,3888是當leader掛了時用來執行選舉時服務器相互通訊的端口。
#建立data、log目錄
mkdir -p /opt/data/zookeeper/{data,logs}
#建立myid文件
echo 1 > /opt/data/zookeeper/data/myid
sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/server.properties echo ' broker.id=1 listeners=PLAINTEXT://172.16.244.31:9092 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=/opt/data/kafka/logs num.partitions=6 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=2 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=536870912 log.retention.check.interval.ms=300000 zookeeper.connect=172.16.244.31:2181,172.16.244.32:2181,172.16.244.33:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0 ' >>/usr/local/kafka_2.11-2.1.0/config/server.properties
配置項含義:
broker.id 每一個server須要單獨配置broker id,若是不配置系統會自動配置。 listeners 監聽地址,格式PLAINTEXT://IP:端口。 num.network.threads 接收和發送網絡信息的線程數。 num.io.threads 服務器用於處理請求的線程數,其中可能包括磁盤I/O。 socket.send.buffer.bytes 套接字服務器使用的發送緩衝區(SO_SNDBUF) socket.receive.buffer.bytes 套接字服務器使用的接收緩衝區(SO_RCVBUF) socket.request.max.bytes 套接字服務器將接受的請求的最大大小(防止OOM) log.dirs 日誌文件目錄。 num.partitions partition數量。 num.recovery.threads.per.data.dir 在啓動時恢復日誌、關閉時刷盤日誌每一個數據目錄的線程的數量,默認1。 offsets.topic.replication.factor 偏移量話題的複製因子(設置更高保證可用),爲了保證有效的複製,偏移話題的複製因子是可配置的,在偏移話題的第一次請求的時候可用的broker的數量至少爲複製因子的大小,不然要麼話題建立失敗,要麼複製因子取可用broker的數量和配置複製因子的最小值。 log.retention.hours 日誌文件刪除以前保留的時間(單位小時),默認168 log.segment.bytes 單個日誌文件的大小,默認1073741824 log.retention.check.interval.ms 檢查日誌段以查看是否能夠根據保留策略刪除它們的時間間隔。 zookeeper.connect ZK主機地址,若是zookeeper是集羣則以逗號隔開。 zookeeper.connection.timeout.ms 鏈接到Zookeeper的超時時間。
#建立log目錄
mkdir -p /opt/data/kafka/logs
只需把配置好的安裝包直接分發到其餘節點,而後修改ZK的myid,Kafka的broker.id和listeners就能夠了。
在三個節點依次執行:
cd /usr/local/kafka_2.11-2.1.0/ nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
查看ZK配置
# echo conf | nc 127.0.0.1 2181 clientPort=2181 dataDir=/opt/data/zookeeper/data/version-2 dataLogDir=/opt/data/zookeeper/logs/version-2 tickTime=2000 maxClientCnxns=60 minSessionTimeout=4000 maxSessionTimeout=40000 serverId=1 initLimit=20 syncLimit=10 electionAlg=3 electionPort=3888 quorumPort=2888 peerType=0
查看ZK狀態
# echo stat|nc 127.0.0.1 2181 Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 00:39 GMT Clients: /127.0.0.1:51876[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 2 Sent: 1 Connections: 1 Outstanding: 0 Zxid: 0x0 Mode: follower Node count: 4
查看端口
# lsof -i:2181 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 15002 root 98u IPv4 43385 0t0 TCP *:eforward (LISTEN)
在三個節點依次執行:
cd /usr/local/kafka_2.11-2.1.0/ nohup bin/kafka-server-start.sh config/server.properties &
在172.16.244.31上建立topic
# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic Created topic "testtopic".
查詢172.16.244.31上的topic
# bin/kafka-topics.sh --zookeeper 172.16.244.31:2181 --list testtopic
查詢172.16.244.32上的topic
# bin/kafka-topics.sh --zookeeper 172.16.244.32:2181 --list testtopic
查詢172.16.244.33上的topic
# bin/kafka-topics.sh --zookeeper 172.16.244.33:2181 --list testtopic
模擬消息生產和消費
發送消息到172.16.244.31
# bin/kafka-console-producer.sh --broker-list 172.16.244.31:9092 --topic testtopic >Hello World!
從172.16.244.32接受消息
# bin/kafka-console-consumer.sh --bootstrap-server 172.16.244.32:9092 --topic testtopic --from-beginning Hello World!
系統類型:Centos7.5
節點IP:172.16.244.31
軟件版本:jdk-8u121-linux-x64.tar.gz、logstash-6.5.4.tar.gz
Logstash運行一樣依賴jdk,本次爲節省資源,故將Logstash安裝在了kafka244.31節點。
tar zxf /usr/local/package/logstash-6.5.4.tar.gz -C /usr/local/
建立目錄,咱們將全部input、filter、output配置文件所有放到該目錄中。
mkdir –p /usr/local/logstash-6.5.4/etc/conf.d vi /usr/local/logstash-6.5.4/etc/conf.d/input.conf input { kafka { type => "audit_log" codec => "json" topics => "audit_log" decorate_events => true bootstrap_servers => "172.16.244.31:9092, 172.16.244.32:9092, 172.16.244.33:9092" } } vi /usr/local/logstash-6.5.4/etc/conf.d/output.conf output { if [type] == " audit_log " { elasticsearch { hosts => ["172.16.244.25","172.16.244.26","172.16.244.27"] index => 'logstash-audit_log-%{+YYYY-MM-dd}' } } }
(3)啓動
cd /usr/local/logstash-6.5.4 nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
以Auditbeat爲例,在每一個日誌收集節點安裝Auditbeat,具體安裝、配置方法可參考https://blog.51cto.com/fengjicheng/2343882。
下面,介紹下輸出到Kafka涉及的配置。
修改auditbeat.yml配置文件,註釋掉其餘的output部分,添加輸出到Kafka的相關配置:
#----------------------------- Kafka output-------------------------------- output.kafka: hosts: ["172.16.244.31:9092", "172.16.244.32:9092", "172.16.244.33:9092"] topic: 'audit_log' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000