日志分析平台
目录1. 简介... 3
1.1. Logstash. 5
1.2. ElasticSearch. 5
1.3. Kibana. 5
1.4. Kafka. 6
1.5. Zookeeper 6
1.6. Lua. 7
1.7. Docker 7
2. 本机环境搭建... 8
2.1. 系统初始化... 9
2.2. JDK 安装... 9
2.3. ElasticSearch. 10
2.4. Kibana. 16
2.5. zookeeper 17
2.6. kafka. 20
3.Docker环境搭建... 23
4.案例... 24
4.1. logstash获取应用日志。... 24
4.2. logstash获取Oracle数据... 24
4.3. Nginx+Lua 获取网页访问记录... 24
附录Ⅰ配置列表... 25
附录Ⅱ x-pack破解... 26
1.简介
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。
lElasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
lLogstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
lkibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web界面,可以帮助您汇总、分析和搜索重要数据日志。
整体数据流程:
图1.1 ELK数据流图
因为子系统和实例远远大于ES数量,所以在ES和收集日志的logstash终端之间添加了Kafka实现缓存。
图1.2 添加kafka实现logstash与ES缓存
日志信息存储量过大,ES只存储1周数据,超过1周的数据存放HIVE。日志大小信息如图1.3
图1.3 ES 普惠日志增长量
普惠信息主要来自三个方面,针对不同的数据采用不同的方法:
安全日志:存储于Oracle数据库。
Oracle---logstash----kafka-----ES----Kibana
应用日志:以txt文档方式存储于应用本地目录。
Txt----logstash(filter)----kafka----ES---Kibana
Nginx访问日志:使用Nginx差价Lua直接推送Kafka
Nginx+lua-----kafka----ES---kibana
1.1. Logstash
logstash是一个数据分析软件,主要目的是分析log日志。数据首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引。
图1.4 Logstash数据处理流程
1.2. ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
1.3. Kibana
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可进行搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。
1.4. Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。
1.5. Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
图1.5 Zookeeper 工作原理
1.6. Lua
Lua 是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。
1.7. Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
2.本机环境搭建
ELK 所有组件均只依赖Java 就可以运行,所以在部署方面相对比较简单。
本章先介绍使用本机直接安装ELK,再建此环境移植到Docker环境,待后期使用Mesos或Openshift统一调用管理。
生产环境无法联网,请自行下载到本地目录后上传,科技有封装好的ZK和Kafka,可以考虑使用。
组件多数依赖Java,先安装Java再安装其他组件,各组件列表及其下载地址:
JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
ElasticSearch,Logstash,Kibana,X-pack
https://www.elastic.co/cn/downloads
Kafka:
http://kafka.apache.org/downloads
Zookeeper
https://www.apache.org/dyn/closer.cgi/zookeeper/
本地资源:
http://http://mirrors-ph.paic.com.cn//repo/elk/
本地环境:测试环境。
直接将各组件搭建在本地机器,测试其可用性。
生产环境:
Es-node01
192.168.0.1
8核/32.0GB
Centos7.2
elastic
ES-node01,ansible
Es-node02
192.168.0.2
8核/32.0GB
Centos7.2
elastic
ES-node02
Es-node03
192.168.0.3
8核/32.0GB
Centos7.2
elastic
ES-node03
Es-node04
192.168.0.4
8核/32.0GB
Centos7.2
elastic
ES-node04
Es-node05
192.168.0.5
8核/32.0GB
Centos7.2
elastic
ES-node05
2.1. 系统初始化
系统初始化:
添加组:方便统一,添加组id
groupadd -g 4567elk
ansible kafka -m shell -a 'groupadd -g 4567 elk '
添加用户:
useradd -G elk -u 1234 kafka
ansible kafka -m shell -a 'useradd -G elk -u 1234 kafka '
初始化密码:
echo ***** |passwd kafka --stdin
ansible kafka -m shell -a 'echo ****** |passwd kafka --stdin '
ansible es -m shell -a 'echo ******| passwd elastic --stdin '
ansible logstash -m shell -a 'echo ******| passwd logstash --stdin '
创建kafka数据/日志路径:
mkdir /mnt/data{1..4}/kafka/data-p
ansible kafka -m shell -a 'mkdir/mnt/data{1..4}/kafka/data -p '
ansible kafka -m shell -a 'mkdir/mnt/data1/kafka/logs -p '
创建zookeeper数据/日志路径:
mkdir/mnt/data1/zookeeper/logs -p
ansible kafka -m shell -a 'mkdir/mnt/data1/zookeeper/logs -p '
ansible kafka -m shell -a 'mkdir/mnt/data{1..4}/zookeeper/data -p '
创建软件路径:
mkdir /var/soft-p
ansible kafka -m shell -a ' mkdir /var/soft–p’
2.2. JDK 安装
1. 远程登录服务器,创建业务用户:
$ ssh root@192.168.0.1
# groupadd elk
# useradd elastic –b /wls/ -G elk
# echo ****** |passwd elastic --stdin
更改用户 elastic的密码。
passwd: 所有的身份验证令牌已经成功更新。
重复以上动作,在所有主机添加用户。
2. 切换用户。
# su - elastic
3. JDK安装
下载并上传jdk包至服务器。因为数据包过大,请使用跳板机上传。此处省略过程。
# wget -O /var/soft/jdk1.8.0_131.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/jdk1.8.0_131.tar.gz
进入安装目录,解压包,并设置PATH路径
$ cd /var/soft
$ tar –zxvf jdk1.8.0_131.tar.gz
$ vim ~/.bash_profile #修改PATH路径,并设置开机运行
JAVA_HOME=/wls/elk/jdk1.8.0_131
PATH=$JAVA_HOME/binhttp://aodi.paic.com.cn/static/image/smiley/default/shy.gifPATH
$ source ~/.bash_profile
$ java –version #确认Java版本是否可用
java version"1.8.0_131"
Java(TM) SERuntime Environment (build 1.8.0_131-b11)
Java HotSpot(TM)64-Bit Server VM (build 25.131-b11, mixed mode)
$ which java #确认是否为Java 路径
/wls/elk/jdk1.8.0_131/bin/java
$
2.3. ElasticSearch
ElasticSearch只依赖JAVA,直接解压,修改配置就好。
ES有很多可用插件,但是离线真的很难安装,直接放弃,对于我们这种专业的运维,直接使用curl操作。
1. 上传解压
$ wget -O /var/soft/elasticsearch-6.0.0.tar.gzhttp://http://mirrors-ph.paic.com.cn//repo/elk/elasticsearch-6.0.0.tar.gz
$ cd /var/soft
$ tar -zxvf tools/elasticsearch-6.0.0.tar.gz
2. 修改配置
可以参考配置文件:
http://http://mirrors-ph.paic.com.cn//repo/elk/conf/elasticsearch.yml
查看系统配置,存储数据地址:
创建文件位置
#df -Th
/dev/mapper/VolGroup1-LVdata1xfs 500G 33M 500G 1% /mnt/data2
/dev/mapper/VolGroup2-LVdata2xfs 500G 33M 500G 1% /mnt/data1
#mkdir /mnt/data{1..2}/elasticsearch/data –p
#mkdir /mnt/data1/elasticsearch/logs –p
#chown elastic:elk /mnt/data* -R
修改配置:
#cat /config/elasticsearch.yml
cluster.name:ph-elk #集群名
node.name: es-node01 #主机名
path.data:/mnt/data1/elasticsearch/data,/mnt/data2/elasticsearch/data #数据路径,多文件用逗号
path.logs:/mnt/data1/elasticsearch/logs #log路径
network.host:0.0.0.0 #可访问机器
http.port: 9200 #端口
discovery.zen.ping.unicast.hosts:["192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.4","192.168.0.5"] #其他机器
xpack.ssl.key:certs/${node.name}/${node.name}.key #x-pack认证证书路径
xpack.ssl.certificate:certs/${node.name}/${node.name}.crt #机器私钥
xpack.ssl.certificate_authorities:certs/ca/ca.crt #集群CA证书
xpack.security.transport.ssl.enabled:true #开启xpack功能
Jvm 配置根据机器配置修改:
#cat config/jvm.options
-Xms28g
-Xmx28g
3. 启动验证
# bin/elasticsearch
bound or publishing to a non-loopback or non-link-local address, enforcingbootstrap checks
ERROR: bootstrap checks failed
: max virtualmemory areas vm.max_map_count is too low, increase to at least
此报错使用root修改vm.max_map_count
# sysctl -w vm.max_map_count=20000000
vm.max_map_count= 20000000
再次启动
# bin/elasticsearch –d
initializing ...
using data paths, mounts [], net usable_space , nettotal_space , types
heap size , compressed ordinary object pointers
node name , node ID
version, pid, build,OS, JVM
JVM arguments [-Xms28g, -Xmx28g, -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,-XX:+HeapDumpOnOutOfMemoryError,-Des.path.home=/var/soft/elasticsearch-6.0.0, -Des.path.conf=/var/soft/elasticsearch-6.0.0/config]
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded module
loaded plugin
验证:
# curl http://192.168.0.1:9200
{
"name" : "es-node01",
"cluster_name" :"ph-elk",
"cluster_uuid" :"x2oARQMlQoqMPTYXT4MeGw",
"version" : {
"number" : "6.0.0",
"build_hash" :"8f0685b",
4. 安装x-pack
# wget http://http://mirrors-ph.paic.com.cn//repo/elk/x-pack-6.0.0.zip
# bin/elasticsearch-plugin installfile:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
-> Downloadingfile:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
[=================================================]100%聽聽
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additionalpermissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*java.io.FilePermission \\.\pipe\* read,write
*java.lang.RuntimePermissionaccessClassInPackage.com.sun.activation.registries
*java.lang.RuntimePermission getClassLoader
*java.lang.RuntimePermission setContextClassLoader
*java.lang.RuntimePermission setFactory
* java.net.SocketPermission* connect,accept,resolve
*java.security.SecurityPermission createPolicy.JavaPolicy
*java.security.SecurityPermission getPolicy
*java.security.SecurityPermission putProviderProperty.BC
*java.security.SecurityPermission setPolicy
* java.util.PropertyPermission* read,write
*java.util.PropertyPermission sun.nio.ch.bugLevel write
Seehttp://docs.oracle.com/javase/8/ ... ty/permissions.html
for descriptionsof what these permissions allow and the associated risks.
Continue withinstallation? y
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin forks a nativecontroller @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
This pluginlaunches a native controller that is not subject to the Java
security managernor to system call filters.
Continue withinstallation? y
5. 生成认证秘钥
$ bin/x-pack/certgen
Please enter thedesired output file : ph-elk
Enter instancename: es-node01
Enter name fordirectories and files :
Enter IPAddresses for instance (comma-separated if more than one) []: 192.168.0.1
6. 解压秘钥
$ mkdir certs
$ cd certs/
$ unzip ../ph-elk.zip
Archive:../ph-elk.zip
creating: ca/
inflating: ca/ca.crt
inflating: ca/ca.key
creating: es-node01/
inflating: es-node01/es-node01.crt
inflating: es-node01/es-node01.key
creating: es-node02/
inflating: es-node02/es-node02.crt
inflating: es-node02/es-node02.key
creating: es-node03/
inflating: es-node03/es-node03.crt
inflating: es-node03/es-node03.key
creating: es-node04/
inflating: es-node04/es-node04.crt
inflating: es-node04/es-node04.key
creating: es-node05/
inflating: es-node05/es-node05.crt
inflating: es-node05/es-node05.key
7. 密码初始化
#cd bin/x-pack
$ ./setup-passwords interactive
Initiating thesetup of reserved user elastic,kibana,logstash_system passwords.
You will beprompted to enter passwords as the process progresses.
Please confirmthat you would like to continue y
Enter passwordfor :
Reenter passwordfor :
Enter passwordfor :
Reenter passwordfor :
Enter passwordfor :
Reenter passwordfor :
Changed passwordfor user
Changed passwordfor user
Changed passwordfor user
$
重启验证。恭喜恭喜
$ curl -u elastic http://127.0.0.1:9200?pretty
Enter hostpassword for user 'elastic':*******
{
"name" : "es-node01",
"cluster_name" :"ph-elk",
"cluster_uuid" :"x2oARQMlQoqMPTYXT4MeGw",
"version" : {
"number" : "6.0.0",
"build_hash" :"8f0685b",
"build_date" :"2017-11-10T18:41:22.859Z",
"build_snapshot" : false,
"lucene_version" :"7.0.1",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, forSearch"
}
2.4. Kibana
Kibana 安装依赖java,下载安装即可。
# wget -O/var/soft/kibana-6.0.0-linux-x86_64.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/kibana-6.0.0-linux-x86_64.tar.gz
--2018-03-2913:13:42--http://http://mirrors-ph.paic.com.cn//repo/elk/kibana-6.0.0-linux-x86_64.tar.gz
正在连接http://mirrors-ph.paic.com.cn/:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:62681301 (60M)
正在保存至: “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”
100%[================================================================================================================================>]62,681,30136.1MB/s 用时 1.7s
2018-03-2913:13:44 (36.1 MB/s) - 已保存 “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”)
#
解压
# cd /var/soft/
# tar zxv kibana-6.0.0-linux-x86_64.tar.gz
修改配置
# cat ../config/kibana.yml|egrep -v"^#|$?"
server.port:"5601"
server.host:"0.0.0.0"
server.name:"es-node01"
elasticsearch.url:"http://127.0.0.1:9200"
elasticsearch.username:"kibana"
elasticsearch.password:"kibana"
启动验证
# bin/kibana
访问页面,恭喜恭喜:http://kibana_server:5601
2.5. zookeeper
服务器列表:
kafka-node1
192.168.0.6
8核/32.0GB
Centos7.2
Kafka-node1
kafka-node2
192.168.0.7
8核/32.0GB
Centos7.2
Kafka-node2
kafka-node3
192.168.0.8
8核/32.0GB
Centos7.2
Kafka-node3
kafka-node4
192.168.0.9
8核/32.0GB
Centos7.2
Kafka-node4
kafka-node5
192.168.0.10
8核/32.0GB
Centos7.2
Kafka-node5
安装jdk,参考以前步骤。
ansible kafka -mshell -a 'wget -O /var/soft/jdk1.8.0_131.tar.gzhttp://http://mirrors-ph.paic.com.cn//repo/elk/jdk1.8.0_131.tar.gz'
ansible kafka -mshell -a 'cd /var/soft ; tar zxf jdk1.8.0_131.tar.gz'
下载zookeeper包:
URL: http://http://mirrors-ph.paic.com.cn//repo/elk/zookeeper-3.4.6.tar.gz
wget -O/var/soft/zookeeper-3.4.6.tar.gzhttp://http://mirrors-ph.paic.com.cn//repo/elk/zookeeper-3.4.6.tar.gz
wget -O/var/soft/kafka_2.11-0.10.2.1.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/kafka_2.11-0.10.2.1.tar.gz
解压:
ansible kafka -mshell -a 'cd /var/soft; tar xf zookeeper-3.4.6.tar.gz'
ansible kafka -mshell -a 'cd /var/soft; tar zxf kafka_2.11-0.10.2.1.tar.gz'
修改配置:
# cat conf/zoo.cfg |egrep -v "^#|^$"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/mnt/data1/zookeeper/data
dataLogDir=/mnt/data1/zookeeper/logs
clientPort=2181
maxClientCnxns=300
autopurge.snapRetainCount=20
autopurge.purgeInterval=48
server.1=192.168.0.6:2888:3888
server.2=192.168.0.7:2888:3888
server.3=192.168.0.8:2888:3888
server.4=192.168.0.9:2888:3888
server.5=192.168.0.10:2888:3888
同步配置文档:使用ansible统一分发(方便)。
# ansible kafka -m copy -a"src=/var/soft/zookeeper-3.4.6/conf/zoo.cfgdest=/var/soft/zookeeper-3.4.6/conf/"
kafka-node3 |SUCCESS => {
"changed": true,
"checksum":"3c05364115536c3b645bc7222df883b341d50c83",
"dest":"/var/soft/zookeeper-3.4.6/conf/zoo.cfg",
"gid": 0,
"group": "root",
"md5sum":"ded548de08fa7afda587162df935cdcd",
"mode": "0644",
"owner": "root",
"size": 1163,
"src":"/root/.ansible/tmp/ansible-tmp-1522724739.95-275544206529433/source",
"state": "file",
"uid": 0
}
修改权限
# ansible kafka -m shell -a 'chown kafka:elk/var/soft'
: Consider using file module withowner rather than running chown
kafka-node3 |SUCCESS | rc=0 >>
kafka-node5 |SUCCESS | rc=0 >>
kafka-node4 | SUCCESS| rc=0 >>
kafka-node2 |SUCCESS | rc=0 >>
kafka-node1 |SUCCESS | rc=0 >>
# ansible kafka -m shell -a 'chown kafka:elk /mnt/data* -R '
启动查看
# ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh start '
# ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh status'
如下报错:
$ cat zookeeper.out
2018-04-0311:19:53,751 - INFO http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerConfig@103] - Reading configuration from:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
2018-04-0311:19:53,760 - INFO http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerConfig@340] - Defaulting to majority quorums
2018-04-0311:19:53,763 - ERROR http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerMain@85] - Invalid config,exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:Error processing /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
atorg.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:123)
atorg.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
atorg.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
Caused by:java.lang.IllegalArgumentException: /mnt/data1/zookeeper/data/myid file is missing
atorg.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:350)
atorg.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:119)
... 2 more
添加对应的ID号到此文件:
ServerName
IP
MYID
kafka-node1
192.168.0.6
1
kafka-node2
192.168.0.7
2
kafka-node3
192.168.0.8
3
kafka-node4
192.168.0.9
4
kafka-node5
192.168.0.10
5
更新myid
ansible kafka-node1-m shell -u kafka -a 'echo 1 >/mnt/data1/zookeeper/data/myid'
ansible kafka-node2-m shell -u kafka -a 'echo 2 >/mnt/data1/zookeeper/data/myid'
ansible kafka-node3-m shell -u kafka -a 'echo 3 >/mnt/data1/zookeeper/data/myid'
ansible kafka-node4-m shell -u kafka -a 'echo 4 >/mnt/data1/zookeeper/data/myid'
ansible kafka-node5-m shell -u kafka -a 'echo 5 >/mnt/data1/zookeeper/data/myid'
重启验证:
一台leader其他均为follower即可。
# ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh restart '
# ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh status '
kafka-node5 |SUCCESS | rc=0 >>
Mode: leaderJMX enabled bydefault
Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
kafka-node4 |SUCCESS | rc=0 >>
Mode: followerJMX enabled bydefault
Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
kafka-node3 |SUCCESS | rc=0 >>
Mode: followerJMX enabled bydefault
Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
kafka-node2 |SUCCESS | rc=0 >>
Mode: followerJMX enabled bydefault
Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
kafka-node1 |SUCCESS | rc=0 >>
Mode: followerJMX enabled bydefault
Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
2.6. kafka
和zk同样的五台机器。
下载解压:
wget -O/var/soft/kafka_2.11-0.10.2.1.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/kafka_2.11-0.10.2.1.tar.gz
解压,修改配置文档:
以下标记部分配置每台不同
# cat server.properties |egrep -v "^$|^#"
broker.id=1
delete.topic.enable=true
host.name=kafka-node1
listeners=PLAINTEXT:/192.168.0.6/:9092
advertised.listeners=PLAINTEXT://192.168.0.6: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=/mnt/data1/kafka/data,/mnt/data2/kafka/data,/mnt/data3/kafka/data,/mnt/data4/kafka/data
num.partitions=3
num.recovery.threads.per.data.dir=1
log.flush.interval.messages=10000
log.flush.interval.ms=1000
log.retention.hours=72
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
min.insync.replicas=2
num.replica.fetchers=2
zookeeper.connect=192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181
zookeeper.connection.timeout.ms=6000
调整JVM参数,开启JMX监控功能。
# vim bin/kafka-server-start.sh
if ["x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx24G-Xms24G"
export JMX_PORT="9999"
同步配置到其他机器:记得修改上面×××部分配置。
# ansible kafka -m copy -a"src=/var/soft/kafka_2.11-0.10.2.1/config/server.propertiesdest=/var/soft/kafka_2.11-0.10.2.1/config/ owner=kafka group=elk"
# ansible kafka -m copy -a"src=/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.shdest=/var/soft/kafka_2.11-0.10.2.1/bin/ owner=kafka group=elk"
启动查看:
# ansible kafka -m shell -u kafka -a"/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh -daemon/var/soft/kafka_2.11-0.10.2.1/config/server.properties"
kafka-node3 |SUCCESS | rc=0 >>
kafka-node4 |SUCCESS | rc=0 >>
kafka-node5 |SUCCESS | rc=0 >>
kafka-node2 |SUCCESS | rc=0 >>
kafka-node1 |SUCCESS | rc=0 >>
进入一台kafka服务器,测试kafka是否可用。
创建topic
$ kafka-topics.sh-create–zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181-topic ELK.TEST -replication-factor 2 -partition 3
查看topic列表
kafka@kafka-node1var]kafka-topics.sh-zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181-list
ELK.TEST
创建productor
$ kafka-console-producer.sh --broker-list 192.168.0.6:9092,192.168.0.7:9092,192.168.0.8:9092,192.168.0.9:9092,192.168.0.10:9092--topic ELK.TEST
创建consumer
开另外一台机器开启consumer,并在productor 输入信息,看是否能够同步
$ kafka-console-consumer.sh --zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181--topic ELK.TEST
Using the ConsoleConsumerwith old consumer is deprecated and will be removed in a future majorrelease. Consider using the new consumer by passing instead of .
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaa
删除topic
kafka-topics.sh--delete --zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181--topic ELK.TEST
查看topic内容
kafka-console-consumer.sh--bootstrap-server 192.168.0.6:9092,192.168.0.7:9092,192.168.0.8:9092,192.168.0.9:9092,192.168.0.10:9092--topic ELK.TEST --from-beginning --max-messages 10000
查看消费情况
kafka-run-class.shkafka.tools.ConsumerOffsetChecker --group PH-SAFE --topic ELK.TEST--zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181
以上操作均无问题,那么kafka、ZK 搭建OK。恭喜恭喜。
2.7logstash
Kafka-----ES 的logstash 使用docker去运行。已经做好docker images。修改配置,运行就好。
主机列表:
SZC-L0093638
30.18.32.231
8核/32.0GB
LINUX
Logstash-1
SZC-L0093637
30.18.32.230
8核/32.0GB
LINUX
Logstash-2
运行命令:
docker run -d -it\
-h ELK-TEST \
--name ELK-TEST \
--restart=on-failure:2 \
--net=host \
-v /etc/
http://mirrors-ph.paic.com.cn/:5 ... pack_6.0.0:20171212bash
Bash 可以更换为启动命令。
logstash -w 1 -f/usr/local/logstash-6.0.0/config/ph-safe.conf
配置参考http://http://mirrors-ph.paic.com.cn//repo/elk/conf/
3.Docker环境搭建
云主机名称
内网IP
配置
操作系统
用户
安装组件
SZC-L0080585
30.18.32.54
8核/32.0GB
LINUX7.2
root
es-elk-1,zk-elk-1,kafka-elk-1,kabana-elk-1
SZC-L0080587
30.18.32.55
8核/32.0GB
LINUX7.2
root
es-elk-2,zk-elk-2,kafka-elk-2,kabana-elk-2
SZC-L0080583
30.18.32.56
8核/32.0GB
LINUX7.2
root
es-elk-3,zk-elk-3,kafka-elk-3
SZC-L0080586
30.18.32.58
8核/32.0GB
LINUX7.2
root
es-elk-4,zk-elk-4,kafka-elk-4
SZC-L0080584
30.18.32.59
8核/32.0GB
LINUX7.2
root
es-elk-5,zk-elk-5,kafka-elk-5
4.案例4.1. logstash获取应用日志。
后续更新
4.2. logstash获取Oracle数据:员工行为分析
4.3. Nginx+Lua 获取网页访问记录
附录Ⅰ配置列表
附录Ⅱ x-pack破解
x-pack 破解方法,亲测有效,按照步骤来就可以。
1.下载x-pack-6.0.0.zip 包
2.创建一个文件夹,解压压缩包。
elasticsearch]# #mkdir/x-pack
elasticsearch]# #cd/x-pack
elasticsearch]# #unzip../x-pack-6.0.0.zip
elasticsearch]# #cdelasticsearch
elasticsearch]# filex-pack-6.0.0.jar
x-pack-6.0.0.jar:Zip archive data, at least v1.0 to extract
elasticsearch]# mkdirx-pack-6.0.0
elasticsearch]#cdx-pack-6.0.0
x-pack-6.0.0]#unzip../x-pack-6.0.0.jar
4. 寻找license判定代码:LicenseVerifier.class。
x-pack-6.0.0]# find-name LicenseVerifier.class
./org/elasticsearch/license/LicenseVerifier.class
5. 找一个目录创建LicenseVerifier.java
#mkdir /tmp/test
#cd /tmp/test/
#vimLicenseVerifier.java #别人已经反编译成功,拿来用就可以。
packageorg.elasticsearch.license;
public class LicenseVerifier
{
public static boolean verifyLicense(finalLicense license, final byte[] encryptedPublicKeyData) {
return true;
}
public static boolean verifyLicense(finalLicense license) {
return true;
}
}
6. 编译。我的安装路径为/usr/local/elasticsearch-6.0.0
javac -cp"/usr/local/elasticsearch-6.0.0/lib/elasticsearch-6.0.0.jar:/usr/local/elasticsearch-6.0.0/lib/lucene-core-7.0.1.jar:/usr/local/elasticsearch-6.0.0/plugins/x-pack/x-pack-6.0.0.jar"LicenseVerifier.java
7. 更新代码包并替换。
#rm /usr/local/elasticsearch-6.0.0/plugins/x-pack/x-pack-6.0.0.jar
#rm /x-pack/elasticsearch/x-pack-6.0.0.jar
#rm /x-pack/elasticsearch/x-pack-6.0.0/org/elasticsearch/license/LicenseVerifier.class
#cp /tmp/test/LicenseVerifier.class/x-pack-6.0.0/x-pack-6.0.0/org/elasticsearch/license/
8. 重新打包压缩
#cd /x-pack/x-pack-6.0.0/
#jar -cvf x-pack-6.6.0.jar./*
9. 覆盖确认:查看修改时间是否OK。
#cp x-pack-6.6.0.jar/usr/local/elasticserver-6.0.0/plugins/x-pack/x-pack-6.6.0.jar
#ls –al/usr/local/elasticserver-6.0.0/plugins/x-pack/x-pack-6.6.0.jar
10.查看_license
$ curl -uelastic:******* http://127.0.0.1:9200/_xpack/license
{
"license" : {
"status" : "active",
"uid" :"b7d9fe72-926a-453d-bba4-1932b7c2d6a8",
"type" : "trial",
"issue_date" :"2018-03-29T03:06:40.711Z",
"issue_date_in_millis" :1522292800711,
"expiry_date" : "2018-04-28T03:06:40.711Z",
"expiry_date_in_millis" : 1524884800711,
"max_nodes" : 1000,
"issued_to" :"ph-elk",
"issuer" :"elasticsearch",
"start_date_in_millis" : -1
}
}
10.重启elastic和kibana。
11.官网申请license
访问网站:https://license.elastic.co/registration
{"license":{"uid":"c127f207-c8f6-4d71-8b89-21f350f7d284","type":"platinum","issue_date_in_millis":1514160000000,"expiry_date_in_millis":2524579200999,"max_nodes":100,"issued_to":"MaoshuRan (Pingan)","issuer":"WebForm","signature":"AAAAAwAAAA3nC1a1H/RvS9soHXxIAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQAtob2KBeFwY2nMY7RkxDKEoskFqTtTvvVCPCJAFDsRsz+OdlLfbnAQF2hj32nGTZ/HTDbCa6GXIEkKce6rxMC92JtZ37Fh96uenccS+OdbnHeoDnnLcRmCR7k031hVgcGyKHHv5W1+VhSw54IY8vPpuaz2e7Ggul/9V6RwzxNXeWEdIAKabTUp2Gg48UZ+WKUKM2FuoWHRdszMFxu0W+oU2aJCnHkX87AjL3ed94sqZBW0GdiU1dMJI3HmMoWdYy3gaPkq/xI73GVM0A/kE0p+Q+cmB9PSANIV/YS47ygD2VjmXOptjkaWmvbAopNCqxE4yB4TdlcaH7G/doPHc+zi","start_date_in_millis":1514160000000}}
11.修改license字段:
"type":"platinum"
"expiry_date_in_millis":2524579200999
12.更新license
#curl -XPUT -uelastic:changeme 'http://127.0.0.1:9200/_xpack/license?acknowledge=true' -H"Content-Type: application/json" -d @license.json
{"acknowledged":true,"license_status":"invalid"}
13.确认是否OK
#curl -XPUT -u elastic:******http://127.0.0.1:9200/_xpack/license?v
{
"license": {
"status": "active",
"uid":"c127f207-c8f6-4d71-8b89-21f350f7d284",
"type": "platinum",
"issue_date": "2017-12-25T00:00:00.000Z",
"issue_date_in_millis":1514160000000,
"expiry_date": "2049-12-31T16:00:00.999Z",
"expiry_date_in_millis": 2524579200999,
"max_nodes": 100,
"issued_to": "Maoshu Ran(Pingan)",
"issuer": "Web Form",
"start_date_in_millis":1514160000000
}
}
备注: 破解步骤前期1----9 已经完成,生产的jar包位置:
http://http://mirrors-ph.paic.com.cn//repo/elk/conf/x-pack-6.0.0.jar
copy到elasticsearch,重启服务,更新license即可
页:
[1]