1. ELK介绍
1. ELK组成
E: elastcisearch 数据搜索 数据存储 java
L: Logstash 数据收集 ( 数据解析
数据转换 ) 数据输出 java
F: Filebeat 数据采集 (简单的数据处理 ) <--go K:
Kibana 数据分析 数据展示
2.ELK集群架构
image.png3.EFK架构
imge.png4.ELFK架构
image.png5.ELK收集那些日志
容器:docker
代理:nginx、Haproxy
web:nginx、Tomcat、Httpd、PHP
db:mysql、redis、mongo、elasticsearch
存储:nfs、glusternfs、fastdfs
系统:message、security
业务:app
2.ElasticSearch基本使用
1.ES与MySQL作比较
表 数据 字段(数据类型)
索引 document 字段(doc类型)
2. ES单机安装
1.准备java环境
[root@es-node1 ~]# yum install java -y
2.安装
[root@es-node1 ~]# rpm -ivh elasticsearch-7.4.0-x86_64.rpm kibana-7.4.0-x86_64.rpm
[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options
-Xms512m #实验环境 生产环境最少内存一半以上 官方建议 最高
32Gb
-Xmx512m
3.启动
[root@es-node1 ~]# systemctl start elasticsearch.service
4.测试es是否启动
[root@es-node1 ~]# curl 127.0.0.1:9200
5.修改kibana的配置
[root@es-node1 ~]# vim /etc/kibana/kibana.yml
server.host: "0.0.0.0"
i18n.locale: "zh-CN"
6.启动kibana
[root@es-node1 ~]# systemctl enable kibana
[root@es-node1 ~]# systemctl start kibana
3. ES索引基本操作
创建一个索引
PUT /oldxu_es
查看所有的索引
GET _cat/indices
删除索引
DELETE /oldxu_es
给oldxu_es索引录入一个文档
POST /tt/_doc/1
{
"name": "oldxu",
"age": 18,
"salary": 1000000000
}
POST /oldxu_es/_doc/2
{
"name": "oldguo",
"age": 35,
"salary": 100
}
获取指定的id数据
GET /oldxu_es/_doc/1
获取所有的文档 默认前10个
GET /oldxu_es/_search
模糊查询
GET /oldxu_es/_search
{
"query": {
"term": {
"name": "oldxu"
}
}
}
删除指定id的文档
DELETE /oldxu_es/_doc/1
#
POST _bulk
{"index":{"_index":"tt","_id":"1"}}
{"name":"oldxu","age":"18"}
{"create":{"_index":"tt","_id":"2"}}
{"name":"oldqiang","age":"30"}
{"delete":{"_index":"tt","_id":"2"}}
{"update":{"_id":"1","_index":"tt"}}
{"doc":{"age":"20"}}
一次查询多个文档
GET _mget
{
"docs": [
{
"_index": "tt",
"_id": "1"
},
{
{
4.集群环境搭建
1.修改每个节点的elasticsearch.yml 配置文件
[root@es-node1 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: my-zhl
node.name: node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]
cluster.initial_master_nodes: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]
2.启动多节点
systemctl start elasticsearch
3.测试集群是否正常
通过curl测试
curl http://172.16.1.163:9200/_cluster/health?pretty
或者在kibana中检查
GET /_cluster/health
5.cerebro状态检查
cerebro插件来检查整个集群的环境。默认监听9000端口
rpm -ivh cerebro-0.8.5-1.norach.rpm
[root@es-node1 ~]# vim /etc/cerebro/application.conf
data.path = "/tmp/cerebro.db"
systemctl start cerebro
image.png
6.集群角色
master角色:负责控制整个集群的操作,通过cluster_status状态维护集群
选举:cluster.initial_master_nodes master-eligible
可以不参与选举:node.master: false
cluster_state:节点信息 索引信息
data角色:存储数据(默认都是data节点)关闭data:node.data: false
coordinating角色:负责路由 不能取消
7.ES集群健康检查
Cluster Health三种状态:
1.green 健康状态,指所有的分片和副本都正常分配
2.yellow 指左右的主分片都正常分配,但是副本没正常分配
- red 指有主分片没正常分配,表示索引不完备,写也有问题(不代表不能存储数据和读取数据)
4.可以通过GET _cluster/health?pretty-true
算法
shard = hash(routing) % numbei=r_of_primary_shards
hash 算法保证将数据均匀的分散在集群中
routing 十一个关键参数,默认是文档id
numbei=r_of_primary_shards 主分片数
该算法与主分片数有关,一旦确定不能更改主分片
因为一旦修改主分片,share的计算就不一样了
网友评论