由于es是需要用json格式的编写,简单介绍一下json。
json简介
• json 是什么?
– json 是 JavaScript 对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
– JSON中的分隔符限于单引号 ' 、小括号 ()、中括号[ ]、大括号 { } 、冒号 : 和逗号 ,
• json 特性
– JSON 是纯文本
– JSON 具有"自我描述性"(人类可读)
– JSON 具有层级结构(值中存在值)
– JSON 可通过 JavaScript 进行解析
es是属于ELK中的一部分,简单介绍一下ELK。
ELK 是什么?
• ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写
– Elasticsearch:负责日志检索和储存
– Logstash:负责日志的收集和分析、处理
– Kibana:负责日志的可视化
– 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK
ELK能做什么
• ELK组件在海量日志系统的运维中,可用于解决:
– 分布式日志数据集中式查询和管理
– 系统监控,包含系统硬件和应用各个组件的监控
– 故障排查
– 安全信息和事件管理
– 报表功能
Elasticsearch部分
• 主要特点
– 实时分析
– 分布式实时文件存储,幵将每一个字段都编入索引
– 文档导向,所有的对象全部是文档
– 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)
– 接口友好,支持 JSON
• ES 没有什么?
• Elasticsearch 没有典型意义的事务.
• Elasticsearch 是一种面向文档的数据库。
• Elasticsearch 没有提供授权和认证特性
• 相关概念:
– Node: 装有一个 ES 服务器的节点。
– Cluster: 有多个Node组成的集群
– Document: 一个可被搜素的基础信息单元
– Index: 拥有相似特征的文档的集合
– Type: 一个索引中可以定义一种戒多种类型
– Filed: 是 ES 的最小单位,相当于数据的某一列
– Shards: 索引的分片,每一个分片就是一个 Shard
– Replicas: 索引的拷贝
SQL 与 NOSQL
• ES 与关系型数据库的对比
– 在 ES 中,文档归属于一种 类型 (type) ,而这些类型
存在于索引 (index) 中,类比传统关系型数据库
– DB -> Databases -> Tables -> Rows -> Columns
– 关系型 数据库 表 行 列
– ES -> Indices -> Types -> Documents -> Fields
– ES 索引 类型 文档 域(字段)
ES集群安装
搭建一台ES的步骤
• 步骤 1,设置 ip 与主机名称对应关系
– 配置 /etc/hosts
192.168.x.x node1
• 步骤 2,安装 JDK
– Elasticsearch 要求至少 Java 7
– 一般推荐使用 OpenJDK 1.8
– 配置好安装源以后,我们先解决依赖关系
yum install -y java-1.8.0-openjdk
• 步骤 3
– 安装 ES
rpm –ivh elasticsearch-2.3.4-1.noarch
• 步骤 4
– 修改配置文件
– elasticsearch.yml
network.host: 0.0.0.0
• 步骤 5
– 启动服务,设置自启动
systemctl enable elasticsearch
systemctl start elasticsearch
– 验证:
netstat –ltunp
– 能够看到 9200,9300 被监听
• 通过浏览器戒 curl 访问 9200 端口
curl http://192.168.x.x:9200/
{
"name" : "node1",
"cluster_name" : "my-es",
"version" : {
"number" : "2.3.4",
...... ...... ......
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search“
}
• ES 集群配置
– ES 集群配置也很简单,只需要对配置文件做少量的修改即可,其他步骤和单机完全一致
– ES 集群配置文件
cluster.name: my-es
node.name: node1
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["node1", "node2","node3"]
– 集群中的所有节点要相互能够 ping 通,要在所有集群机器上配置 /etc/hosts 中的主机名与 ip 对应关系
– 集群中所有机器都要安装 java 环境
– cluster.name 集群名称配置要求完全一致
– node.name 为当前节点标识,应配置本机的主机名
– discovery 为集群节点机器,不需要全部配置
– 配置完成以后启动所有节点服务(有可能会有一定的延时,需要等待几十秒)
– 验证集群,使用 ES 内置字段 _cluster/health
curl http://192.168.x.x:9200/_cluster/health?pretty
{
"cluster_name" : "my-es",
"status" : "green",
...... ...... ......
"number_of_nodes" : 5,
"number_of_data_nodes" : 5,
...... ...... ......
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
系统命令 curl
• 在linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持多种请求模式,自定义请求等强大功能,是一款综合工具。
• curl 常用参数介绍
– -A 修改请求 agent
– -X 设置请求方法
– -i 显示返回头信息
RESTful API 调用
• Rest API 的简单使用
– _cat API 查询集群状态,节点信息
– v 参数显示详细信息
http://192.168.x.x:9200/_cat/health?v
– help 显示帮助信息
http://192.168.x.x:9200/_cat/health?help
– nodes 查询节点状态信息
http://192.168.x.x:9200/_cat/nodes?v
– 索引信息
http://192.168.x.x:9200/_cat/indices?v
• RESTful API 增加
– 创建一个索引,并设置分片数量与副本数量
curl -XPUT 'http://192.168.x.x:9200/yin1903/' -d '{
"settings":{
"index":{
"number_of_shards": 5,
"number_of_replicas": 1
}
}
}'
• RESTful API 插入数据
curl -XPUT 'http://192.168.x.x:9200/yin1903/js/1' -d '{
"姓名": "佛山林书豪",
"爱好": "basketball",
"年龄": 23,
"等级": 99}’
curl -XPUT 'http://192.168.x.x:9200/yin1903/2' -d '{
"姓名": "大沥詹姆斯",
"爱好": "LOL",
"年龄": 19,
"等级": 1}'
• 修改
curl -XPOST 'http://192.168.x.x:9200/yin1903/js/2/_update' -d '{
> "doc": {
> "年龄": 20}
}‘
• 查询与删除
curl -XGET 'http://192.168.x.x:9200/yin1903/js/1'
curl -XGET 'http://192.168.x.x:9200/yin1903/js/2'
curl -XDELETE 'http://192.168.x.x:9200/yin1903/js/1‘
curl -XDELETE 'http://192.168.x.x:9200/yin1903'