设为首页 收藏本站
查看: 6183|回复: 1

[经验分享] flume+es+kibana日志系统

[复制链接]

尚未签到

发表于 2015-11-27 20:07:38 | 显示全部楼层 |阅读模式
  上个公司做了个日志系统,其实之间断断续续搞了三套方案,一套就是前边说的hadoop方案,网上也有但是不全,自己搞了下发现太庞大不适合小型项目,这次搞了flume+ES+kibana方案,感觉非常不错哦,es的存储性能很高啊,kibana其实后期可以自己改的也非常不错。自己写了份文档,在这给大家分享下。(其实后来又搞了个logstash+redis的方案也是很不错,解决了延迟等问题,因为他们都是自己家的产品吗,所以兼容性非常好)
  ==============================我是华丽的分割线=========================================================================
  
  目录
  1.             概述... 3
  2.应用架构... 3
  3.flume搭建... 3
  3.1创建flume 账户... 3
  3.2配置环境变量... 3
  3.3 Hadoop连接配置(暂时不用)... 4
  3.4修改config配置文件... 4
  3.4.1配置配置文件(此处为以hadoop作为存储的配置文件)... 5
  3.4.2此处是以es作为存储的配置文件... 6
  3.5修改源码... 8
  3.6启动命令... 8
  注意修改文件夹权限...8
  4.Elasticsearch 搭建... 9
  4.1创建es账户... 9
  4.2修改配置文件... 9
  4.3集群启动... 9
  4.4Plugins. 9
  4.4.1Bigdesk插件... 10
  4.4.2head插件... 13
  4.4.3jdbc插件... 13
  4.5创建索引... 17
  4.6创建模版... 17
  5.Kibana集群搭建... 18
  5.1Kibana关键特性... 18
  5.2开始... 19
  5.3       生产环境使用 Kibana 的时候... 21
  6.Hadoop集群(暂时不用)... 23
  6.1建立用户haddop. 23
  6.2配置环境变量... 23
  6.3准备ssh. 23
  6.4修改hadoop配置文件... 24
  6.5格式化文件系统... 28
  6.6启动、停止服务... 34
  6.7创建HDFS目录... 35
  6.8验证... 35
  7.用sqoop同步到mysql(暂时不用)... 38
  8.日志系统用法说明...38
  1 Discover 标签页... 38
  2.     Visualize 标签页... 43
  3.     Dashboard标签页... 45
  4.     配置... 50
  
  
1.    概述
  为了项目做日志监控,日至查询分析
  目前SIT IP
  http://10.16.0.151:9200/_plugin/head/ 监控ES存储健康(相当于NOSQL数据库)
  http://10.16.0.151:9200/_plugin/bigdesk 监控ES集群性能
  http://10.16.0.151:5601/ 日志查看页面
2. 理念
  采用了flume elasticsearch kibana 组合
  机器配置:
  10.16.0.150(es)
  10.16.0.151(es)
  10.16.0.152(es)
  10.16.10.40(flume)
  
3. Elasticsearch 搭建
  ES作为数据存储仓库所以先搭建ES集群
3.1 创建es账户
  useradd es
  passwd es
  下载压缩包elasticsearch-1.5.0
  
  在linux系统上,elasticsearch默认使用hybrid mmapfs / niofs来存储索引文件,因此操作系统主要会通过mmap来限制存储的空间,因此如果存储空间满了,那么会抛出异常,我们可以使用如下命令来更改设置
  ?
  1
  sysctl -w vm.max_map_count=262144
  
  
3.2 修改配置文件
  解压修改conf下的配置文件elasticsearch.yml
  
  将node.name的值设置为“ebbc-node1”,表示当前这个es服务节点名字为ebbc-node1。
  修改cluster.name的值为ebbc
  
3.3 集群启动   
  启动ES。进入ES安装目录,执行命令:bin/elasticsearch -d,然后在浏览器输入http://ip:9200/,查看页面信息,是否正常启动。status=200表示正常启动了,还有一些es的版本信息,name为配置文件中node.name的值。
  
在另外一台机器上,安装同样的步骤安装ES,因为至少2台服务才算集群嘛!注意,在配置时,将node.name的值设置为ebbc-node2,总之必须和之前配置值不同。

两台es服务同时起来,因为配置文件中均默认cluster.name=ebbc,所以这两台机器自动构建成一个集群,集群名字为ebbc。

3.4 Plugins
3.4.1 Bigdesk插件
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。项目git地址: https://github.com/lukas-vlcek/bigdesk。和head一样,它也是个独立的网页程序,使用方式和head一样。

  插件安装运行:
  方法1
  1.bin/plugin -install lukas-vlcek/bigdesk
  2.运行es
  3.打开http://localhost:9200/_plugin/bigdesk/
  当然,也可以直接下载源码运行index.html
  方法2
  1.https://github.com/lukas-vlcek/bigdesk下载zip解压
  2.建立elasticsearch-1.0.0\plugins\bigdesk\_site文件
  3.将解压后的bigdesk-master文件夹下的文件copy到_site
  4.运行es
  5.打开http://localhost:9200/_plugin/bigdesk/
  
  同样是输入ip地址和端口后连接,界面如下。加星的表示主节点。
  下面介绍下各个图表。
  
  系统监控
  这里包含系统方面的一些状态,左起分别为:cpu,内存,交换区和平均负载的情况
  jvm
  显示jvm的一些状态,左起分别为:jvm heap内存使用情况,蓝色的为已使用内存;非heap使用内存;线程数;gc情况(次数和时间);
  进程:
  下面四张图主要显示es的进程对系统资源的使用情况,左起分别为:进程打开文件数,内存使用情况,cpu时间和进程的cpu使用率
  ps
  内存使用情况中的
  Totalvirtual指linux下虚拟内存,它包括virtual memory map中的所有数据量之和。包括:程序类+程序数据+jar包空间+jre占用空间等。
  residentmemory指程序实际占用的物理内存。
  
  通讯:
  这里可以查看tcp和http链接的一些数据。
  索引:
  这里可以查看索引数据和搜索的一些情况。
  左上起:每秒索引请求,搜索时间,每秒取数据请求,取数据时间。
  左下起:缓存大小,缓存失效个数,每秒索引请求,索引时间。
  文件系统:
  显示硬盘的读写情况
  
3.4.2 head插件
elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es。

安装命令:bin/plugin -install mobz/elasticsearch-head

安装完成后plugins目录下会有head的文件夹。

进入http://localhost:9200/_plugin/head/ 如下图


3.4.3jdbc插件
  如果需要从数据库同步数据,则需要安装此插件
  Installation
./bin/plugin--install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.5.0.0/elasticsearch-river-jdbc-1.5.0.0.zip

  
  最新版本请查看当前githubhttps://github.com/jprante/elasticsearch-jdbc
  
  Documentation
  
  Twoflavors: river or feeder
The plugin can operate as a river in "pull mode" or as a feederin "push mode". In feeder mode, the plugin runs in a separate JVM andcan connect to a remote Elasticsearch cluster.


  River or feeder?
  The plugin comes in two flavors, river or feeder. Hereare the differences. Depending on your requirements, it is up to you to make areasonable choice.
  Note, the JDBC river code wraps the feeder code, thereis no reinvention of anything. Main difference is the different handling bystarting/stopping the process by a separate JVM in the feeder flavor.
River

Feeder

standard method of Elasticsearch to connect to external sources and pull data

  method to connect to external sources for pushing data into Elasticsearch
  multiple river instances, many river types
  no feeder types, feeder instances are separate JVMs
  based on an internal index_river to keep state
  based on a feeder document in the Elasticsearch index for maintaining state
  does not scale, single local node only
  scalable, not limited to single node, can connect to local or remote clusters
  automatic failover and restart after cluster recovery
  no failover, no restart
  hard to supervise single or multi runs and interruptions
  command line control of feeds, error exit code 1, crontab control
  no standard method of viewing river activity from within Elasticsearch
  feed activity can be monitored by examining separate JVM
  about to be deprecated by Elasticsearch core team
  Feeder API provided by xbib, using advanced features supported by xbib libraries only. Part of upcoming "gatherer" API to support coordinated data harvesting by multiple ES nodes
  
  
  
4.4.3.1 JDBC-ORACLE
  拷入OJDBC的jar包
  
  创建索引需要
  curl –XPUT localhost:9200/ ebbc-operate
  创建mapping
curl -XPUT'http://localhost:9200/ebbcoperate/operate/_mapping' -d '

{

   "operate": {

        "_id" : {

           "path" : "ID"

       },

    "_ttl" : { "enabled" : true,

                "default" :"1d"

       },

       "properties": {

                       

           "ID": {

                "type":"string",

                "store":"yes"

           }

       }

    }

}'

  
  创建plugin 连接oracle
  一定要注意转义字符
curl -XPUT 'localhost:9200/_river/my_oracle_river/_meta'-d '{

    "type" : "jdbc",

   

    "jdbc" : {

    "threadpoolsize" : 1,

        "url" : "jdbc:oracle:thin:@//10.16.10.54:1521/ebbc",

        "user" :"ebbc",

        "password" :"ebbc",

        "sql" :"select  *  from T_GNR_OPERATE_LIST  ORDER BY OPER_TIMEDESC",

        "index" :"ebbcoperate",

        "type" :"operate",

        "schedule" :"0  0/30 * ? * *"

     

    }

}'

  
  查询
================search===============

curl localhost:9200/ebbc-operate?_search

====================delete============

curl -XDELETE localhost:9200/_river/my_oracle_river

  
3.5 创建索引
  所以就相当于我们平时的数据库,类型就相当于我们的表,要想在kibana展示,必须要创建
  一个索引,而我们在flume里面已经配置了自动创建的规则,所以这里只是 展示几个命令
  
  我们可以获得节集群中的节点列表:
