设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] 日志分析平台

[复制链接]

尚未签到

发表于 2019-1-28 12:36:34 | 显示全部楼层 |阅读模式
  目录
  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三个开源工具组成。
  l  Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  l  Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
  l  kibana 也是一个开源和免费的工具,他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 4567  elk
  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
  [root@es-node01  ~]# groupadd elk
  [root@es-node01  ~]# useradd elastic –b /wls/ -G elk
  [root@es-node01  ~]# echo ****** |passwd elastic --stdin
  更改用户 elastic  的密码  。
  passwd: 所有的身份验证令牌已经成功更新。
  重复以上动作,在所有主机添加用户。
  2.    切换用户。
  [root@es-node01  ~]# su - elastic
  3.    JDK安装
  下载并上传jdk包至服务器。因为数据包过大,请使用跳板机上传。此处省略过程。
  [root@es-node01  ~]# 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路径
  [root@es-node01  ~]$ cd /var/soft
  [root@es-node01  ~]$ tar –zxvf jdk1.8.0_131.tar.gz
  [root@es-node01  ~]$ vim ~/.bash_profile                    #修改PATH路径,并设置开机运行
  JAVA_HOME=/wls/elk/jdk1.8.0_131
  PATH=$JAVA_HOME/binPATH
  [root@es-node01  ~]$ source ~/.bash_profile
  [root@es-node01  ~]$ java –version                                #确认Java版本是否可用
  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)
  [root@es-node01  ~]$ which java                                             #确认是否为Java 路径
  /wls/elk/jdk1.8.0_131/bin/java
  [root@es-node01  ~]$
  2.3. ElasticSearch
  ElasticSearch只依赖JAVA,直接解压,修改配置就好。
  ES有很多可用插件,但是离线真的很难安装,直接放弃,对于我们这种专业的运维,直接使用curl操作。
  1.    上传解压
  [root@es-node01  ~]$ wget -O /var/soft/elasticsearch-6.0.0.tar.gz  http://http://mirrors-ph.paic.com.cn//repo/elk/elasticsearch-6.0.0.tar.gz
  [root@es-node01  ~]$ cd /var/soft
  [root@es-node01  ~]$ tar -zxvf tools/elasticsearch-6.0.0.tar.gz
  2.    修改配置
  可以参考配置文件:
  http://http://mirrors-ph.paic.com.cn//repo/elk/conf/elasticsearch.yml
  查看系统配置,存储数据地址:
  创建文件位置
  [root@es-node01  soft]#df -Th
  /dev/mapper/VolGroup1-LVdata1  xfs       500G   33M   500G    1% /mnt/data2
  /dev/mapper/VolGroup2-LVdata2  xfs       500G   33M   500G    1% /mnt/data1
  [root@es-node01  soft]#mkdir /mnt/data{1..2}/elasticsearch/data –p
  [root@es-node01  soft]#mkdir /mnt/data1/elasticsearch/logs –p
  [root@es-node01  soft]#chown elastic:elk /mnt/data* -R
  修改配置:
  [root@es-node01  soft]#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 配置根据机器配置修改:
  [root@es-node01  soft]#cat config/jvm.options
  -Xms28g
  -Xmx28g
  3.    启动验证
  [root@es-node01  soft]# bin/elasticsearch
  [2018-03-29T11:02:42,296][INFO  ][o.e.b.BootstrapChecks    ] [es-node01]  bound or publishing to a non-loopback or non-link-local address, enforcing  bootstrap checks
  ERROR: [1]  bootstrap checks failed
  [1]: max virtual  memory areas vm.max_map_count  [65530] is too low, increase to at least [262144]
  此报错使用root修改vm.max_map_count
  [root@es-node01  soft]# sysctl -w vm.max_map_count=20000000
  vm.max_map_count  = 20000000
  再次启动
  [root@es-node01  soft]# bin/elasticsearch –d
  [2018-03-29T11:06:32,320][INFO  ][o.e.n.Node               ] [es-node01]  initializing ...
  [2018-03-29T11:06:32,390][INFO  ][o.e.e.NodeEnvironment    ] [es-node01]  using [2] data paths, mounts [[/mnt/data1 (/dev/mapper/VolGroup2-LVdata2),  /mnt/data2 (/dev/mapper/VolGroup1-LVdata1)]], net usable_space [999.4gb], net  total_space [999.5gb], types [xfs]
  [2018-03-29T11:06:32,391][INFO  ][o.e.e.NodeEnvironment    ] [es-node01]  heap size [27.9gb], compressed ordinary object pointers [true]
  [2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  node name [es-node01], node ID [6o6WyURiRdeargHwqbGWag]
  [2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  version[6.0.0], pid[48441], build[8f0685b/2017-11-10T18:41:22.859Z],  OS[Linux/3.10.0-693.17.1.el7.x86_64/amd64], JVM[Oracle Corporation/Java  HotSpot(TM) 64-Bit Server VM/1.8.0_131/25.131-b11]
  [2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  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]
  [2018-03-29T11:06:33,353][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [aggs-matrix-stats]
  [2018-03-29T11:06:33,353][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [analysis-common]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [ingest-common]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-expression]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-mustache]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-painless]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [parent-join]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [percolator]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [reindex]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [repository-url]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [transport-netty4]
  [2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [tribe]
  [2018-03-29T11:06:33,355][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded plugin [x-pack]
  验证:
  [root@kafka-node5  ~]# 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
  [root@es-node01  soft]# wget http://http://mirrors-ph.paic.com.cn//repo/elk/x-pack-6.0.0.zip
  [root@es-node01  soft]# bin/elasticsearch-plugin install  file:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
  -> Downloading  file:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
  [=================================================]  100%聽聽
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @     WARNING: plugin requires additional  permissions     @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  *  java.io.FilePermission \\.\pipe\* read,write
  *  java.lang.RuntimePermission  accessClassInPackage.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
  See  http://docs.oracle.com/javase/8/ ... ty/permissions.html
  for descriptions  of what these permissions allow and the associated risks.

  Continue with  installation? [y/N]y
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @        WARNING: plugin forks a native  controller        @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  This plugin  launches a native controller that is not subject to the Java
  security manager  nor to system call filters.

  Continue with  installation? [y/N]y
  5.    生成认证秘钥
  [elastic@es-node01  x-pack]$ bin/x-pack/certgen
  Please enter the  desired output file [certificate-bundle.zip]: ph-elk
  Enter instance  name: es-node01
  Enter name for  directories and files [es-node01]:
  Enter IP  Addresses for instance (comma-separated if more than one) []: 192.168.0.1
  6.    解压秘钥
  [elastic@es-node01  config]$ mkdir certs
  [elastic@es-node01  config]$ cd certs/
  [elastic@es-node01  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.    密码初始化
  [root@es-node01  soft]#cd bin/x-pack
  [elastic@es-node01 x-pack]$ ./setup-passwords interactive
  Initiating the  setup of reserved user elastic,kibana,logstash_system passwords.
  You will be  prompted to enter passwords as the process progresses.
  Please confirm  that you would like to continue [y/N]y
  Enter password  for [elastic]:
  Reenter password  for [elastic]:
  Enter password  for [kibana]:
  Reenter password  for [kibana]:
  Enter password  for [logstash_system]:
  Reenter password  for [logstash_system]:
  Changed password  for user [kibana]
  Changed password  for user [logstash_system]
  Changed password  for user [elastic]
  [elastic@es-node01  x-pack]$
  重启验证。恭喜恭喜
  [elastic@es-node01  x-pack]$ curl -u elastic http://127.0.0.1:9200?pretty
  Enter host  password 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, for  Search"
  }
  2.4. Kibana
  Kibana 安装依赖java,下载安装即可。
  [root@es-node01  soft]# 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-29  13: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) [application/octet-stream]
  正在保存至: “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”

  100%[================================================================================================================================>]  62,681,301  36.1MB/s 用时 1.7s

  2018-03-29  13:13:44 (36.1 MB/s) - 已保存 “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”  [62681301/62681301])

  [root@es-node01  soft]#
  解压
  [root@es-node01  soft]# cd /var/soft/
  [root@es-node01  soft]# tar zxv kibana-6.0.0-linux-x86_64.tar.gz
  修改配置
  [root@es-node01  soft]# 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"
  启动验证
  [root@es-node01  soft]# 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 -m  shell -a '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'
  ansible kafka -m  shell -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.gz  http://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 -m  shell -a 'cd /var/soft; tar xf zookeeper-3.4.6.tar.gz'
  ansible kafka -m  shell -a 'cd /var/soft; tar zxf kafka_2.11-0.10.2.1.tar.gz'
  修改配置:
  [root@es-node01  conf]# 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统一分发(方便)。
  [root@es-node01  conf]# ansible kafka -m copy -a  "src=/var/soft/zookeeper-3.4.6/conf/zoo.cfg  dest=/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
  }
  修改权限
  [root@es-node01  conf]# ansible kafka -m shell -a 'chown kafka:elk  /var/soft'
  [WARNING]: Consider using file module with  owner 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 >>
  [root@es-node01  conf]# ansible kafka -m shell -a 'chown kafka:elk /mnt/data* -R '
  启动查看
  [root@es-node01  conf]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh start '
  [root@es-node01  conf]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh status'
  如下报错:
  [kafka@kafka-node1  ~]$ cat zookeeper.out
  2018-04-03  11:19:53,751 [myid:] - INFO   [mainuorumPeerConfig@103] - Reading configuration from:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  2018-04-03  11:19:53,760 [myid:] - INFO   [mainuorumPeerConfig@340] - Defaulting to majority quorums
  2018-04-03  11:19:53,763 [myid:] - ERROR [mainuorumPeerMain@85] - Invalid config,  exiting abnormally
  org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:  Error processing /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  at  org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:123)
  at  org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
  at  org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
  Caused by:  java.lang.IllegalArgumentException: /mnt/data1/zookeeper/data/myid file is missing
  at  org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:350)
  at  org.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即可。
  [root@es-node01  ~]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh restart '
  [root@es-node01  ~]# 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 by  default
  Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node4 |  SUCCESS | rc=0 >>
  Mode: followerJMX enabled by  default
  Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node3 |  SUCCESS | rc=0 >>
  Mode: followerJMX enabled by  default
  Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node2 |  SUCCESS | rc=0 >>
  Mode: followerJMX enabled by  default
  Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node1 |  SUCCESS | rc=0 >>
  Mode: followerJMX enabled by  default
  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
  
  解压,修改配置文档:
  以下标记部分配置每台不同
  [root@es-node01  config]# 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监控功能。
  [root@es-node01  config]# vim bin/kafka-server-start.sh
  if [  "x$KAFKA_HEAP_OPTS" = "x" ]; then
  export KAFKA_HEAP_OPTS="-Xmx24G  -Xms24G"
  export JMX_PORT="9999"
  
  同步配置到其他机器:记得修改上面×××部分配置。
  [root@kafka-node1  bin]# ansible kafka -m copy -a  "src=/var/soft/kafka_2.11-0.10.2.1/config/server.properties  dest=/var/soft/kafka_2.11-0.10.2.1/config/ owner=kafka group=elk"
  [root@kafka-node1  bin]# ansible kafka -m copy -a  "src=/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh  dest=/var/soft/kafka_2.11-0.10.2.1/bin/ owner=kafka group=elk"
  
启动查看:
  [root@es-node01  config]# 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@kafka-node1  var]$ 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-node1  var]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@kafka-node1  var]$ 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@kafka-node5  ~]$ 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 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].
  aaaaaaaaaaaaaaaaaaa  aaaaaaaaaaaaa 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.sh  kafka.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:20171212  bash

  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]# #cd  elasticsearch

  elasticsearch]# file  x-pack-6.0.0.jar
  x-pack-6.0.0.jar:  Zip archive data, at least v1.0 to extract
  elasticsearch]# mkdir  x-pack-6.0.0
  elasticsearch]#cd  x-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/
  #vim  LicenseVerifier.java    #别人已经反编译成功,拿来用就可以。
  package  org.elasticsearch.license;
  public class LicenseVerifier
  {
  public static boolean verifyLicense(final  License license, final byte[] encryptedPublicKeyData) {
  return true;
  }
  public static boolean verifyLicense(final  License 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 -u  elastic:******* 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":"Maoshu  Ran (Pingan)","issuer":"Web  Form","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 -u  elastic: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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668713-1-1.html 上篇帖子: ELK 分析 nginx access 日志 下篇帖子: 日志分析ELK平台搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表