美文网首页
本地ELK搭建和使用(windows10)

本地ELK搭建和使用(windows10)

作者: bug去无踪 | 来源:发表于2022-01-10 14:50 被阅读0次

    ELK实时日志分析平台

    Elasticsearch 是一个搜索和分析引擎。
    Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等存储库中。
    Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

    数据处理流程.png
    安装教程:https://www.cnblogs.com/wanghao1874/p/10150236.html

    1.ES索引 (index)

    按照索引存储,类似关系型数据库的一个数据库(database)比如test
    可以创建很多个索引,名字必须唯一,名字必须全部是小写字母

    2.类型(type)

    一个索引可以创建任意多个类型(es6.0之前一个索引可以创建多个类型,es6.0还能兼容多5.0的多个类型,es7.0一个索引只支持创建一个类型) 用户类型,部门类型,员工类型
    类似关系型数据库的表

    3.映射(mapping)

    和关系型数据库中的约束类似(schema),指定类型的长度,字段
    4.文档(document)
    存储json格式 比如 {"id":12,"name":"lisi","age":123}


    es_index.png

    以下demo基于ES7.16.2

    全文检索

    一.索引操作:

    1.1 PUT 创建索引:

    PUT /es_test

    1.2 DELETE 删除索引

    DELETE /es_test

    1.3 GET 查看所有索引

    GET /_cat/indices

    1.4 类型操作

    创建用户索引 id name age bir
    PUT /es_test
    {
    "mappings": {
    "properties": {
    "id": {"type": "integer"},
    "name": {"type": "text" },
    "age": { "type": "integer" },
    "bir": { "type": "date" },
    "system_code": {
    "type": "integer",
    "index": false
    }
    }
    }
    }

    1.5 添加一条数据 格式 POST 或者 PUT /_index/_type
    1.5.1方式一 不指定id 自动生成

    POST /es_test/_doc
    {
    "id":1,
    "name":"zhangsan333",
    "age":120,
    "bir":"2021-10-10"
    }

    1.5.2方式二 指定id

    PUT /es_test/_doc/6
    {
    "id":1,
    "name":"zhangsan6666",
    "age":14,
    "bir":"2021-10-14"
    }

    1.6 查看索引的类型

    GET /es_test/_mapping

    1.7 获取值

    GET /es_test/_doc/1
    // 获取指定字段
    GET /es_test/_doc/1 ?_source=age,name
    // 只返回字段和值,其他信息不返回
    GET /es_test/_doc/1/_source

    1.8 删除文档的值

    DELETE /es_test/_doc/7

    1.9更新类型的值
    1.9.1删除之前的类型值,并插入

    POST /es_test/_doc/3IMPR34Bn3IkzFkShpCk
    {
    "name":"zhangsantest1"
    }

    1.9.2更新之前的类型值,不删除

    POST /es_test/_doc/3IMPR34Bn3IkzFkShpCk/_update
    {
    "name":"zhangsantest1"
    }

    1.10批量操作

    POST /_bulk
    { "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
    { "create": { "_index": "website", "_type": "blog", "_id": "123" }}
    { "title": "My first blog post" }
    { "index": { "_index": "website", "_type": "blog" }}
    { "title": "My second blog post" }
    { "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
    { "doc" : {"title" : "My updated blog post"} }

    二.检索

    2.1 QueryingString 查询参数 拼接参数 只适合简单的查询,url长度有限

    GET /index/_search?

    2.1.1 查询所有值

    GET /es_test/_search?q=*
    GET /es_test/_search?q=&sort=age 按照年龄排序
    分页
    from 从哪一条数据开始查查
    size 显示条数
    默认返回10条
    GET /es_test/_search?q=
    &sort=age&size=30

    2.2 QueryDSL 写请求体,传入json
    2.2.1 查询所有 GET /index/_search

    {
    "query":{
    "match_all":{}
    },
    }

    2.2.2查询所有并排序

    GET /es_test/_search
    {
    "query":{
    "match_all":{}
    },
    "size":20,
    "from":1,
    "sort":[{
    "age":{
    "order":"desc"
    }
    }]
    "_source":["name","age"]
    }

    2.2.3基于关键词查询

    GET /es_test/_search
    {
    "query":{
    "term": {
    "name": {
    "value": "海"
    }
    }
    }
    }

    2.2.4范围过滤

    GET /es_test/_search
    {
    "query": {
    "range": {
    "age": {
    "gte": 10,
    "lte": 20,
    "boost": 2.0
    }
    }
    }
    }

    2.2.5前缀查询

    GET /es_test/_search
    {
    "query": {
    "prefix": {
    "name": {
    "value": "zhang"
    }
    }
    }
    }

    2.2.6通配符查询 wildcard

    ?匹配一个 匹配多个
    "value": "zhang?"
    "value": "zhang
    "
    GET /es_test/_search
    {
    "query": {
    "wildcard": {
    "name": {
    "value": "zhang?"
    }
    }
    }
    }

    2.2.7模糊查询 fuzzy 最大模糊错误 0-2个

    模糊关键字长度等于2,不能有模糊错误 0
    模糊关键字长度3-5,允许最大有1个模糊错误 0 1
    模糊关键字大于5,允许最大有2个模糊错误 0 1 2
    GET /es_test/_search
    {
    "query": {
    "fuzzy": {
    "name": {
    "value": "zhang"
    }
    }
    }
    }

    注意事项


    注意.png
    2.2.8 bool查询

    must 等价于逻辑运算的&&
    should 等价于||
    must_not 等价于!
    GET /es_test/_search
    {
    "query":{
    "bool":{
    "must":[
    {
    "term":{
    "age":{
    "value":"14"
    }
    }
    },
    {
    "term":{
    "name":{
    "value":"zhangsan4444"
    }
    }
    }
    ]
    }
    }
    }

    2.2.9 高亮查询

    GET /es_test/_search
    {
    "query":{
    "term": {
    "name": {
    "value": "name1"
    }
    }
    },
    "highlight":{
    "fields":{
    "name":{}
    }
    }
    }

    2.2.10 多字段查询

    GET /es_test/_search
    {
    "query":{
    "multi_match": {
    "query": "name1",
    "fields":["name","content"]
    }
    }
    }

    2.2.10 多字段分词查询,可以指定分词器

    GET /es_test/_search
    {
    "query":{
    "query_string": {
    "query": "北海", //查出含有北和海的结果
    "fields":["name","content"]
    }
    }
    }

    分词(type-text)

    只有text类型分词:默认分词器为标准分词器,分词器对中文单字分词,对英文一个单词分词
    type-keyword,integer,date:不分词

    搜索原理
    搜索原理.png
    IK分词器-中文分词器
    直接命令行安装

    进入到bin目录,按照自己的版本下载
    elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.2/elasticsearch-analysis-ik-7.16.2.zip

    直接下载

    https://github.com/medcl/elasticsearch-analysis-ik/releases 按照自己的版本下载

    测试分词器

    GET /_analyze
    {
    "text":"中华人民共和国国歌",
    "analyzer": "ik_smart"
    }

    分词器测试结果.png
    创建索引指定分词器

    PUT /blog_test
    {
    "mappings": {
    "properties": {
    "id": {"type": "integer"},
    "title": {
    "type": "text",
    "analyzer": "ik_max_word"
    },
    "content": {
    "type": "text",
    "analyzer": "ik_max_word"
    },
    "time": { "type": "date"},
    "total": {"type": "integer"}
    }
    }
    }

    POST /blog_test/_doc
    {
    "id":1,
    "title":"国内新闻",
    "content":"疫情得到有效控制,北京冬奥会将如期举行",
    "total":1,
    "time":"2022-01-18"
    }

    POST /blog_test/_doc
    {
    "id":2,
    "title":"国际新闻",
    "content":"美丽锅疫情失去控制,感染人数超过6千万人,死亡人数80多万",
    "total":1,
    "time":"2022-01-18"
    }

    POST /blog_test/_doc
    {
    "id":3,
    "title":"国际新闻",
    "content":"某欧洲国家与某印签署大额军火交易订单,某印支付600亿元购买军火",
    "total":1,
    "time":"2022-01-18"
    }

    GET /blog_test/_search
    {
    "query":{
    "query_string": {
    "query": "交易,军火",
    "fields":["title","content"]
    }
    }
    }

    //ik扩展,指定扩展词典
    elasticsearch-7.16.2\plugins\analysis-ik\IKAnalyzer.cfg 指定扩展词典
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <comment>IK Analyzer 扩展配置</comment>

    <entry key="ext_dict">extra_test.dic</entry>

    <entry key="ext_stopwords"></entry>




    </properties>

    坑:本地安装ik分词器和在线安装的ik分词器的配置文件不在一个目录,特别需求注意,
    优先读取 es下的config\analysis-ik\ 的配置文件 IKAnalyzer.cfg
    没有才读取 es下的plugins\analysis-ik\config\IKAnalyzer.cfg目录下的配置文件

    !!!!添加扩展字典后,之前添加的数据不会生效,要生效的话必须重新插入数据,才会生效。

    filter Query


    image.png
    2.2.11 范围过滤 must

    GET /blog_test/_search
    {
    "query":{
    "bool":{
    "must":[{
    "term":{
    "content": {
    "value":"蓝瘦"
    }
    }
    }
    ],
    "filter": [
    {
    "range": {
    "total": {
    "lte": 2,
    "gte": 20
    }
    }
    }
    ]
    }
    }
    }

    2.2.12 文本过滤

    GET /blog_test/_search
    {
    "query":{
    "bool":{
    "must":[{
    "term":{
    "title": {
    "value":"网络"
    }
    }
    }
    ],
    "filter": [
    {
    "term":{
    "content": {
    "value":"蓝瘦"
    }
    }
    }
    ]
    }
    }
    }

    相关文章

      网友评论

          本文标题:本地ELK搭建和使用(windows10)

          本文链接:https://www.haomeiwen.com/subject/efvmcrtx.html