curl 'localhost:9200/_cat/nodes?v'
  
  要检查集群健康,我们将使用_cat API。需要事先记住的是,我们的节点HTTP的端口是9200:
curl 'localhost:9200/_cat/health?v'
  
  让我们看一下我们的索引:
curl 'localhost:9200/_cat/indices?v'
  
  现在让我们创建一个叫做“customer”的索引,然后再列出所有的索引:
curl -XPUT 'localhost:9200/customer?pretty'
curl 'localhost:9200/_cat/indices?v'
  
3.6 创建模版
  为了方便每次不重新书写_mapping,所以我觉得创建一个模版,模版对于懒人有着很直接的效果
  下面我们创建一个简单模版
  curl -XPUT localhost:9200/_template/ebbc-template-d '
  {
  "template": "ebbc-*",
  "mappings": {
  "*": {
  "_source": {
  "enabled": false
  },
  "_ttl": {
  "enabled": true,
  "default":"3d"
  },
  "properties": {
  "body": {
  "type":"string"
  },
  "date": {
  "type":"date",
  "format":"dateOptionalTime"
  }
  }
  }
  }
  }’
  当然,我们也可以给他配置在config下,可以参考官方文档
  
  附录查询 ,删除命令
  
  curl-XDELETE localhost:9200/_template/template_1
  
  
  curl-XGET localhost:9200/_template/ebbc-template?pretty
  
  这下,每次自动创建index时就会根据我的要求来咯
  
  
  4.flume搭建
4.1 创建flume 账户
  [hadoop@ebdev10~]$ su -
  Password:
  [iyunv@ebdev10~]# useradd flume
  [iyunv@ebdev10~]# passwd flume
  Changingpassword for user flume.
  Newpassword:
  BADPASSWORD: it is too short
  BADPASSWORD: is too simple
  Retypenew password:
  passwd:all authentication tokens updated successfully.
  [iyunv@ebdev10~]#
  
  
  上传flume压缩包 ,版本apache-flume-1.5.0.1-bin.tar.gz
  解压tar -zxvf apache-flume-1.5.0.1-bin.tar.gz
4.2 配置环境变量
  
  简单配置
  ################FLUME_CONF############
  export FLUME_HOME=/home/flume/apache-flume-1.5.0.1
  export FLUME_CONF_DIR=$FLUME_HOME/conf
  export PATH=$PATH:$FLUME_HOME/bin
  完整配置
  ################JAVA_HOME#############
  export JAVA_HOME=/usr/java/jdk1.7.0_71
  exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
  ################HADOOP_HOME###########
  export HADOOP_HOME=/home/hadoop/hadoop-2.5.1
  ################FLUME_CONF############
  exportFLUME_HOME=/home/flume/apache-flume-1.5.0.1
  exportFLUME_CONF_DIR=$FLUME_HOME/conf
  ################ant###################
  export ANT_HOME=/usr/apache-ant-1.9.4
  export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$ANT_HOME/bin:$FLUME_HOME/bin
  ###########Alias for hadoop###########
  alias hdfs='hadoop fs'
