(贴一篇之前工作期间整理的elk学习笔记)
ELK官网 https://www.elastic.co
ELK日志分析系统 学习笔记
概念:ELK = elasticsearch + logstash + kibana
编程语言分别是 Java、JRuby、Ruby
概括的说,logstash 采集和结构化日志,输入elasticsearch创建索引,kibana查询elasticsearch这个搜索引擎 来完成数据的分析展示。
ELK 介绍:https://yq.aliyun.com/articles/73622
elasticsearch 基本概念,原理
详见:http://www.cnblogs.com/valor-xh/p/6095894.html
基本概念
索引(Index)
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。
举例说:pandora的所有日志可以存放于一个索引之中。
索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类型(Type)
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。
举例说:pandora这个索引的type可以只有一个:pandoralog, 也可根据pandora的模块 分成多个type, 比如 登陆、部署、配置...
例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。
文档(Document)
文档是Lucene索引和搜索的原子单位,基于JSON格式进行表示。 一个文档就是一个保存在 es 中的 JSON 文本,可以把它理解为关系型数据库表中的一行。每个文档都是保存在索引中的,拥有一种type和 id。
id
Id 是用于标识文档的,一个文档的索引/类型/id 必须是唯一的。文档 id 是自动生成的(如果不指定)。
field 字段
一个文档包含了若干字段,或称之为键值对。字段的值可以是简单(标量)值(例如字符串、整型、日期),也可以是嵌套结构,例如数组或对象。一个字段类似于关系型数据库表中的一列。每个字段的映射都有一个字段类型(不要和文档类型搞混了),它描述了这个字段可以保存的值类型,例如整型、字符串、对象。映射还可以让我们定义一个字段的值如何进行分析。
映射(Mapping)
ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。
另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。
总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。
详见http://blog.csdn.net/lvhong84/article/details/23936697
接下去再说说ES Cluster相关的一些概念。
集群(Cluster)
ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。
多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。
集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。
如果不考虑冗余能力等特性,仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。
节点(Node)
运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。
类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机Marvel字符名称。
用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。
节点通过为其配置的ES集群名称确定其所要加入的集群。
分片(Shard)和副本(Replica)
ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。
每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。
Shard有两种类型:primary和replica,即主shard及副本shard。
Primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。
Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。
每个Primary shard默认配置了一个Replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。
ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。
ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。
简单的一个演示 加深对 index、doucument、type、id 的理解:
10.6.129.101:9200已搭建 通过restApi 与es交互
几个很常用的接口:
/_cat 查看可用命令
/_cat/nodes?v
:查集群状态
/_cat/health?v
:查询集群健康状态
/_cat/shards?v
:查看分片状态
/${index}/${type}/_search?pretty
:搜索
/${index}/_search?pretty&q=xxx=xxx
:带条件搜索
/_search?pretty :
查询全部文档
或
/_count?pretty
(uri后面加?v 表示 对查询结果按类型分列展示;?pretty 表示对结果格式化输出)
查看es 可用索引http://10.6.129.101:9200/_cat/indices?v
索引雇员文档
- 每个雇员索引一个文档,包含该雇员的所有信息。
- 每个文档都将是 employee 类型 。 type
- 该类型位于 索引 megacorp 内。 index
- 该索引保存在我们的 Elasticsearch 集群中。
实践中这非常简单(尽管看起来有很多步骤),我们可以通过一条命令完成所有这些动作:
(拷贝下列代码 到kibana DevTools模块 中运行 是一个很方便的方法)
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
注意,路径 /megacorp/employee/1 包含了三部分的信息:
megacorp
索引名称
employee
类型名称
1
特定雇员的ID
接着 再写入两条
PUT /megacorp/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /megacorp/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
查询es所有索引http://10.6.129.101:9200/_cat/indices?v 可以看到 新创建的megacorp 索引
检索文档
目前我们已经在 Elasticsearch 中存储了一些数据, 接下来就能专注于实现应用的业务需求了。
1)第一个需求是可以检索到单个雇员的数据。
GET /megacorp/employee/1
将 HTTP 命令由PUT
改为GET
可以用来检索文档,同样的,可以使用DELETE
命令来删除文档,以及使用HEAD
指令来检查文档是否存在。如果想更新已存在的文档,只需再次PUT
2)我们使用下列请求来搜索所有雇员
GET /megacorp/employee/_search
3)接下来,尝试下搜索姓氏为 ``Smith`` 的雇员。为此,我们将使用一个 高亮 搜索,很容易通过命令行完成。这个方法一般涉及到一个 查询字符串 (_query-string_) 搜索
GET /megacorp/employee/_search?q=last_name:Smith
我们仍然在请求路径中使用_search
端点,并将查询本身赋值给参数q=
。返回结果给出了所有的 Smith
4)Query-string 搜索通过命令非常方便地进行临时性的即席搜索 ,但它有自身的局限性(参见 轻量 搜索)。Elasticsearch 提供一个丰富灵活的查询语言叫做 查询表达式 , 它支持构建更加复杂和健壮的查询。
领域特定语言 (DSL), 指定了使用一个 JSON 请求。我们可以像这样重写之前的查询所有 Smith 的搜索 :
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
这个请求使用 JSON 构造,并使用了一个 match
查询
5)更复杂的搜索
现在尝试下更复杂的搜索。 同样搜索姓氏为 Smith 的雇员,但这次我们只需要年龄大于 30 的。查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询。
GET /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
这部分与我们之前使用的 match 查询 一样。 |
|
这部分是一个 range 过滤器 , 它能找到年龄大于 30 的文档,其中 gt 表示_大于(_great than)。 |
目前无需太多担心语法问题,后续会更详细地介绍。只需明确我们添加了一个 过滤器 用于执行一个范围查询,并复用之前的 match 查询。现在结果只返回了一个雇员,叫 Jane Smith,32 岁。
6)全文搜索
截止目前的搜索相对都很简单:单个姓名,通过年龄过滤。现在尝试下稍微高级点儿的全文搜索——一项传统数据库确实很难搞定的任务。
搜索下所有喜欢攀岩(rock climbing)的雇员:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
显然我们依旧使用之前的 match
查询在about
属性上搜索 “rock climbing” 。得到两个匹配的文档:
{
...
"hits": {
"total": 2,
"max_score": 0.16273327,
"hits": [
{
...
"_score": 0.16273327,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
},
{
...
"_score": 0.016878016,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [ "music" ]
}
}
]
}
}
相关性得分 |
Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度。第一个最高得分的结果很明显:John Smith 的 about
属性清楚地写着 “rock climbing” 。
但为什么 Jane Smith 也作为结果返回了呢?原因是她的 about
属性里提到了 “rock” 。因为只有 “rock” 而没有 “climbing” ,所以她的相关性得分低于 John 的。
这是一个很好的案例,阐明了 Elasticsearch 如何 在 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要,也是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。
7)短语搜索
找出一个属性中的独立单词是没有问题的,但有时候想要精确匹配一系列单词或者短语 。 比如, 我们想执行这样一个查询,仅匹配同时包含 “rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。
为此对 match
查询稍作调整,使用一个叫做 match_phrase
的查询:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
8)高亮搜索
许多应用都倾向于在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。
再次执行前面的查询,并增加一个新的 highlight
参数:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}
当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight
的部分。这个部分包含了 about
属性匹配的文本片段,并以 HTML 标签 <em></em>
封装:
9)分析聚合
终于到了最后一个业务需求:支持管理者对雇员目录做分析。 Elasticsearch 有一个功能叫聚合(aggregations),允许我们基于数据生成一些精细的分析结果。聚合与 SQL 中的 GROUP BY
类似但更强大。
举个例子,挖掘出雇员中最受欢迎的兴趣爱好:
先开启
PUT megacorp/_mapping/employee/
{
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
执行
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
暂时忽略掉语法,直接看看结果:
{
...
"hits": { ... },
"aggregations": {
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "forestry",
"doc_count": 1
},
{
"key": "sports",
"doc_count": 1
}
]
}
}
}
可以看到,两位员工对音乐感兴趣,一位对林地感兴趣,一位对运动感兴趣。这些聚合并非预先统计,而是从匹配当前查询的文档中即时生成。如果想知道叫 Smith 的雇员中最受欢迎的兴趣爱好,可以直接添加适当的查询来组合查询:
GET /megacorp/employee/_search
{
"query": {
"match": {
"last_name": "smith"
}
},
"aggs": {
"all_interests": {
"terms": {
"field": "interests"
}
}
}
}
all_interests
聚合已经变为只包含匹配查询的文档:
...
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "sports",
"doc_count": 1
}
]
}
聚合还支持分级汇总 。比如,查询特定兴趣爱好员工的平均年龄:
GET /megacorp/employee/_search
{
"aggs" : {
"all_interests" : {
"terms" : { "field" : "interests" },
"aggs" : {
"avg_age" : {
"avg" : { "field" : "age" }
}
}
}
}
}
得到的聚合结果有点儿复杂,但理解起来还是很简单的:
...
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2,
"avg_age": {
"value": 28.5
}
},
{
"key": "forestry",
"doc_count": 1,
"avg_age": {
"value": 35
}
},
{
"key": "sports",
"doc_count": 1,
"avg_age": {
"value": 25
}
}
]
}
输出基本是第一次聚合的加强版。依然有一个兴趣及数量的列表,只不过每个兴趣都有了一个附加的 avg_age
属性,代表有这个兴趣爱好的所有员工的平均年龄。
即使现在不太理解这些语法也没有关系,依然很容易了解到复杂聚合及分组通过 Elasticsearch 特性实现得很完美。可提取的数据类型毫无限制。
教程结语
这是一个关于 Elasticsearch 基础描述的教程,且仅仅是浅尝辄止,更多诸如 suggestions、geolocation、percolation、fuzzy 与 partial matching 等特性均被省略,以便保持教程的简洁。但它确实突显了开始构建高级搜索功能多么容易。不需要配置——只需要添加数据并开始搜索!
删除索引
DELETE megacorp
其他的一些操作命令(
按时间查询日志(国际时间)
Try a test query to Elasticsearch based on the fields created by the grok
filter plugin. Replace $DATE with the current date, in YYYY.MM.DD format:
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=response=200'
例如 http://10.6.129.101:9200/logstash-2017.08.12/_search?pretty&q=host=10.33.42.212
其中 host=xxx可替换为host:xxx
按城市名称查询
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=geoip.city_name=Buffalo'
)
Logstash 介绍
Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理(运行环境jvm 8)
官网地址:https://www.elastic.co/products/logstash
官方文档:https://www.elastic.co/guide/en/logstash
Logstash管道有两个必需的元素,input
、output
,以及一个可选的元素,filter
。输入插件消费源数据,过滤器插件会按照你指定的方式修改数据,输出插件将数据写入到目的地(查看logstash安装了哪些插件./bin/logstash-plugin list)。配置模板
input {{
}}
filter { filter {
}}
output {{
}}
示例 参见虚拟机10.6.129.101配置示例。
工作流程
Logstash 工作的三个阶段:
input 数据输入端,可以接收来自任何地方的源数据。
- file:从文件中读取
- syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。
- redis:从redis-server list 中获取
- beat:接收来自Filebeat的事件
Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下。
- grok: 通过正则解析和结构化任何文本。Grok 目前是logstash最好的方式对非结构化日志数据解析成结构化和可查询化。logstash内置了120个匹配模式,满足大部分需求。
- mutate: 在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。
- drop: 完全丢弃事件,如debug事件。
- clone: 复制事件,可能添加或者删除字段。
- geoip: 添加有关IP地址地理位置信息。
output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:
- elasticsearch: 发送事件数据到 Elasticsearch,便于查询,分析,绘图。
- file: 将事件数据写入到磁盘文件上。
- mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,大数据分片。
- redis:将数据发送至redis-server,常用于中间层暂时缓存。
- graphite: 发送事件数据到graphite,用于存储和绘制指标的流行开源工具。http://graphite.wikidot.com/
- statsd: 发送事件数据到 statsd。
Codecs编解码器
编解码器可以作为输入的流过滤器。编解码器使您可以轻松地将邮件的传输与序列化过程分开。流行的编解码器包括json
,msgpack
和plain
(文本)。
简单的两种测试输入输出的配置
测试您的Logstash,运行最基本的Logstash管道。
1)例如:shell标准输入数据
cd logstash-5.5.1
bin / logstash -e'input {stdin {}} output {stdout {}}'
2)或 端口输入,stdout输出
input {
beats {
port => "5043"
}
}
output {
stdout { codec => rubydebug }
}
验证配置文件是否正确 和配置自动加载
bin/logstash -f first-pipeline.conf --config.test_and_exit
bin/logstash -f first-pipeline.conf --config.reload.automatic
该--config.reload.automatic
选项启用自动配置重新加载,以便您每次修改配置文件时不必停止并重新启动Logstash。
Grok 结构化数据
过滤器插件使您能够将非结构化日志数据进行结构化 参见演示平台logstash 配置
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
}
删除注册文件,让filebeat 重新读取日志
sudo rm data/registry
geoip 补充ip信息 需下载geoip数据库,或机器能连网
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
logstash配置文件基础语法:
https://www.elastic.co/guide/en/logstash/5.5/event-dependent-configuration.html
Grok 使用语法
https://www.elastic.co/guide/en/logstash/5.5/plugins-filters-grok.html
解析任意文本和结构。
Grok目前是logstash中将最坏的非结构化日志数据解析为结构化和可查询的最佳方式。
此工具非常适用于syslog日志,apache和其他Web服务器日志,mysql日志以及通常为人类而不是计算机消费而编写的任何日志格式。
默认情况下,Logstash约有120种模式。你可以在这里找到他们:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns。你可以自己加入。(见patterns_dir
设定)
如果您需要帮助构建模式以匹配您的日志,您会发现 http://grokdebug.herokuapp.com和http://grokconstructor.appspot.com/应用程序非常有用!
基本演示: 访问http://grokdebug.herokuapp.com/
日志:
55.3.244.1 GET /index.xml 15824 0.043
pattern:
%{IPV4:client} %{WORD:method} %{URIPATH:uri} %{INT:datalength} %{BASE16FLOAT:timecost}
输出:
写成配置:
input {
file {
path => "/var/log/http.log"
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
remove_field => [ "message" ]
}
}
filebeat 配置 fields type
- multiline:将多行文本事件(如java异常和堆栈跟踪)消息合并到一个事件中。
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
fields:
type: syslog
output.logstash:
hosts: ["localhost:5043"]
logstash 配置 input tritter ,out put file,其中output:elasticsearch 可以填写集群多个节点,自动负载均衡。端口可以不填,默认9200
input {
twitter {
consumer_key => "enter_your_consumer_key_here"
consumer_secret => "enter_your_secret_here"
keywords => ["cloud"]
oauth_token => "enter_your_access_token_here"
oauth_token_secret => "enter_your_access_token_secret_here"
}
beats {
port => "5043"
}
file {
path => “/var/log/ apache/ access.log”
type => “apache” }
}
output {
elasticsearch {
hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
}
file {
path => "/path/to/target/file"
}
}
elsaticsearch 查询 上面配置的filed type :
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog'
查询推特信息
curl -XGET 'http://localhost:9200/logstash-$DATE/_search?pretty&q=client:iphone'
后台运行logstash
logstash 启停 /etc/init.d/logstash start
# 通过这种方式启动,logstash会自动加载 /etc/logstash/conf.d/ 下的配置文件
或后台命令行运行:
nohup /usr/share/logstash/bin/logstash -f /usr/share/logstash/bin/logstash.conf &>/dev/null &
哈希
哈希是以格式指定的键值对的集合"field1" => "value1"
。请注意,多个键值条目由空格分隔,而不是逗号。
例:
match => { “field1” => “value1” “field2” => “value2” ... }
output -elasticsearch
https://www.elastic.co/guide/en/logstash/5.5/plugins-outputs-elasticsearch.html
index
id
添加一个独特ID
的插件配置。如果没有指定ID,Logstash将生成一个。强烈建议您在配置中设置此ID。当您有两个或多个相同类型的插件时,例如,如果您有2个Grok过滤器,则此功能特别有用。在这种情况下添加命名ID将有助于在使用监视API时监视Logstash。
输出{
stdout {
id =>“my_plugin_id”
}
}
nginx 实战 比较全面的一个示例
参考文档http://tchuairen.blog.51cto.com/3848118/1840596/
1)注意事项:
其中nginx 日志改json 格式的方法: 在http 域内 定义名为json的log_format 格式,然后指定日志文件access.log使用该格式:
access_log logs/access.log json;
最后重新加载,或重启nginx 以生效
如下:
http {
log_format json '{"@timestamp":"$time_iso8601",'
'"slbip":"$remote_addr",'
'"clientip":"$http_x_forwarded_for",'
'"serverip":"$server_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"domain":"$host",'
'"method":"$request_method",'
'"requesturi":"$request_uri",'
'"url":"$uri",'
'"appversion":"$HTTP_APP_VERSION",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';
access_log logs/access.log json;
- input_type: log
paths:
- /usr/local/openresty/nginx/logs/access.log
fields:
type: nginxacclog
fields_under_root: true
2)grok匹配pandora 日志 示例:
.2017-08-13 12:42:25.112 MsgProcessThread-4 org.springframework.web.servlet.mvc.method INFO - ping from [/10.33.25.215:41542]
%{TIMESTAMP_ISO8601:time} %{USERNAME :thread} %{USERNAME:classpath} %{LOGLEVEL:loglevel} - %{GREEDYDATA:data}
logstash if else 语法
if EXPRESSION {
...
} else if EXPRESSION {
...
} else {
...
}
kibana 基本操作
Discover 对日志进行检索查看
Visuallize 图表可视化 配置;对特定规则聚合的数据进行图表分析
Dashboard 将Visualize设置的图表展示成仪表盘,有分组功能
Timelion 默认显示的.es(*) 为 es 文档个数
Dev Tools 一个RestAPI Console 与elasticsearch 进行交互
Management 创建管理索引的地方 以及 其他 的高级设置