Elasticsearch 基本概念
- node:运行单个ES实例的服务器
- cluster:一个或多个节点组成的集群
- index:索引多个文档的集合
- type:一个 index 可以定义一个或多个类型,将 document 逻辑份组
- document:index 里的每条记录
- field:ES存储最小单元
- shards:ES将index分片
- replicas:index 一份或多份副本
和关系型数据库对照:
Elasticsearch MySQL index database type table document row field Column
Elasticsearch 是 java 语言编写,所以需要配置 java 环境,这里使用的是 java 开源版本:
yum install java-1.8.0-openjdk.x86_64
Elasticsearch 配置
下载:https://www.elastic.co/cn/downloads/elasticsearch
文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
使用rpm包方式安装,安装参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/rpm.html
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-x86_64.rpm rpm -ivh elasticsearch-7.3.0-x86_64.rpm mkdir -p /data/elasticsearch/{data,log} chown -R elasticsearch:elasticsearch /data/elasticsearch
Elasticsearch 配置文件:
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: node-1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/log
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
Elasticsearch 推荐使用集群,这里暂使用单节点做测试。
Elasticsearch 数据操作
REST APIs文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/rest-apis.html
REST API请求格式:
curl -X<verb> '<protocol>://<host>:<prot>/<path>?<query_string>' -d '<body>' 参数 描述 verb HTTP方法,比如GET/POST/PUT/HEAD/DELETE host ES节点中任意主机名 port ES HTTP服务端口,默认是9200 path 索引路劲 query_string 可选的查看请求参数,例如 ?pretty 将格式化输出的 json 数据 -d 请求数据参数 body json 格式的请求主体数据
Kibana 配置
下载:https://www.elastic.co/cn/downloads/kibana
文档:https://www.elastic.co/guide/cn/kibana/current/index.html
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-x86_64.rpm rpm ivh kibana-7.3.0-x86_64.rpm
Kibana 配置文件:
grep -Ev "^#|^$" /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
pid.file: /tmp/kibana.pid
i18n.locale: "zh-CN"
新版本的 kibana 官方已经支持中文,配置文件中配置即可。
启动 elasticsearch 和 kibana:
systemctl enable elasticsearch.service systemctl start elasticsearch systemctl enable kibana.service systemctl start kibana
安装 Filebeat
Filebeat是一个轻量级的日志收集工具,用于转发和收集日志数据。Filebeat安装在被收集服务器上,监视指定的日志文件或路径,将收集的日志事件转发到 Elasticsearch或 Logstash 进行索引。
下载:https://www.elastic.co/cn/downloads/beats/filebeat
文档:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-x86_64.rpm rpm -ivh filebeat-7.3.0-x86_64.rpm
filebeat 配置文件:
# 输入部分
filebeat.inputs:
# 收集 nginx 日志
- type: log
enabled: true
paths:
- /home/nginxlogs/webpos.huiyika.com.log
json.keys_under_root: true
json.add_error_key: true
fields:
source: 'webpos-nginx-access'
# 收集 docker 日志
- type: docker
enabled: true
containers.ids:
- '6469383a2884015181d52c0b2ea7cd772a883dd4af79dd1ef9715e6eba78015e'
fields:
source: 'docker-consul'
# 输出部分
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.200.200.2:9200"]
indices:
- index: "%{[fields.source]}-%{+yyyy.MM.dd}"
when.contains:
fields.source: "webpos-nginx-access"
- index: "%{[fields.source]}-%{+yyyy.MM.dd}"
when.contains:
fields.source: "docker-consul"
配置很多,具体参考官网文档,修改好配置文件,重启生效:
systemctl restart filebeat
收集 nginx 日志,需要修改 nginx 日志为 JSON 格式:
log_format json escape=json '{ "@timestamp": "$time_iso8601", '
'"time": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"host": "$host", '
'"request": "$request", '
'"request_method": "$request_method", '
'"uri": "$uri", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" '
'}';
在Kibana中配置索引
在索引管理面板,可以看见在 filebeat 中配置的两个日志:
如下步骤创建索引模式:
创建好之后可以在 Discover 面板查看:
暂无评论内容