ELK入门及高级应用+docker部署ELK

ELK入门及高级应用+docker部署ELK一 基于 7 5 1dockerpulld elastic co logstash logstash 7 5 1dockerpulld elastic co elasticsearc elasticsearc 7 5 1dockerpulld elastic co kibana kibana 7 5 1 二 部署 Elasticsearc 创建 docker 子网络 dockernetwor net2 安装 ElasticSe

一、概述

# 目前最新版本是7.12.1 docker pull docker.elastic.co/logstash/logstash:7.5.1 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1 docker pull docker.elastic.co/kibana/kibana:7.5.1 

二、Elasticsearch

elasticsearch官网https://www.elastic.co/cn/

1、正向索引和倒排索引

  • 正向索引

在这里插入图片描述

  • 倒排索引
    在这里插入图片描述

2、基本概念

2.1、文档

2.1.1、新增文档

在这里插入图片描述

# 新增文档 POST /edevp/_doc/1 { 
    "info": "黑马程序员Java讲师", "email":"", "name":{ 
    "firstName":"云", "lastName":"赵" } } 
2.1.2、查询、删除文档

查看文档语法

GET /索引库名/_doc/文档id # 示例 GET /edevp/_doc/1 

删除文档语法

DELETE /索引库名/_doc/文档id # 示例 DELETE /edevp/_doc/1 
2.1.3、修改文档
  • 方式一:全量修改,会删除旧文档,添加新文档
    如果id在数据库存在则修改,不存在则新增
    在这里插入图片描述




# 修改文档 PUT /edevp/_doc/1 {     "info": "黑马程序员Java讲师", "email":"", "name":{     "firstName":"云", "lastName":"赵" } } 
  • 方式二:增量修改,修改指定字段
    在这里插入图片描述

# 修改文档字段 POST /edevp/_update/1 {     "doc":{     "email":"" } } 

2.2、索引库

在这里插入图片描述

2.2.1、mapping

在这里插入图片描述
index模式是true,但是不是所有字段都需要创建索引
index为false表示不参与搜索




2.2.2、创建索引库

在这里插入图片描述
在Kibana的DevTools中Console中执行如下

# 创建索引库 PUT /edevp { 
    "mappings": { 
    "properties": { 
    "info":{ 
    "type": "text", "analyzer": "ik_smart" }, "email":{ 
    "type": "keyword", "index": false }, "name":{ 
    "type": "object", "properties": { 
    "firstName":{ 
    "type":"keyword" }, "lastName":{ 
    "type":"keyword" } } } } } } 

右侧结果是如下表示创建成功

{ 
    "acknowledged" : true, "shards_acknowledged" : true, "index" : "edevp" } 
2.2.2.1、字段拷贝
 # 创建索引库 PUT /hotel { 
    "mappings": { 
    "properties": { 
    "id":{ 
    "type": "keyword" }, "name":{ 
    "type": "text", "analyzer": "ik_max_word", "copy_to": "all" }, "address":{ 
    "type": "keyword", "index": false }, "price":{ 
    "type":"keyword" }, "score":{ 
    "type":"keyword" }, "brand":{ 
    "type":"keyword", "copy_to": "all" }, "city":{ 
    "type":"keyword" }, "starName":{ 
    "type":"keyword" }, "business":{ 
    "type":"keyword", "copy_to": "all" }, "location":{ 
    "type":"geo_point" }, "pic":{ 
    "type":"keyword", "index": false }, "all":{ 
    "type": "text", "analyzer": "ik_max_word" } } } } 
2.2.3、查看、删除索引库

查看索引库语法

GET /索引库名 # 示例 GET /edevp 

删除索引库语法

DELETE /索引库名 # 示例 DELETE /edevp 
2.2.4、修改索引库
# 修改索引库,添加新字段 PUT /edevp/_mapping { 
    "properties": { 
    "age":{ 
    "type": "integer" } } } 

2.3、与Mysql对比

在这里插入图片描述

2.4、架构

在这里插入图片描述

2.5、分词器

在这里插入图片描述

2.5.1、安装IK分词器

分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,Elasticsearch的标准分词器,会将中文分为一个一个的字,而不是词,比如:“石原美里”会被分为“石”、“原”、“美”、“里”,这显然是不符合要求的,所以我们需要安装中文分词器IK来解决这个问题。

  • 下载

官网地址:https://github.com/medcl/elasticsearch-analysis-ik/releases?page=6

cd /usr/local/elasticsearch wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip 
  • 解压
mkdir ik unzip -d ./ik elasticsearch-analysis-ik-7.5.1.zip 
  • 安装
mv ik ./plugins/ # 重启es docker restart elasticsearch 
  • 查看es日志
    发现有loaded plugin [analysis-ik]字样说明成功

2.5.2、IK分词器配置和停用词条字典

首先编辑 ik 的配置文件 /usr/local/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml

 
     
    DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置 
      comment>  
      <entry key="ext_dict">ext.dic 
       entry>  
       <entry key="ext_stopwords">stopword.dic 
        entry>  
        <entry key="remote_ext_dict">http://localhost:8162/test/downloadExtDic?fileName=extWords.dic 
         entry>  
         <entry key="remote_ext_stopwords">http://localhost:8162/test/downloadExtDic?fileName=stopWords.dic 
          entry>  
           properties> 