4.3  Hadoop连接配置(暂时不用
  =============================如果需要连接hadoop需要以下配置==================
  注意如果本机器没有配置hadoop需要拷贝一些jar
  
  若将采集的数据上传到hdfs中 该机器没有安装hadoop需要将一下jar拷贝过来
  
  将hadoop 的/share/hadoop/common/hadoop-common-2.4.1.jar拷贝到flume的lib下
  将hadoop 的/share/hadoop/common/lib/commons-configuration-1.6.jar拷贝到flume的lib下
  将hadoop 的/share/hadoop/common/lib/hadoop-auth-2.4.1.jar拷贝到flume的lib下
  将hadoop 的/share/hadoop/hdfs/hadoop-hdfs-2.4.1.jar拷贝到flume的lib下
  将hadoop 的/etc/core-site.xml拷贝到flume的conf下
  将hadoop 的/etc/hdfs-site.xml拷贝到flume的conf下
  
  =============================如果需要连接hadoop需要以上配置==================
  
4.4 修改config配置文件
  
  mv flume-env.sh.template flume-env.sh
  vi flume-env.sh
  修改JAVA_HOME
  JAVA_HOME=/usr/java/jdk1.7.0_71
  JAVA_OPTS="-Xms512m –Xmx1024m-Dcom.sun.management.jmxremote"
  
  
  
  mv flume-conf.properties.templateflume-master.conf
  vi flume-master.conf
  注意:要想抓取日志需要修改appsvr用户权限chmod o+rx appsvr
        拷贝的话需要给flume启动程序附权限chmod u+x flume-ng
  
4.4.1配置配置文件(此处为以hadoop作为存储的配置文件)
  # Finally, now that we've defined all ofour components, tell
  # agent1 which ones we want to activate.
  agent1.channels = ch1
  agent1.sources = avro-source1
  agent1.sinks = sink1
  
  # Define a memory channel called ch1 onagent1
  agent1.channels.ch1.type = memory
  agent1.channels.ch1.capacity = 100000
  agent1.channels.ch1.transactionCapacity =100000
  agent1.channels.ch1.keep-alive = 30
  
  # Define an Avro source called avro-source1on agent1 and tell it
  # to bind to 0.0.0.0:41414. Connect it tochannel ch1.
  #agent1.sources.avro-source1.channels = ch1
  #agent1.sources.avro-source1.type = avro
  #agent1.sources.avro-source1.bind = 0.0.0.0
  #agent1.sources.avro-source1.port = 41414
  #agent1.sources.avro-source1.threads = 5
  
  #define source monitor a file
  agent1.sources.avro-source1.type = exec
  agent1.sources.avro-source1.shell =/bin/bash -c
  agent1.sources.avro-source1.command =tail  -F /home/flume/testData/test.log
  agent1.sources.avro-source1.channels = ch1
  agent1.sources.avro-source1.threads = 5
  
  # Define a logger sink that simply logs allevents it receives
  # and connect it to the other end of thesame channel.
  agent1.sinks.sink1.channel = ch1
  agent1.sinks.sink1.type = hdfs
  agent1.sinks.sink1.hdfs.minBlockReplicas=1  
  agent1.sinks.sink1.hdfs.useLocalTimeStamp=true
  agent1.sinks.sink1.hdfs.path =hdfs://10.16.0.151:9000/home/hadoop/pactera/%y-%m-%d
  agent1.sinks.sink1.hdfs.writeFormat = Text
  agent1.sinks.sink1.hdfs.fileType =DataStream
  agent1.sinks.sink1.hdfs.filePrefix = ebc_
  agent1.sinks.sink1.hdfs.idleTimeout  = 25
  agent1.sinks.sink1.hdfs.callTimeout  = 50
  agent1.sinks.sink1.hdfs.round  = true
  agent1.sinks.sink1.hdfs.rollCount = 10000
  agent1.sinks.sink1.hdfs.rollSize = 10240000
  agent1.sinks.sink1.hdfs.rollInterval=15
  agent1.sinks.sink1.hdfs.rollTimerPoolSize=20
  
4.4.2此处是以es作为存储的配置文件
  # Finally, now that we've defined all ofour components, tell
  # agent1 which ones we want to activate.
  agent1.channels = ch1 ch2
  agent1.sources = source1 source2
  agent1.sinks = sink1 sink2
  
  # Define a memory channel called ch1 onagent1
  agent1.channels.ch1.type = memory
  agent1.channels.ch1.capacity = 100000
  agent1.channels.ch1.transactionCapacity =100000
  agent1.channels.ch1.keep-alive = 30
  
  
  
  # Define an Avro source called source1 onagent1 and tell it
  # to bind to 0.0.0.0:41414. Connect it tochannel ch1.
  #agent1.sources.source1.channels = ch1
  #agent1.sources.source1.type = avro
  #agent1.sources.source1.bind = 0.0.0.0
  #agent1.sources.source1.port = 41414
  #agent1.sources.source1.threads = 5
  
  #define source monitor a file
  agent1.sources.source1.type = exec
  agent1.sources.source1.shell = /bin/bash -c
  agent1.sources.source1.command = tail  -F /home/appsvr/logs/ebc-dao-service/ebc-dao-serviceAll.log
  agent1.sources.source1.channels = ch1
  agent1.sources.source1.threads = 5
  
  # Define a logger sink that simply logs allevents it receives
  # and connect it to the other end of thesame channel.
  #agent1.sinks.sink1.channel = ch1
  #agent1.sinks.sink1.type = hdfs
  #agent1.sinks.sink1.hdfs.minBlockReplicas=1  
  #agent1.sinks.sink1.hdfs.useLocalTimeStamp=true
  #agent1.sinks.sink1.hdfs.path =hdfs://10.16.0.151:9000/home/hadoop/pactera/%y-%m-%d
  #agent1.sinks.sink1.hdfs.writeFormat = Text
  #agent1.sinks.sink1.hdfs.fileType =DataStream
  #agent1.sinks.sink1.hdfs.filePrefix = ebc_
  #agent1.sinks.sink1.hdfs.idleTimeout  = 25
  #agent1.sinks.sink1.hdfs.callTimeout  = 50
  #agent1.sinks.sink1.hdfs.round  = true
  #agent1.sinks.sink1.hdfs.rollCount = 10000
  #agent1.sinks.sink1.hdfs.rollSize =10240000
  #agent1.sinks.sink1.hdfs.rollInterval=15
  
  #this is elasticsearch sink
  agent1.sinks.sink1.type = elasticsearch
  agent1.sinks.sink1.hostNames =10.16.0.151:9300,10.16.0.150:9300,10.16.0.151:9300
  agent1.sinks.sink1.indexName = ebbc-dao
  agent1.sinks.sink1.indexType = logs
  agent1.sinks.sink1.clusterName = ebbc
  agent1.sinks.sink1.batchSize = 2000
  agent1.sinks.sink1.ttl = 5d
  agent1.sinks.sink1.serializer =org.apache.flume.sink.elasticsearch.ElasticSearchDynamicSerializer
  agent1.sinks.sink1.channel = ch1
  
  
  ##########################################ebc-gateway-client-host#####################################################
  # Define a memory channel called ch1 onagent1
  agent1.channels.ch2.type = memory
  agent1.channels.ch2.capacity = 100000
  agent1.channels.ch2.transactionCapacity =100000
  agent1.channels.ch2.keep-alive = 30
  
  
  #define source monitor a file
  agent1.sources.source2.type = exec
  agent1.sources.source2.shell = /bin/bash -c
  agent1.sources.source2.command = tail  -F/home/appsvr/logs/ebc-gateway-client-host/ebc-gateway-client-hostAll.log
  agent1.sources.source2.channels = ch2
  agent1.sources.source2.threads = 5
  
  
  #this is elasticsearch sink
  agent1.sinks.sink2.type = elasticsearch
  agent1.sinks.sink2.hostNames =10.16.0.151:9300,10.16.0.150:9300,10.16.0.151:9300
  agent1.sinks.sink2.indexName =ebc-gateway-client-host
  agent1.sinks.sink2.indexType = logs
  agent1.sinks.sink2.clusterName = ebbc
  agent1.sinks.sink2.batchSize = 2000
  agent1.sinks.sink2.ttl = 5d
  agent1.sinks.sink2.serializer =org.apache.flume.sink.elasticsearch.ElasticSearchDynamicSerializer
  agent1.sinks.sink2.channel = ch2
  
  
  
4.5 修改源码
  修改源码类,按需求修改sink规则
  
4.6 启动命令
  注意修改文件夹权限
  nohupbin/flume-ng agent -c ./conf/ -f conf/flume-master.conf -n agent1-Dflume.root.logger=INFO,console &
  
  
  到此,日志的抓取存储已经简单完成,下面进行精细处理
  
  
  
  
5. Kibana集群搭建
5.1 Kibana关键特性
  全新的数据搜索和发现界面
  统一的可视化构建器,用以构建你喜欢和新加入的那些图表:
  区块图
  数据表格
  折线图
  Markdown 文本挂件
  饼图(包括甜圈图)
  原始文档挂件
  单数值挂件
  贴片地图
  垂直柱状图
  可拖拽的仪表板构建方式,让你可以快速添加,删除可视化,已经修改其大小和长宽比
  基于聚合接口的高级分析能力,现在支持:
  去重统计(cardinality)
  非时间的直方图
  范围统计(Ranges)
  关键词(Significant terms)
  百分比(Percentiles)
  基于 Lucene Expressions 的脚本化字段让你可以完成临时计算任务
  优化
  可以保存搜索和可视化,这样你可以再多个仪表板上链接和使用同一个搜索构建的可视化
  可视化支持不限次数的层叠聚合,这样你可以生成新的可视化样式,比如双层甜圈图
  替换模板化和脚本化仪表板需求的新 URL 格式
  更好的移动端体验
  更快的仪表板加载速度,因为我们消减了发出的 HTTP 请求数量
  客户端请求和发往 Elasticsearch 的请求都可以有 SSL 加密
  搜索结果高亮
  可以很容易访问和导出可视化背后的数据:
  可以在表格中查看,也可以用 JSON 格式
  导出成 CSV 格式
  查看 Elasticsearch 请求和响应
  跟仪表板一样,可以分享和嵌入独立的可视化部分
  其他细节
  自带网页服务器,用 Node.js 作为后端—— 发布有 Linux,Windows 和 Mac OS 的二进制文件分发
  用 D3 框架做可视化效果
  
5.2 开始
  你可以在几分钟内安装好 Kibana 然后开始探索你的 Elasticsearch 索引。你要的就是:
  Elasticsearch 1.4.4 或者更新的版本
  一个现代浏览器 - 支持的浏览器列表.
  有关你的 Elasticsearch 集群的信息:
  你想要连接 Elasticsearch 实例的URL
  你想搜索哪些 Elasticsearch 索引
  如果你的 Elasticsearch 是被 Shield 保护着的,阅读 Shieldwith Kibana4 学习额外的安装说明。
  安装并启动 kibana
  要安装启动 Kibana:
  1.  下载对应平台的 Kibana 4二进制包
  2.  解压 .ziptar.gz 压缩文件
  3.  在安装目录里运行: bin/kibana (Linux/MacOSX)或 bin\kibana.bat (Windows)
  完毕!Kibana 现在运行在 5601 端口了。
  =========================================================================
  下载最新的安装包kibana-4.0.1-linux-x64.tar.gz
  
  
  修改配置文件kibana.yml
  elasticsearch_url:http://esIp:9200
  ==========================================================================
  让 kibana 连接到 elasticsearch
  在开始用 Kibana 之前,你需要告诉它你打算探索哪个 Elasticsearch 索引。第一次访问 Kibana 的时候,你会被要求定义一个 index pattern 用来匹配一个或者多个索引名。好了。这就是你需要做的全部工作。以后你还可以随时从 Settingstab 页面添加更多的 index pattern。
  默认情况下,Kibana 会连接运行在 localhost 的Elasticsearch。要连接其他 Elasticsearch 实例,修改 kibana.yml 里的ElasticsearchURL,然后重启 Kibana。如何在生产环境下使用 Kibana,阅读Using Kibana in a ProductionEnvironment.
  要从 Kibana 访问的 Elasticsearch索引的配置方法:
  1.  从浏览器访问 Kibana 界面。也就是说访问比如 localhost:5601 或者 http://YOURDOMAIN.com:5601
  2.  制定一个可以匹配一个或者多个 Elasticsearch 索引的 index pattern 。默认情况下,Kibana 认为你要访问的是通过 Logstash 导入 Elasticsearch 的数据。这时候你可以用默认的 logstash-* 作为你的 index pattern。通配符(*) 匹配索引名中零到多个字符。如果你的 Elasticsearch索引有其他命名约定,输入合适的 pattern。pattern 也开始是最简单的单个索引的名字。
  3.  选择一个包含了时间戳的索引字段,可以用来做基于时间的处理。Kibana 会读取索引的映射,然后列出所有包含了时间戳的字段(译者注:实际是字段类型为 date 的字段,而不是“看起来像时间戳”的字段)。如果你的索引没有基于时间的数据,关闭 Index contains time-based events 参数。
  4.  如果一个新索引是定期生成,而且索引名中带有时间戳,选择 Use event times to create indexnames 选项,然后再选择 Indexpattern interval。这可以提高搜索性能,Kibana 会至搜索你指定的时间范围内的索引。在你用Logstash 输出数据给 Elasticsearch 的情况下尤其有效。
  5.  点击 Create 添加 index pattern。第一个被添加的 pattern 会自动被设置为默认值。如果你有多个 index pattern 的时候,你可以在 Settings> Indices 里设置具体哪个是默认值。
  好了。Kibana 现在连接上你的Elasticsearch 数据了。Kibana 会显示匹配上的索引里的字段名的只读列表。
  开始探索你的数据!
  你可以开始下钻你的数据了:
  在 Discover 页搜索和浏览你的数据。
  在 Visualize 页转换数据成图表。
  在 Dashboard 页创建定制自己的仪表板。
  
5.3  生产环境使用 Kibana 的时候
  当你准备在生产环境使用Kibana 的时候,比起在本机运行,你需要多考虑一些:
  在哪运行 kibana
  是否需要加密Kibana 出入的流量
  是否需要控制访问数据的权限
  部署的考虑
  你怎么部署 Kibana取决于你的运用场景。如果就是自己用,在本机运行 Kibana 然后配置一下指向到任意你想交互的 Elasticsearch 实例即可。如果你有一大批 Kibana 重度用户,可能你需要部署多个 Kibana 实例,指向同一个 Elasticsearch ,然后前面加一个负载均衡。
  虽然 Kibana 不是资源密集型的应用,我们依然建议你单独用一个节点来运行 Kibana,而不是泡在 Elasticsearch 节点上。
  配置 Kibana 和 shield 一起工作
  如果你在用 Shield做 Elasticsearch 用户认证,你需要给 Kibana提供用户凭证,这样它才能访问 .kibana索引。Kibana 用户需要由权限访问 .kibana 索引里以下操作:
  '.kibana':
        - indices:admin/create
        - indices:admin/exists
        - indices:admin/mapping/put
        - indices:admin/mappings/fields/get
        - indices:admin/refresh
        - indices:admin/validate/query
        - indices:data/read/get
        - indices:data/read/mget
        - indices:data/read/search
        - indices:data/write/delete
        - indices:data/write/index
        - indices:data/write/update
        - indices:admin/create
  更多配置 Shield 的内容,请阅读 Shield with Kibana 4
  要配置 Kibana 的凭证,设置 kibana.yml 里的 kibana_elasticsearch_usernamekibana_elasticsearch_password 选项即可:
  #If your Elasticsearch is protected with basic auth:
  kibana_elasticsearch_username:kibana4
  kibana_elasticsearch_password:kibana4
  开启 ssl
  Kibana同时支持对客户端请求以及 Kibana 服务器发往 Elasticsearch 的请求做 SSL 加密。
  要加密浏览器到Kibana 服务器之间的通信,配置 kibana.yml 里的 ssl_key_filessl_cert_file 参数:
  #SSL for outgoing requests from the Kibana Server (PEM formatted)
  ssl_key_file:/path/to/your/server.key
  ssl_cert_file:/path/to/your/server.crt
  如果你在用 Shield或者其他提供 HTTPS 的代理服务器保护Elasticsearch,你可以配置 Kibana 通过HTTPS 方式访问 Elasticsearch,这样 Kibana服务器和 Elasticsearch 之间的通信也是加密的。
  要做到这点,你需要在 kibana.yml 里配置 Elasticsearch 的 URL 时指明是 HTTPS 协议:
  elasticsearch:&quot;https://<your_elasticsearch_host>.com:9200&quot;
  如果你给Elasticsearch 用的是自己签名的证书,请在 kibana.yml 里设定 ca 参数指明 PEM 文件位置,这也意味着开启了 verify_ssl 参数:
  #If you need to provide a CA certificate for your Elasticsarech instance, put
  #the path of the pem file here.
  ca:/path/to/your/ca/cacert.pem
  控制访问权限
  你可以用 Elasticsearch Shield 来控制用户通过Kibana 可以访问到的 Elasticsearch 数据。Shield提供了索引级别的访问控制。如果一个用户没被许可运行这个请求,那么它在 Kibana 可视化界面上只能看到一个空白。
  要配置 Kibana 使用 Shield,你要位 Kibana 创建一个或者多个 Shield 角色(role),以 kibana4 作为开头的默认角色。更详细的做法,请阅读 UsingShield with Kibana 4
  
6.Hadoop集群(暂时不用
  
  
  10.16.0.151  NameNode 节点主机 ResourceManager 主机
  10.16.0.150  DataNode 节点主机  NodeManager 主机
  首先安装hadoop2.5.1
6.1 建立用户haddop
  切换到hadoop用户上传hadoop安装包
  解压安装包tar -zxvf hadoop-2.5.1.tar.gz
  
  
6.2 配置环境变量
  配置JAVA_HOME
  Root用户打开
  Vi/etc/profile
  
  添加以下
  ################JAVA_HOME#############
  exportJAVA_HOME=/usr/java/jdk1.7.0_71
  exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
  ################HADOOP_HOME###########
  exportHADOOP_HOME=/home/hadoop/hadoop-2.5.1
  
  exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
  ###########Aliasfor hadoop###########
  aliashdfs='hadoop fs'保存退出
  sourceprofile
  
  
6.3 准备ssh
Hadoop需要通过SSH和其它计算服务器进行沟通,所以首先要确定本机或者是其它Hadoop计算服务器,是否都已经安装了ssh。


(1)、确定系统是否安装了ssh和ssh-keygey

可以通过which命令来确认

which ssh

which ssh-keygen

如果出现

/usr/bin/which: no ssh in (/usr/.....)则表示系统里面没有安装SSH服务,可以通过www.openssh.com下载安装


(2)、发布公钥证书

执行如下命令:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

在~/.ssh/ 目录会生成id_rsa和id_rsa.pub两个文件,将id_rsa.pub复制一份在~/.ssh/目录下,并重命名为authorized_keys,如果是单机搭建伪分布式,此时ssh的准备工作已经完成了,如果使用全分布式环境,那么需要将authorized_keys(或authorized_keys中的内容追加到需要无密码登陆的服务器的~/.ssh/authorized_keys文件中)及id_rsa(或id_rsa中的内容追加到需要无密码登陆的服务器的~/.ssh/id_rsa文件中)两个文件复制到各台分布式slave机器的“~/.ssh目录中”中,这样任意两台机器之间互相通过ssh访问,都不需要输入密码了,如果只是拷贝到authorized_keys到slave机器中,就只能够实现主到从的不输密码访问。


注:如果需要远程登陆的服务器上还没有.ssh目录,那么就在登陆用户的目录下新建.ssh目录,权限至少设置成744,如果.ssh目录下没有authorized_keys文件,也新建该文件,并将其权限设置为644

(3)测试登陆验证

在本例中,采用的是在单机中搭建伪分布式系统,通过如下ssh命令尝试登陆:

ssh localhost


ssh 127.0.0.1

如果不再提示输入密码,直接登陆成功,那么SSH登陆就设置成功了。




6.4 修改hadoop配置文件
1.   <property>  

2.           <name>dfs.nameservices</name>  

3.           <value>hadoop-cluster1</value>  

4.       </property>  

5.       <property>  

6.           <name>dfs.namenode.secondary.http-address</name>  

7.           <value>nameNode:50090</value>  

8.       </property>  

9.       <property>  

10.          <name>dfs.namenode.name.dir</name>  

11.          <value>file:///home/hadoop/dfs/name</value>  

12.      </property>  

13.      <property>  

14.          <name>dfs.datanode.data.dir</name>  

15.          <value>file:///home/hadoop/dfs/data</value>  

16.      </property>  

17.      <property>  

18.          <name>dfs.replication</name>  

19.          <value>2</value>  

20.      </property>  

21.      <property>  

22.          <name>dfs.webhdfs.enabled</name>  

23.          <value>true</value>  

24.      </property>  



清单 2.hdfs-site.xml 配置

1.   <property>  

2.           <name>dfs.nameservices</name>  

3.           <value>hadoop-cluster1</value>  

4.       </property>  

5.       <property>  

6.           <name>dfs.namenode.secondary.http-address</name>  

7.           <value>nameNode:50090</value>  

8.       </property>  

9.       <property>  

10.          <name>dfs.namenode.name.dir</name>  

11.          <value>file:///home/hadoop/dfs/name</value>  

12.      </property>  

13.      <property>  

14.          <name>dfs.datanode.data.dir</name>  

15.          <value>file:///home/hadoop/dfs/data</value>  

16.      </property>  

17.      <property>  

18.          <name>dfs.replication</name>  

19.          <value>2</value>  

20.      </property>  

21.      <property>  

22.          <name>dfs.webhdfs.enabled</name>  

23.          <value>true</value>  

24.      </property>  


在 mapred-site.xml 中配置其使用 Yarn 框架执行 map-reduce 处理程序,详细如下:


清单3.mapred-site.xml 配置

1.   <property>  

2.           <name>dfs.nameservices</name>  

3.           <value>hadoop-cluster1</value>  

4.       </property>  

5.       <property>  

6.           <name>dfs.namenode.secondary.http-address</name>  

7.           <value>nameNode:50090</value>  

8.       </property>  

9.       <property>  

10.          <name>dfs.namenode.name.dir</name>  

11.          <value>file:///home/hadoop/dfs/name</value>  

12.      </property>  

13.      <property>  

14.          <name>dfs.datanode.data.dir</name>  

15.          <value>file:///home/hadoop/dfs/data</value>  

16.      </property>  

17.      <property>  

18.          <name>dfs.replication</name>  

19.          <value>2</value>  

20.      </property>  

21.      <property>  

22.          <name>dfs.webhdfs.enabled</name>  

23.          <value>true</value>  

24.      </property>  

  修改yarn-site.xml
<configuration>


<!--Site specific YARN configuration properties -->

    <property>

        <name>yarn.nodemanager.aux-services</name>

       <value>mapreduce_shuffle</value>

    </property>

    <property>

       <name>yarn.resourcemanager.address</name>

       <value>nameNode:8032</value>

    </property>

    <property>

        <name>yarn.resourcemanager.scheduler.address</name>

       <value>nameNode:8030</value>

    </property>

    <property>

       <name>yarn.resourcemanager.resource-tracker.address</name>

       <value>nameNode:8031</value>

    </property>

    <property>

        <name>yarn.resourcemanager.admin.address</name>

       <value>nameNode:8033</value>

    </property>

    <property>

       <name>yarn.resourcemanager.webapp.address</name>

       <value>nameNode:8088</value>

    </property>

</configuration>


  slaves
1.   dataNode

  修改JAVA_HOME
  分别在文件hadoop-env.sh和yarn-env.sh中添加JAVA_HOME配置
  vihadoop-env.sh
[plain] viewplaincopy
1.  export JAVA_HOME=/usr/java/jdk1.7.0_65  

  viyarn-env.sh
[plain] viewplaincopy
1.  export JAVA_HOME=/usr/java/jdk1.7.0_65  

6.5 &#26684;式化文件系统
  &#26684;式化文件系统:
[plain] viewplaincopy
1.  bin/hdfs namenode -format  

  输出:
[plain] viewplaincopy
1.  14/09/21 11:57:22 INFO namenode.NameNode: STARTUP_MSG:   

2.  /************************************************************  

3.  STARTUP_MSG: Starting NameNode  

4.  STARTUP_MSG:   host = nameNode/127.0.0.1  

5.  STARTUP_MSG:   args = [-format]  

6.  STARTUP_MSG:   version = 2.5.1  

7.  STARTUP_MSG:   classpath = /home/hadoop-2.5.1/etc/hadoop:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jets3t-0.9.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jersey-server-1.9.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/asm-3.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/guava-11.0.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jetty-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/xz-1.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/paranamer-2.3.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-lang-2.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-codec-1.4.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-math3-3.1.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-configuration-1.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jsch-0.1.42.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/netty-3.6.2.Final.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/zookeeper-3.4.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-cli-1.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/activation-1.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-collections-3.2.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/hadoop-auth-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/hamcrest-core-1.3.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-el-1.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/xmlenc-0.52.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jasper-runtime-5.5.23.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jsr305-1.3.9.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/log4j-1.2.17.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/httpclient-4.2.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jersey-json-1.9.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/avro-1.7.4.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jasper-compiler-5.5.23.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jersey-core-1.9.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/hadoop-annotations-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-httpclient-3.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-io-2.4.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-net-3.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/stax-api-1.0-2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-compress-1.4.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/junit-4.11.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/slf4j-api-1.7.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jetty-util-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jsp-api-2.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/mockito-all-1.8.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/httpcore-4.2.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/servlet-api-2.5.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-digester-1.8.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jettison-1.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-logging-1.1.3.jar:/home/hadoop-2.5.1/share/hadoop/common/hadoop-nfs-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/common/hadoop-common-2.5.1-tests.jar:/home/hadoop-2.5.1/share/hadoop/common/hadoop-common-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/hdfs:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/asm-3.2.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/guava-11.0.2.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-el-1.0.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jasper-runtime-5.5.23.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jsr305-1.3.9.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-io-2.4.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/jsp-api-2.1.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/hadoop-hdfs-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/hadoop-hdfs-nfs-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/hdfs/hadoop-hdfs-2.5.1-tests.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-server-1.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/asm-3.2.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/guava-11.0.2.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jetty-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/xz-1.0.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-lang-2.6.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-codec-1.4.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/javax.inject-1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-cli-1.2.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/activation-1.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-collections-3.2.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jsr305-1.3.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/log4j-1.2.17.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-json-1.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/guice-3.0.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-core-1.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-httpclient-3.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-io-2.4.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/servlet-api-2.5.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-client-1.9.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/aopalliance-1.0.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/jettison-1.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-client-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-common-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-tests-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-api-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-common-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/asm-3.2.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/xz-1.0.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/javax.inject-1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/guice-3.0.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/hadoop-annotations-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/junit-4.11.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.5.1-tests.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.5.1.jar:/home/hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.1.jar:/home/hadoop-2.5.1/contrib/capacity-scheduler/*.jar  

8.  STARTUP_MSG:   build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r 2e18d179e4a8065b6a9f29cf2de9451891265cce; compiled by 'jenkins' on 2014-09-05T23:11Z  

9.  STARTUP_MSG:   java = 1.7.0_65  

10. ************************************************************/  

11. 14/09/21 11:57:22 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]  

12. 14/09/21 11:57:22 INFO namenode.NameNode: createNameNode [-format]  

13. 14/09/21 11:57:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable  

14. Formatting using clusterid: CID-85e34a63-6cd7-4f1e-bbb9-add72ccaa660  

15. 14/09/21 11:57:29 INFO namenode.FSNamesystem: fsLock is fair:true  

16. 14/09/21 11:57:30 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000  

17. 14/09/21 11:57:30 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true  

18. 14/09/21 11:57:30 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000  

19. 14/09/21 11:57:30 INFO blockmanagement.BlockManager: The block deletion will start around 2014 九月 21 11:57:30  

20. 14/09/21 11:57:30 INFO util.GSet: Computing capacity for map BlocksMap  

21. 14/09/21 11:57:30 INFO util.GSet: VM type       = 64-bit  

22. 14/09/21 11:57:30 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB  

23. 14/09/21 11:57:30 INFO util.GSet: capacity      = 2^21 = 2097152 entries  

24. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false  

25. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: defaultReplication         = 3  

26. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: maxReplication             = 512  

27. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: minReplication             = 1  

28. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: maxReplicationStreams      = 2  

29. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks  = false  

30. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000  

31. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: encryptDataTransfer        = false  

32. 14/09/21 11:57:31 INFO blockmanagement.BlockManager: maxNumBlocksToLog          = 1000  

33. 14/09/21 11:57:31 INFO namenode.FSNamesystem: fsOwner             = root (auth:SIMPLE)  

34. 14/09/21 11:57:31 INFO namenode.FSNamesystem: supergroup          = supergroup  

35. 14/09/21 11:57:31 INFO namenode.FSNamesystem: isPermissionEnabled = true  

36. 14/09/21 11:57:31 INFO namenode.FSNamesystem: Determined nameservice ID: hadoop-cluster1  

37. 14/09/21 11:57:31 INFO namenode.FSNamesystem: HA Enabled: false  

38. 14/09/21 11:57:31 INFO namenode.FSNamesystem: Append Enabled: true  

39. 14/09/21 11:57:33 INFO util.GSet: Computing capacity for map INodeMap  

40. 14/09/21 11:57:33 INFO util.GSet: VM type       = 64-bit  

41. 14/09/21 11:57:33 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB  

42. 14/09/21 11:57:33 INFO util.GSet: capacity      = 2^20 = 1048576 entries  

43. 14/09/21 11:57:33 INFO namenode.NameNode: Caching file names occuring more than 10 times  

44. 14/09/21 11:57:33 INFO util.GSet: Computing capacity for map cachedBlocks  

45. 14/09/21 11:57:33 INFO util.GSet: VM type       = 64-bit  

46. 14/09/21 11:57:33 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB  

47. 14/09/21 11:57:33 INFO util.GSet: capacity      = 2^18 = 262144 entries  

48. 14/09/21 11:57:33 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033  

49. 14/09/21 11:57:33 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0  

50. 14/09/21 11:57:33 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension     = 30000  

51. 14/09/21 11:57:33 INFO namenode.FSNamesystem: Retry cache on namenode is enabled  

52. 14/09/21 11:57:33 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis  

53. 14/09/21 11:57:33 INFO util.GSet: Computing capacity for map NameNodeRetryCache  

54. 14/09/21 11:57:33 INFO util.GSet: VM type       = 64-bit  

55. 14/09/21 11:57:33 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB  

56. 14/09/21 11:57:33 INFO util.GSet: capacity      = 2^15 = 32768 entries  

57. 14/09/21 11:57:33 INFO namenode.NNConf: ACLs enabled? false  

58. 14/09/21 11:57:33 INFO namenode.NNConf: XAttrs enabled? true  

59. 14/09/21 11:57:33 INFO namenode.NNConf: Maximum size of an xattr: 16384  

60. 14/09/21 11:57:34 INFO namenode.FSImage: Allocated new BlockPoolId: BP-955896090-127.0.0.1-1411271853454  

61. 14/09/21 11:57:34 INFO common.Storage: Storage directory /home/hadoop/dfs/name has been successfully formatted.  

62. 14/09/21 11:57:36 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0  

63. 14/09/21 11:57:36 INFO util.ExitUtil: Exiting with status 0  

64. 14/09/21 11:57:36 INFO namenode.NameNode: SHUTDOWN_MSG:   

65. /************************************************************  

66. SHUTDOWN_MSG: Shutting down NameNode at nameNode/127.0.0.1  

67. ************************************************************/  

6.6 启动、停止服务
  现在可以启动服务了
  启动
  
[plain] viewplaincopy
1.  [iyunv@nameNode sbin]# ./start-dfs.sh  

  
[plain] viewplaincopy
1.  [iyunv@nameNode sbin]# ./start-yarn.sh  

  
  停止
[plain] viewplaincopy
1.  [iyunv@nameNode sbin]# ./stop-dfs.sh  

  
[plain] viewplaincopy
1.  [iyunv@nameNode sbin]# ./stop-yarn.sh  

  
  
6.7 创建HDFS目录
  bin/hdfs  dfs -mkdir -p /home/hadoop/usr/dfs/input
  bin/hdfs  dfs  -put /home/hadoop/test/*.txt  /usr/dfs/input
  创建flume文件夹
  bin/hdfs  dfs -mkdir -p /home/hadoop/usr/dfs/flumeDate
  
  bin/hadoopjar /home/hadoop/hadoop-2.5.1/lib/maxTemperature.jar /usr/dfs/input//usr/dfs/output/
  
  
6.8 验证
  
  查看启动的进程
[plain] viewplaincopy
1.  [iyunv@nameNode sbin]# jps  

[plain] viewplaincopy
1.  7854 Jps  

2.  7594 ResourceManager  

3.  7357 NameNode  

  
  通过浏览器访问
  http://192.168.17.100:50070/
  
  
  http://192.168.17.100:8088/
  

  Hadoop集群部署完成
  
  
7.用sqoop同步到mysql(暂时不用
  创建用户sqoop
  下载安装包sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
  tar -zxvfsqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
  mv sqoop-1.4.4.bin__hadoop-2.0.4-alpha sqoop-1.4.4
  添加环境变量
  export SQOOP_HOME=/home/sqoop/sqoop-1.4.4
  export HADOOP_COMMON_HOME=$HADOOP_HOME
  把mysql的jdbc驱动mysql-connector-java-5.1.10.jar复制到sqoop项目的lib目录下。
  在conf目录
  mv sqoop-env-template.sh sqoop-env.sh
  
  
  使用工具list-tables查看表,如下:
  ./sqooplist-tables --connect jdbc:mysql://10.129.33.148/ebbc --username root--password ROOT
  分隔线内有待研究
  
8.日志系统用法说明
  
1  Discover 标签页
  你可以在 Discover 页交互式探索你的数据。你可以访问到匹配得上你选择的索引模式的每个索引的每条记录。你可以提交搜索请求,过滤搜索结果,然后查看文档数据。你还可以看到匹配搜索请求的文档总数,获取字段&#20540;的统计情况。如果索引模式配置了时间字段,文档的时序分布情况会在页面顶部以柱状图的形式展示出来。
  
  设置时间过滤器
  时间过滤器(Time Filter)限制搜索结果在一个特定的时间周期内。如果你的索引包含的是时序诗句,而且你为所选的索引模式配置了时间字段,那么就就可以设置时间过滤器。
  默认的时间过滤器设置为最近 15 分钟。你可以用页面顶部的时间选择器(Time Picker)来修改时间过滤器,或者选择一个特定的时间间隔,或者直方图的时间范围。
  要用时间选择器来修改时间过滤器:
  1.      点击菜单栏右上角显示的 Time Filter 打开时间选择器。
  2.      快速过滤,直接选择一个短链接即可。
  3.      要指定相对时间过滤,点击 Relative 然后输入一个相对的开始时间。可以是任意数字的秒、分、小时、天、月甚至年之前。
  4.      要指定绝对时间过滤,点击 Absolute 然后在 From 框内输入开始日期,To 框内输入结束日期。
  5.      点击时间选择器底部的箭头隐藏选择器。
  要从住房图上设置时间过滤器,有以下几种方式:
  想要放大那个时间间隔,点击对应的柱体。
  单击并拖拽一个时间区域。注意需要等到光标变成加号,才意味着这是一个有效的起始点。
  你可以用浏览器的后退键来回退你的操作。
  搜索数据
  在 Discover 页提交一个搜索,你就可以搜索匹配当前索引模式的索引数据了。你可以直接输入简单的请求字符串,也就是用Lucene query syntax,也可以用完整的基于 JSON 的 ElasticsearchQuery DSL
  当你提交搜索的时候,直方图,文档表&#26684;,字段列表,都会自动反映成搜索的结果。hits(匹配的文档)总数会在直方图的右上角显示。文档表&#26684;显示前 500 个匹配文档。默认的,文档倒序排列,最新的文档最先显示。你可以通过点击时间列的头部来反转排序。事实上,所有建了索引的字段,都可以用来排序。
  要搜索你的数据:
  在搜索框内输入请求字符串:
  1.      简单的文本搜索,直接输入文本字符串。比如,如果你在搜索网站服务器日志,你可以输入 safari来搜索各字段中的 safari 单词。
  2.      要搜索特定字段中的&#20540;,则在&#20540;前加上字段名。比如,你可以输入 status:200 来限制搜索结果都是在 status 字段里有 200 内容。
  3.      要搜索一个&#20540;的范围,你可以用范围查询语法,[START_VALUE TO END_VALUE]。比如,要查找 4xx 的状态码,你可以输入 status:[400 TO 499]
  4.      要指定更复杂的搜索标准,你可以用布尔操作符 AND, OR, 和 NOT。比如,要查找4xx 的状态码,还是 phphtml 结尾的数据,你可以输入 status:[400 TO 499] AND (extension:phpORextension:html)
  
  这些例子都用了 Lucene querysyntax。你也可以提交 ElasticsearchQuery DSL式的请求。更多示例,请阅读Elasticsearch文档中的 querystring syntax
  
  点击回车键,或者点击 Search 按钮提交你的搜索请求。
  开始一个新的搜索
  要清除当前搜索或开始一个新搜索,点击 Discover 工具栏的 New Search 按钮。
  
  保存搜索
  你可以在 Discover 页加载已保存的搜索,也可以用作 visualizations 的基础。保存一个搜索,意味着同时保存下了搜索请求字符串和当前选择的索引模式。
  要保存当前搜索:
  1.      点击 Discover 工具栏的 SaveSearch 按钮  。
  2.      输入一个名称,点击 Save
  加载一个已存搜索
  要加载一个已保存的搜索:
  1.      点击 Discover 工具栏的 LoadSearch 按钮  。
  2. 选择你要加载的搜索。
  如果已保存的搜索关联到跟你当前选择的索引模式不一样的其他索引上,加载这个搜索也会切换当前的已选索引模式。
  改变你搜索的索引
  当你提交一个搜索请求,匹配当前的已选索引模式的索引都会被搜索。当前模式模式会显示在搜索栏下方。要改变搜索的索引,需要选择另外的模式模式。
  要选择另外的索引模式:
  1.      点击 Discover 工具栏的 Settings 按钮  。
  2.      从索引模式列表中选取你打算采用的模式。
  自动刷新页面
  亦可以配置一个刷新间隔来自动刷新 Discover 页面的最新索引数据。这回定期重新提交一次搜索请求。
  设置刷新间隔后,会显示在菜单栏时间过滤器的左边。
  要设置刷新间隔:
  1.      点击菜单栏右上角的 TimeFilter  。
  2.      点击 RefreshInterval 标签。
  3.      从列表中选择一个刷新间隔。
  4.      
  按字段过滤
  你可以过滤搜索结果,只显示在某字段中包含了特定&#20540;的文档。也可以创建反向过滤器,排除掉包含特定字段&#20540;的文档。
  你可以从字段列表或者文档表&#26684;里添加过滤器。当你添加好一个过滤器后,它会显示在搜索请求下方的过滤栏里。从过滤栏里你可以编辑或者关闭一个过滤器,转换过滤器(从正向改成反向,反之亦然),切换过滤器开关,或者完全移除掉它。
  要从字段列表添加过滤器
  1.      点击你想要过滤的字段名。会显示这个字段的前 5 名数据。每个数据的右侧,有两个小按钮 —— 一个用来添加常规(正向)过滤器,一个用来添加反向过滤器。
  2.      要添加正向过滤器,点击 PositiveFilter 按钮  。这个会过滤掉在本字段不包含这个数据的文档。
  3.      要添加反向过滤器,点击 NegativeFilter 按钮  。这个会过滤掉在本字段包含这个数据的文档。
  要从文档表&#26684;添加过滤器
  1.      点击表&#26684;第一列(通常都是时间)文档内容左侧的 Expand 按钮   展开文档表&#26684;中的文档。每个字段名的右侧,有两个小按钮 —— 一个用来添加常规(正向)过滤器,一个用来添加反向过滤器。
  2.      要添加正向过滤器,点击 PositiveFilter 按钮  。这个会过滤掉在本字段不包含这个数据的文档。
  3.      要添加反向过滤器,点击 NegativeFilter 按钮  。这个会过滤掉在本字段包含这个数据的文档。
  查看文档数据
  当你提交一个搜索请求,最近的 500 个搜索结果会显示在文档表&#26684;里。你可以在 Advanced Settings 里通过discover:sampleSize 属性配置表&#26684;里具体的文档数量。默认的,表&#26684;会显示当前选择的索引模式中定义的时间字段内容(转换成本地时区)以及 _source 文档。你可以从字段列表添加字段到文档表&#26684;。还可以用表&#26684;里包含的任意已建索引的字段来排序列出的文档
  要查看一个文档的字段数据:
  1.      点击表&#26684;第一列(通常都是时间)文档内容左侧的 Expand 按钮  。Kibana 从 Elasticsearch 读取数据然后在表&#26684;中显示文档字段。这个表&#26684;每行是一个字段的名字、过滤器按钮和字段的&#20540;。
  2.      要查看原始 JSON 文档(&#26684;式美化过的),点击 JSON 标签。
  3.      要在单独的页面上查看文档内容,点击链接。你可以添加书签或者分享这个链接,以直接访问这条特定文档。
  4.      收回文档细节,点击 Collapse 按钮  。
  文档列表排序
  你可以用任意已建索引的字段排序文档表&#26684;中的数据。如果当前索引模式配置了时间字段,默认会使用该字段倒序排列文档。
  要改变排序方式:
  点击想要用来排序的字段名。能用来排序的字段在字段名右侧都有一个排序按钮。再次点击字段名,就会反向调整排序方式。
  给文档表&#26684;添加字段列
  By default, the Documents table shows thelocalized version of the time field specified in the selected index pattern andthe document _source. You can add fields to the table from the Fieldslist. 默认的,文档表&#26684;会显示当前选择的索引模式中定义的时间字段内容(转换成本地时区)以及 _source 文档。你可以从字段列表添加字段到文档表&#26684;。
  要添加字段列到文档表&#26684;:
  移动鼠标到字段列表的字段上,点击它的 add 按钮  。
  重复操作直到你添加完所有你想移除的字段。
  添加的字段会替换掉文档表&#26684;里的 _source 列。同时还会显示在字段列表顶部的 SelectedFields 区域里。
  要重排表&#26684;中的字段列,移动鼠标到你要移动的列顶部,点击移动过按钮。
  
  从文档表&#26684;删除字段列
  要从文档表&#26684;删除字段列:
  1.      移动鼠标到字段列表的 SelectedFields 区域里你想要移除的字段上,然后点击它的 remove 按钮  。
  2.      重复操作直到你移除完所有你想移除的字段。
  查看字段数据统计
  从字段列表,你可以看到文档表&#26684;里有多少数据包含了这个字段,排名前 5 的&#20540;是什么,以及包含各个&#20540;的文档的占比。
  要查看字段数据统计:
  点击字段列表里一个字段的名字。这个字段可以在字段列表的任意位置 —— 已选字段(Selected Fields),常用字段(Popular Fields),或其他字段。
  
  要基于这个字段创建可视化,点击字段统计下方的Visualize按钮。
  
2.Visualize 标签页
  你可以用 Visualize 页来设计可视化。你可以保存可视化,以后再用,或者合并到 dashboard 里。一个可视化可以基于以下几种数据源类型:
  一个新的交互式搜索
  一个已保存的搜索
  一个已保存的可视化
  可视化是基于Elasticsearch 1 引入的聚合(aggregation) 特性。
  创建一个新可视化
  要开始一个 NewVisualization 向导,点击页面左上角的 Visualize 标签。如果你已经在创建一个可视化了。你可以在搜索栏的右侧工具栏里点击 New Visualization 按钮  向导会引导你继续以下几步:
  第 1 步: 选择可视化类型
  New Visualization 向导起始页如下:
  
  你也可以加载一个你之前创建好保存下来的可视化。已存可视化选择器包括一个文本框用来过滤可视化名称,以及一个指向 对象编辑器(ObjectEditor) 的链接,可以通过 Settings> Edit Saved Objects 来管理已存的可视化。
  如果你的新可视化是一个 Markdown 挂件,选择这个类型会带你到一个文本内容框,你可以在框内输入打算显示在挂件里的文本。其他的可视化类型,选择后都会转到数据源选择。
  第 2 步: 选择数据源
  你可以选择新建或者读取一个已保存的搜索,作为你可视化的数据源。搜索是和一个或者一系列索引相关联的。如果你选择了在一个配置了多个索引的系统上开始你的新搜索,从可视化编辑器的下拉菜单里选择一个索引模式。
  当你从一个已保存的搜索开始创建并保存好了可视化,这个搜索就绑定在这个可视化上。如果你修改了搜索,对应的可视化也会自动更新。
  第 3 步: 可视化编辑器
  Thevisualization editor enables you to configure and edit visualizations. Thevisualization editor has the following main elements: 可视化编辑器用来配置编辑可视化。它有下面几个主要元素:
  工具栏(Toolbar)
  聚合构建器(AggregationBuilder)
  预览画布(PreviewCanvas)
  
  工具栏
  工具栏上有一个用户交互式数据搜索的搜索框,用来保存和加载可视化。因为可视化是基于保存好的搜索,搜索栏会变成灰色。要编辑搜索,双击搜索框,用编辑后的版本替换已保存搜索。
  搜索框右侧的工具栏有一系列按钮,用于创建新可视化,保存当前可视化,加载一个已有可视化,分享或内嵌可视化,和刷新当前可视化的数据。
  聚合构建器
  用页面左侧的聚合构建器配置你的可视化要用的 metricbucket 聚合。桶(Buckets)的效果类&#20284;于SQLGROUP BY 语句。想更详细的了解聚合,阅读 Elasticsearchaggregations reference
  
  在条带图或者折线图可视化里,用 metrics 做 Y 轴,然后 buckets 做 X 轴,条带颜色,以及行/列的区分。在饼图里,metrics 用来做分片的大小,buckets 做分片的数量。
  
  为你的可视化 Y 轴选一个 metric 聚合,包括 count, average, sum, min, max,or cardinality (uniquecount).为你的可视化 X 轴,条带颜色,以及行/列的区分选一个 bucket 聚合,常见的有 date histogram, range, terms, filters, 和significant terms。
  
  你可以设置buckets 执行的顺序。在 Elasticsearch 里,第一个聚合决定了后续聚合的数据集。下面例子演示一个网页访问量前五名的文件后缀名统计的时间条带图。
  要看所有相同后缀名的,设置顺序如下:
  1.  Color: 后缀名的 Terms 聚合
  2.  X-Axis: @timestamp 的时间条带图
  
  Elasticsearch收集记录,算出前 5 名后缀名,然后为每个后缀名创建一个时间条带图。
  要看每个小时的前 5 名后缀名情况,设置顺序如下:
  1.  X-Axis: @timestamp 的时间条带图( 1 小时间隔)
  2.  Color: 后缀名的 Terms 聚合
  
  这次,Elasticsearch会从所有记录里创建一个时间条带图,然后在每个桶内,分组(本例中就是一个小时的间隔)计算出前 5 名的后缀名。
  
  记住,每个后续的桶,都是从前一个的桶里分割数据。
  
  要在预览画布(preview canvas)上渲染可视化,点击聚合构建器底部的 Apply 按钮。
  预览画布(canvas)
  预览 canvas 上显示你定义在聚合构建器里的可视化的预览效果。要刷新可视化预览,点击工具栏里的Refresh 按钮  。
3.Dashboard标签页
  一个 Kibana dashboard 能让你自由排列一组已保存的可视化。然后你可以保存这个仪表板,用来分享或者重载。
  简单的仪表板像这样。
  开始
  要用仪表板,你需要至少有一个已保存的 visualization
  创建一个新的仪表板
  你第一次点击 Dashboard 标签的时候,Kibana 会显示一个空白的仪表板
  
  通过添加可视化的方式来构建你的仪表板。
  添加可视化到仪表板上
  要添加可视化到仪表板上,点击工具栏面板上的 Add Visualization   按钮。从列表中选择一个已保存的可视化。你可以在 Visualization Filter 里输入字符串来过滤想要找的可视化。
  由你选择的这个可视化会出现在你仪表板上的一个容器(container)里。
  如果你觉得容器的高度和宽度不合适,可以调整容器大小
  保存仪表板
  要保存仪表板,点击工具栏面板上的 Save Dashboard 按钮,在 Save As 栏输入仪表板的名字,然后点击Save 按钮。
  加载已保存仪表板
  点击 Load Saved Dashboard 按钮显示已存在的仪表板列表。已保存仪表板选择器包括了一个文本栏可以通过仪表板的名字做过滤,还有一个链接到 Object Editor 而已管理你的已保存仪表板。你也可以直接点击Settings>Edit Saved Objects 来访问 ObjectEditor
  分享仪表板
  你可以分享仪表板给其他用户。可以直接分享 Kibana 的仪表板链接,也可以嵌入到你的网页里。
  用户必须有 Kibana 的访问权限才能看到嵌入的仪表板。
  点击 Share 按钮显示 HTML 代码,就可以嵌入仪表板到其他网页里。还带有一个指向仪表板的链接。点击复制按钮  可以复制代码,或者链接到你的黏贴板。
  嵌入仪表板
  要嵌入仪表板,从 Share 页里复制出嵌入代码,然后粘贴进你外部网页应用内即可。
  定制仪表板元素
  仪表板里的可视化都存在可以调整大小的容器里。接下来会讨论一下容器。
  移动容器
  点击并按住容器的顶部,就可以拖动容器到仪表板任意位置。其他容器会在必要的时候自动移动,给你在拖动的这个容器空出位置。松开鼠标,容器就会固定在当前停留位置。
  改变容器大小
  移动光标到容器的右下角,等光标变成指向拐角的方向,点击并按住鼠标,拖动改变容器的大小。松开鼠标,容器就会固定成当前大小。
  删除容器
  点击容器右上角的 x 图标删除容器。从仪表板删除容器,并不会同时删除掉容器里用到的已存可视化。
  查看详细信息
  要显示可视化背后的原始数据,点击容器地步的条带。可视化会被有关原始数据详细信息的几个标签替换掉。如下所示:
  表&#26684;(Table)。底层数据的分页展示。你可以通过点击每列顶部的方式给该列数据排序。
  请求(Request)。发送到服务器的原始请求,以 JSON &#26684;式展示。
  响应(Response)。从服务器返回的原始响应,以 JSON &#26684;式展示。
  统计&#20540;(Statistics)。和请求响应相关的一些统计&#20540;,以数据网&#26684;的方式展示。数据报告,请求时间,响应时间,返回的记录条目数,匹配请求的索引模式(index pattern)。
  修改可视化
  点击容器右上角的 Edit 按钮   在 Visualize 页打开可视化编辑。
  
4.配置
  要使用 Kibana,你就得告诉它你想要探索的 Elasticsearch 索引是那些,这就要配置一个或者更多的索引模式。此外,你还可以:
  1.      创建脚本化字段,这个字段可以实时从你的数据中计算出来。你可以浏览这种字段,并且在它基础上做可视化,但是不能搜索这种字段。
  2.      设置高级选项,比如表&#26684;里显示多少行,常用字段显示多少个。修改高级选项的时候要千万小心,因为一个设置很可能跟另一个设置是不兼容的。
  3.      为生产环境配置 Kibana。
  
  创建一个连接到 Elasticsearch 的索引模式
  一个索引模式定义了一个或者多个你打算探索的 Elasticsearch 索引。Kibana 会查找匹配指定模式的索引名。模式中的通配符()匹配零到多个字符。比如,模式 `myindex-匹配所有名字以myindex-开头的索引,比如myindex-1myindex-2`。
  
  如果你用了事件时间来创建索引名(比如说,如果你是用 Logstash 往 Elasticsearch 里写数据),索引模式里也可以匹配一个日期&#26684;式。在这种情况下,模式的静态文本部分必须用中括号包含起来,日期&#26684;式能用的字符,参见表 1 &quot;日期&#26684;式码&quot;。
  
  比如,[logstash-]YYYY.MM.DD 匹配所有名字以 logstash- 为前缀,后面跟上 YYYY.MM.DD &#26684;式时间戳的索引,比如 logstash-2015.01.31logstash-2015-02-01
  
  索引模式也可以简单的设置为一个单独的索引名字。
  
  要创建一个连接到 Elasticsearch 的索引模式:
  1.      切换到 Settings> Indices 标签页。
  2.      指定一个能匹配你的 Elasticsearch 索引名的索引模式。默认的,Kibana 会假设你是要处理 Logstash 导入的数据。
  
  当你在顶层标签页之间切换的时候,Kibana会记住你之前停留的位置。比如,如果你在 Settings标签页查看了一个索引模式,然后切换到 Discover标签,再切换回 Settings标签,Kibana 还会显示上次你查看的索引模式。要看到创建模式的表单,需要从索引模式列表里点击 Add 按钮。
  
  1.      如果你索引有时间戳字段打算用来做基于事件的对比,勾选 Indexcontains time-based events 然后选择包含了时间戳的索引字段。Kibana 会读取索引映射,列出所有包含了时间戳的字段供选择。
  2.      如果新索引是周期性生成,名字里有时间戳的,勾选 Useevent times to create index namesIndex pattern interval 选项。这会让 Kibana 只搜索哪些包含了你指定的时间范围内的数据的索引。当你使用Logstash 往 Elasticsearch 写数据的时候非常有用。
  3.      点击 Create 添加索引模式。
  4.      要设置新模式作为你查看 Discover 页是的默认模式,点击 favorite 按钮。
  
  表 1. 日期&#26684;式码
  &#26684;式
  描述
  M
  Month - cardinal: 1 2 3 … 12
  Mo
  Month - ordinal: 1st 2nd 3rd … 12th
  MM
  Month - two digit: 01 02 03 … 12
  MMM
  Month - abbreviation: Jan Feb Mar … Dec
  MMMM
  Month - full: January February March … December
  Q
  Quarter: 1 2 3 4
  D
  Day of Month - cardinal: 1 2 3 … 31
  Do
  Day of Month - ordinal: 1st 2nd 3rd … 31st
  DD
  Day of Month - two digit: 01 02 03 … 31
  DDD
  Day of Year - cardinal: 1 2 3 … 365
  DDDo
  Day of Year - ordinal: 1st 2nd 3rd … 365th
  DDDD
  Day of Year - three digit: 001 002 … 364 365
  d
  Day of Week - cardinal: 0 1 3 … 6
  do
  Day of Week - ordinal: 0th 1st 2nd … 6th
  dd
  Day of Week - 2-letter abbreviation: Su Mo Tu … Sa
  ddd
  Day of Week - 3-letter abbreviation: Sun Mon Tue … Sat
  dddd
  Day of Week - full: Sunday Monday Tuesday … Saturday
  e
  Day of Week (locale): 0 1 2 … 6
  E
  Day of Week (ISO): 1 2 3 … 7
  w
  Week of Year - cardinal (locale): 1 2 3 … 53
  wo
  Week of Year - ordinal (locale): 1st 2nd 3rd … 53rd
  ww
  Week of Year - 2-digit (locale): 01 02 03 … 53
  W
  Week of Year - cardinal (ISO): 1 2 3 … 53
  Wo
  Week of Year - ordinal (ISO): 1st 2nd 3rd … 53rd
  WW
  Week of Year - two-digit (ISO): 01 02 03 … 53
  YY
  Year - two digit: 70 71 72 … 30
  YYYY
  Year - four digit: 1970 1971 1972 … 2030
  gg
  Week Year - two digit (locale): 70 71 72 … 30
  gggg
  Week Year - four digit (locale): 1970 1971 1972 … 2030
  GG
  Week Year - two digit (ISO): 70 71 72 … 30
  GGGG
  Week Year - four digit (ISO): 1970 1971 1972 … 2030
  A
  AM/PM: AM PM
  a
  am/pm: am pm
  H
  Hour: 0 1 2 … 23
  HH
  Hour - two digit: 00 01 02 … 23
  h
  Hour - 12-hour clock: 1 2 3 … 12
  hh
  Hour - 12-hour clock, 2 digit: 01 02 03 … 12
  m
  Minute: 0 1 2 … 59
  mm
  Minute - two-digit: 00 01 02 … 59
  s
  Second: 0 1 2 … 59
  ss
  Second - two-digit: 00 01 02 … 59
  S
  Fractional Second - 10ths: 0 1 2 … 9
  SS
  Fractional Second - 100ths: 0 1 … 98 99
  SSS
  Fractional Seconds - 1000ths: 0 1 … 998 999
  Z
  Timezone - zero UTC offset (hh:mm format): -07:00 -06:00 -05:00 .. &#43;07:00
  ZZ
  Timezone - zero UTC offset (hhmm format): -0700 -0600 -0500 … &#43;0700
  X
  Unix Timestamp: 1360013296
  x
  Unix Millisecond Timestamp: 1360013296123
  
  设置默认索引模式
  默认索引模式会在你查看 Discover 标签的时候自动加载。Kibana会在 Settings > Indices 标签页的索引模式列表里,给默认模式左边显示一个星号。你创建的第一个模式会自动被设置为默认模式。
  
  要设置一个另外的模式为默认索引模式:
  1.      进入 Settings> Indices 标签页。
  2.      在索引模式列表里选择你打算设置为默认&#20540;的模式。
  3.      点击模式的 Favorite 标签。
  
  你也可以在 Advanced >Settings 里设置默认索引模式。
  重加载索引的字段列表
  当你添加了一个索引映射,Kibana 自动扫描匹配模式的索引以显示索引字段。你可以重加载索引字段列表,以显示新添加的字段。
  
  重加载索引字段列表,也会重设 Kibana 的常用字段计数器。这个计数器是跟踪你在 Kibana 里常用字段,然后来排序字段列表的。
  
  要重加载索引的字段列表:
  1.      进入 Settings> Indices 标签页。
  2.      在索引模式列表里选择一个索引模式。
  3.      点击模式的 Reload 按钮。
  
  删除一个索引模式
  要删除一个索引模式:
  1.      进入 Settings> Indices 标签页。
  2.      在索引模式列表里选择你打算删除的模式。
  3.      点击模式的 Delete 按钮。
  4.      确认你是想要删除这个索引模式。
  
  创建一个脚本化字段
  脚本化字段从你的 Elasticsearch 索引数据中即时计算得来。在 Discover 标签页,脚本化字段数据会作为文档数据的一部分显示,而且你还可以在可视化里使用脚本化字段。(脚本化字段的&#20540;是在请求的时候计算的,所以它们没有被索引,不能搜索到)
  
  即时计算脚本化字段非常消耗资源,会直接影响到Kibana的性能。而且记住,Elasticsearch里没有内置对脚本化字段的验证功能。如果你的脚本有 bug,你会在查看动态生成的数据时看到exception
  
  脚本化字段使用 Lucene 表达式语法。更多细节,请阅读 LuceneExpressions Scripts
  
  你可以在表达式里引用任意单个数&#20540;类型字段,比如:
  doc['field_name'].value
  
  要创建一个脚本化字段:
  1.      进入 Settings> Indices
  2.      选择你打算添加脚本化字段的索引模式。
  3.      进入模式的 ScriptedFields 标签。
  4.      点击 AddScripted Field
  5.      输入脚本化字段的名字。
  6.      输入用来即时计算数据的表达式。
  7.      点击 SaveScripted Field.
  更新一个脚本化字段
  要更新一个脚本化字段:
  1.      进入 Settings> Indices
  2.      点击你要更新的脚本化字段的 Edit 按钮。
  3.      完成变更后点击 SaveScripted Field 升级。
  
  注意 Elasticsearch 里没有内置对脚本化字段的验证功能。如果你的脚本有 bug,你会在查看动态生成的数据时看到 exception
  
  删除一个脚本化字段
  要删除一个脚本化字段:
  1.      进入 Settings> Indices
  2.      点击你要删除的脚本化字段的 Delete 按钮。
  3.      确认你确实想删除它。
  
  设置高级参数
  高级参数页允许你直接编辑那些控制着 Kibana 应用行为的设置。比如,你可以修改显示日期的&#26684;式,修改默认的索引模式,设置十进制数&#20540;的显示精度。
  修改高级参数可能带来意想不到的后果。如果你不确定自己在做什么,最好离开这个设置页面。
  要设置高级参数:
  1.      进入 Settings> Advanced
  2.      点击你要修改的选项的 Edit 按钮。
  3.      给这个选项输入一个新的&#20540;。
  4.      点击 Save 按钮。
  管理已保存的搜索,可视化和仪表板
  你可以从 Settings > Objects 查看,编辑,和删除已保存的搜索,可视化和仪表板。
  
  查看一个已保存的对象会显示在 Discover, VisualizeDashboard 页里已选择的项目。要查看一个已保存对象:
  1.      进入 Settings> Objects
  2.      选择你想查看的对象。
  3.      点击 View 按钮。
  
  编辑一个已保存对象让你可以直接修改对象定义。你可以修改对象的名字,添加一段说明,以及修改定义这个对象的属性的 JSON。
  
  如果你尝试访问一个对象,而它关联的索引已经被删除了,Kibana 会显示这个对象的编辑(Edit Object)页。你可以:
  1.      重建索引这样就可以继续用这个对象。
  2.      删除对象,然后用另一个索引重建对象。
  3.      在对象的 kibanaSavedObjectMeta.searchSourceJSON 里修改引用的索引名,指向一个还存在的索引模式。这个在你的索引被重命名了的情况下非常有用。
  
  对象属性没有验证机制。提交一个无效的变更会导致对象不可用。通常来说,你还是应该用 Discover, Visualize Dashboard 页面来创建新对象而不是直接编辑已存在的对象。
  
  要编辑一个已保存的对象:
  1.      进入 Settings> Objects
  2.      选择你想编辑的对象。
  3.      点击 Edit 按钮。
  4.      修改对象定义。
  5.      点击 SaveObject 按钮。
  要删除一个已保存的对象:
  1.      进入 Settings> Objects
  2.      选择你想删除的对象。
  3.      点击 Delete 按钮。
  4.      确认你确实想删除这个对象。
  
  设置 kibana 服务器属性
  Kibana 服务器在启动的时候会从 kibana.yml 文件读取属性设置。默认设置是运行在 localhost:5601。要变更主机或端口,或者连接远端主机上的 Elasticsearch,你都需要更新你的 kibana.yml 文件。你还可以开启SSL 或者设置其他一系列选项:
  
  表 2. Kibana 服务器属性
  属性
  描述
  port
  Kibana 服务器运行的端口。默认:port: 5601
  host
  Kibana 服务器监听的地址。默认:host: &quot;0.0.0.0&quot;
  elasticsearch_url
  你想请求的索引存在哪个 Elasticsearch 实例上。默认:elasticsearch_url: &quot;http://localhost:9200&quot;
  elasticsearch_preserve_host
  默认的,浏览器请求中的主机名即作为 Kibana 发送给 Elasticsearch 时请求的主机名。如果你设置这个参数为 false, Kibana 会改用elasticsearch_url 里的主机名。你应该不用担心这个设置 ——直接用默认即可。默认:elasticsearch_preserve_host: true
  kibana_index
  保存搜索,可视化,仪表板信息的索引的名字。默认:kibana_index: .kibana
  default_app_id
  进入 Kibana 是默认显示的页面。可以为 discover, visualize,dashboardsettings。默认:default_app_id:&quot;discover&quot;
  request_timeout
  等待 Kibana 后端或 Elasticsearch 的响应的超时时间,单位毫秒。默认:request_timeout: 500000
  shard_timeout
  Elasticsearch 等待分片响应的超时时间。设置为 0 表示关闭超时控制。默认:shard_timeout: 0
  verify_ssl
  定义是否验证 Elasticsearch SSL 证书。设置为 false 关闭 SSL 认证。默认:verify_ssl: true
  ca
  你的 Elasticsearch 实例的 CA 证书的路径。如果你是自己签的证书,必须指定这个参数,证书才能被认证。否则,你需要关闭verify_ssl。默认:none。
  ssl_key_file
  Kibana 服务器的密钥文件路径。设置用来加密浏览器和 Kibana 之间的通信。默认:none。
  ssl_cert_file
  Kibana 服务器的证书文件路径。设置用来加密浏览器和 Kibana 之间的通信。默认:none。
  pid_file
  你想用来存进程 ID 文件的位置。如果没有指定,PID 文件存在/var/run/kibana.pid。默认:none。
  
  
  文档我在下面上传了,转载请标明出处

运维网声明 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-144361-1-1.html 上篇帖子: 使用flume1.6.0直接向hadoop2.5收集数据 下篇帖子: flume 示例一收集tomcat日志
累计签到:9 天
连续签到:1 天
发表于 2017-1-19 19:26:30 | 显示全部楼层
文档在哪里

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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