在/usr/local/elasticsearch/plugins/ik/config/新建ext.dic

程序员 程序 测试 edevp 

在stopword.dic中添加

的 你 吗 哦 了 嗯 

改完之后需要重启es

2.5.3、IK分词器的两种分词模式

两种分词模式:ik_max_word和ik_smart模式

ik_max_word(常用) 会将文本做最细粒度的拆分
ik_smart会做最粗粒度的拆分
2.5.4、同义词典使用
 意思相同的词,在搜索时应该同时查出来,比如“馒头”和“馍”,这种情况叫做同义词查询 注意:扩展词和停用词时在索引的时候使用,同义词是检索的时候 1、创建synonym.txt vi synonym.txt 输入同义词 2、重启es /usr/elasticsearch/bin/elasticsearch 3、使用是指定synonym.text 前缀路径为:/usr/elasticsearch/config/ analysis:为自己创建的目录 

2.6、地理坐标

  • geo_point
    由维度(latitude)和经度(longitude)确定一个点。例如“21.,120.”

  • geo_shape
    由多个geo_point组成的几何图形,例如一条线,“LINESTRING(-77.13123 38.,-77. 38.)”

3、部署

3.1、创建docker子网络

docker network create mynet 

3.2、安装ElasticSearch

3.3、拉取镜像

docker search elasticsearch docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1 

3.4、查看镜像

docker images

3.5、创建文件夹

mkdir -p /usr/local/elasticsearch/config mkdir -p /usr/local/elasticsearch/data mkdir -p /usr/local/elasticsearch/plugins echo "http.host: 0.0.0.0">>/usr/local/elasticsearch/config/elasticsearch.yml 

3.6、文件夹赋权

chmod -R 777 /usr/local/elasticsearch 

3.7、安装

 docker run --name elasticsearch --network mynet -p 9100:9100 -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -v /usr/local/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/elasticsearch/data:/usr/share/elasticsearch/data \ -v /usr/local/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d docker.elastic.co/elasticsearch/elasticsearch:7.5.1 

参数说明

# -d 后台运行 # --name elasticsearch 容器名称 # -p 9200:9200 -p 9300:9300 映射端口  # --network elasticsearch_net 指定网络 # -v 具名共享目录 # -e:设置环境变量 # -e "privileged=true" 配置访问权限 # -e "discovery.type=single-node" 指定elasticsearch部署模式单机运行 # -e "cluster.name=es-docker-cluster" 设置集群名称 # elasticsearch 指定镜像 # 如果启动不了,可以减小内存设置:-e ES_JAVA_OPTS="-Xms512m -Xmx512m" # -v elasticsearch_volume:/root 具名共享目录 # -e "privileged=true" 配置访问权限 # 开始没有配置访问权限,es一直起不起来,加了权限就可以起来了 

3.8、运行效果

在这里插入图片描述

三、logstash

1、概念

2、安装

参考:https://blog.csdn.net/weixin_41619409/article/details/119078755?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2

2.1、拉取镜像

docker pull docker.elastic.co/logstash/logstash:7.5.1 

2.2、启动

docker run -p 5044:5044 --name logstash --network mynet -d docker.elastic.co/logstash/logstash:7.5.1 

2.3、COPY配置文件至本地

 COPY配置文件至本地 mkdir -p /usr/local/logstash docker cp logstash:/usr/share/logstash/config /usr/local/logstash/ docker cp logstash:/usr/share/logstash/data /usr/local/logstash/ docker cp logstash:/usr/share/logstash/pipeline /usr/local/logstash/ chmod 777 -R /usr/local/logstash 

2.4、移除容器

 移除容器 docker rmi logstash 

2.5、修改配置文件

配置logstash.yml,也可以不配置

xpack.monitoring.elasticsearch.username: "logstash_system" xpack.monitoring.elasticsearch.password: "" xpack.monitoring.elasticsearch.url: ["http://elasticsearch:9200"] 

vi logstash.conf

2.6、启动logstash

docker run -d --user root \ --name logstash \ --network mynet \ -p 5044:5044 -p 9900:9900 -p 4560:4560 \ -v /usr/local/logstash/config:/usr/share/logstash/config \ -v /usr/local/logstash/pipeline:/usr/share/logstash/pipeline \ -v /usr/local/logstash/data:/usr/share/logstash/data \ -e TZ=Asia/Shanghai \ docker.elastic.co/logstash/logstash:7.5.1 
docker exec -it logstash bash 

2.3、配置Elasticsearch

参考:https://www.pianshen.com/article//

由于/usr/local/logstash/config/pipeline.yml中配置如下

- pipeline.id: main path.config: "/usr/share/logstash/pipeline" 

所以修改配置应该去/usr/local/logstash/pipeline/logstash.conf

[root@localhost ~]# docker exec -it logstash bash bash-4.2$ ls bin data lib logstash-core-plugin-api pipeline x-pack config Gemfile LICENSE.txt modules tools CONTRIBUTORS Gemfile.lock logstash-core NOTICE.TXT vendor bash-4.2$ cd pipeline/ bash-4.2$ ls logstash.conf bash-4.2$ vi logstash.conf # 修改为如下 input { 
    tcp { 
    mode => "server" host => "0.0.0.0" port => 5044 codec => json_lines } } output { 
    elasticsearch{ 
    hosts => ["elasticsearch:9200"] } stdout { 
    codec => rubydebug } } 

如果是集群不是es,则可以配置多个host

output { 
    stdout { 
    codec => rubydebug } elasticsearch { 
    hosts => ["devcdhsrv1:9200","devcdhsrv2:9200","devcdhsrv3:9200"] user => "" password => "" index => "%{[@metadata][index_prefix]}-%{+YYYY.MM.dd}" codec => json } } 

2.4、重启logstash

docker restart logstash 

2.5、查看docker日志

docekr logs -f logstash 

四、kibana

1、概念

提供一个elasticsearch的可视化界面,便于我们操作

2、安装

2.1、拉取镜像

docker pull docker.elastic.co/kibana/kibana:7.5.1 

启动

# 简洁版 docker run -p 5601:5601 --name kibana --network mynet -d docker.elastic.co/kibana/kibana:7.5.1 # 可以指定elastic的位置 docker run --name kibana --network mynet -p 5601:5601 -d -e ELASTICSEARCH_URL=http://192.168.2.153:9200 kibana:5.6.14 # 可以指定elastic的位置,因为在同一个网络直接使用es名称 docker run --name kibana --network mynet -p 5601:5601 -d -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana:7.5.1 

2.2、访问

http://127.0.0.1:5601/app/kibana

2.3、测试es是否连接

2.4、测试分词器

测试ik中文分词器
# 测试中文分词器 POST /_analyze { 
    "text": "Edevp的程序员学习java太棒了", "analyzer": "ik_max_word" } 

五、filebeat采集日志方案

参考:https://blog.csdn.net/Blueeyedboy521/article/details/

1、采集普通log日志文件

1.1、filebeat配置

拷贝一份filebeat.example.yml重命名为filebeat.yml修改配置如下

#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: true # 要抓取的文件路径  paths: - /data/logs/oh-coupon/info.log - /data/logs/oh-coupon/error.log # 添加额外的字段 fields: log_source: oh-coupon fields_under_root: true # 多行处理 # 不以"yyyy-MM-dd"这种日期开始的行与前一行合并  multiline.pattern: ^\d{ 
   4}-\d{ 
   1,2}-\d{ 
   1,2} multiline.negate: true multiline.match: after # 5秒钟扫描一次以检查文件更新 scan_frequency: 5s # 如果文件1小时都没有更新,则关闭文件句柄 close_inactive: 1h # 忽略24小时前的文件 #ignore_older: 24h - type: log enabled: true paths: - /data/logs/oh-promotion/info.log - /data/logs/oh-promotion/error.log fields: log_source: oh-promotion fields_under_root: true multiline.pattern: ^\d{ 
   4}-\d{ 
   1,2}-\d{ 
   1,2} multiline.negate: true multiline.match: after scan_frequency: 5s close_inactive: 1h ignore_older: 24h #================================ Outputs ===================================== #-------------------------- Elasticsearch output ------------------------------ #output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" #password: "changeme" #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["localhost:5044"] # Optional SSL. By default is off. # List of root certificates for HTTPS server verifications #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] # Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem" # Client Certificate Key #ssl.key: "/etc/pki/client/cert.key" 

1.2、logstash配置

vi /usr/local/logstash/pipeline/logstash.conf # 配置如下 input { 
    beats { 
    port => "5044" } } filter { 
    grok { 
    match => { 
    "message" => "%{TIMESTAMP_ISO8601:log_date}\s+\[%{LOGLEVEL:log_level}" } } date { 
    match => ["log_date", "yyyy-MM-dd HH:mm:ss.SSS"] target => "@timestamp" } } output { 
    if [log_source] == "jr-gdb" { 
    elasticsearch { 
    hosts => [ "elasticsearch:9200" ] index => "jr-gdb-%{+YYYY.MM.dd}" # user => "logstash_internal" # password => "" } } if [log_source] == "jr-sgb" { 
    elasticsearch { 
    hosts => [ "elasticsearch:9200" ] index => "jr-sgb-%{+YYYY.MM.dd}" # user => "logstash_internal" # password => "" } } } 

1.3、kibana查看

然后在Discover的页面中查看

在这里插入图片描述

2、采集nginx日志

https://blog.csdn.net/_/article/details/

3、filebeat多行采集log4j日志

参考:https://www.amd5.cn/atang_4152.html

六、elasticsearch集群部署

https://blog.csdn.net/weixin_/article/details/?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-4.pc_relevant_default&spm=1001.2101.3001.4242.3&utm_relevant_index=7

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222082.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:36
下一篇 2026年3月17日 下午4:37


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号