zoukankan      html  css  js  c++  java
  • 第四章 ELK介绍

    一、数据备份与恢复

    1.安装npm工具

    1)下载上传包

    #下载地址:http://nodejs.cn/download/
    
    [root@es01 ~]# rz
    [root@es01 ~]# ll
    -rw-r--r--  1 root root  21609252 2020-12-02 17:28 node-v14.15.1-linux-x64.tar.xz
    

    2)解压

    [root@es01 ~]# tar xf node-v14.15.1-linux-x64.tar.xz
    [root@es01 ~]# mv node-v14.15.1-linux-x64 node
    

    3)配置环境变量

    [root@es01 ~]# vim /etc/profile.d/npm.sh 
    export PATH=/root/node/bin:$PATH
    
    [root@es01 ~]# source /etc/profile
    

    4)更新国内源

    [root@es01 ~]# npm config set registry http://registry.npm.taobao.org/
    

    5)安装备份工具

    [root@es01 ~]# npm install elasticdump -g
    

    2.备份工具

    1)备份参数

    #我们运维需要掌握的
    --input:来源文件或地址
    --output:目标文件或地址
    --type:备份内容类型(settings, analyzer, data, mapping, alias, template)
    

    2)备份到另一台ES节点

    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=http://staging.es.com:9200/test 
      --type=analyzer
      
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=http://staging.es.com:9200/test 
      --type=mapping
      
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=http://staging.es.com:9200/test 
      --type=data
    

    3)备份数据成json文件

    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_mapping.json 
      --type=mapping
      
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_data.json 
      --type=data
      
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_alias.json 
      --type=alias
      
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_template.json 
      --type=template
    
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_analyzer.json 
      --type=analyzer
    

    4)备份成压缩文件

    #当文件导出不是为了使用,只是为了保存,可以压缩
    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=$ | gzip > /data/test_data.json.gz
    

    5)备份指定条件的数据

    elasticdump 
      --input=http://10.0.0.91:9200/test 
      --output=/data/test_query.json 
      --searchBody='{"query":{"term":{"name": "lhd"}}}'
    

    4.导入命令

    elasticdump 
      --input=/data/test_alias.json 
      --output=http://10.0.0.91:9200/test 
      --type=alias
    
    elasticdump 
      --input=/data/test_analyzer.json 
      --output=http://10.0.0.91:9200/test 
      --type=analyzer
      
    elasticdump 
      --input=/data/test_data.json 
      --output=http://10.0.0.91:9200/test 
      --type=data
      
    elasticdump 
      --input=/data/test_template.json 
      --output=http://10.0.0.91:9200/test 
      --type=template
      
    elasticdump 
      --input=/data/test_mapping.json 
      --output=http://10.0.0.91:9200/test 
      --type=mapping
      
    #注意:恢复的时候,如果已存在相同的数据,会覆盖原来的数据,如果不存在数据,则无影响
    

    5.备份脚本

    #!/bin/bash
    echo '要备份的机器是:'${1}
    index_name='
    test_2020-11-30
    student
    linux7
    '
    for index in `echo $index_name`
    do
    	echo "start input index ${index}"
    	elasticdump --input=http://${1}:9200/${index} --output=/data/${index}_alias.json --type=alias &> /dev/null
    	elasticdump --input=http://${1}:9200/${index} --output=/data/${index}_analyzer.json --type=analyzer &> /dev/null
    	elasticdump --input=http://${1}:9200/${index} --output=/data/${index}_data.json --type=data &> /dev/null
    	elasticdump --input=http://${1}:9200/${index} --output=/data/${index}_alias.json --type=alias &> /dev/null
    	elasticdump --input=http://${1}:9200/${index} --output=/data/${index}_template.json --type=template &> /dev/null
    done
    

    6.导入数据脚本

    #!/bin/bash
    echo '要导入的机器是:'${1}
    index_name='
    test
    student
    linux7
    '
    for index in `echo $index_name`
    do
        echo "start input index ${index}"
        elasticdump --input=/data/${index}_alias.json --output=http://${1}:9200/${index} --type=alias &> /dev/null
        elasticdump --input=/data/${index}_analyzer.json --output=http://${1}:9200/${index} --type=analyzer &> /dev/null
        elasticdump --input=/data/${index}_data.json --output=http://${1}:9200/${index} --type=data &> /dev/null
        elasticdump --input=/data/${index}_template.json --output=http://${1}:9200/${index} --type=template &> /dev/null
    done
    

    二、中文分词器

    https://github.com/medcl/elasticsearch-analysis-ik/
    

    1.插入测试数据

    POST /index/text/1
    {"content":"美国留给伊拉克的是个烂摊子吗"}
    POST /index/text/2
    {"content":"公安部:各地校车将享最高路权"}
    POST /index/text/3
    {"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
    POST /index/text/4
    {"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
    

    2.检测数据

    POST /index/_search
    {
      "query" : { "match" : { "content" : "中国" }},
      "highlight" : {
          "pre_tags" : ["<tag1>", "<tag2>"],
          "post_tags" : ["</tag1>", "</tag2>"],
          "fields" : {
              "content" : {}
          }
      }
    }
    
    #查询时分词有问题,中国被拆成两个字进行建立索引
    

    3.配置中文分词器

    1)上传插件的安装(集群中所有机器都执行)

    [root@es01 ~]# rz
    [root@es01 ~]# ll
    -rw-r--r--  1 root root   4504556 2020-05-19 00:22 elasticsearch-analysis-ik-6.6.0.zip
    

    2)解压

    [root@es01 ~]# mkdir /usr/share/elasticsearch/plugins/ik -p
    [root@es01 ~]# unzip elasticsearch-analysis-ik-6.6.0.zip -d /usr/share/elasticsearch/plugins/ik
    

    3)编辑配置文件

    [root@es03 ~]# vim /usr/share/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml
    <?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">/etc/elasticsearch/config/my.dic</entry>
            <!--用户可以在这里配置自己的扩展停止词字典-->
            <entry key="ext_stopwords"></entry>
            <!--用户可以在这里配置远程扩展字典 -->
            <!-- <entry key="remote_ext_dict">words_location</entry> -->
            <!--用户可以在这里配置远程扩展停止词字典-->
            <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    

    4)编辑分词文件

    [root@es03 ~]# cat /etc/elasticsearch/config/my.dic
    中国
    

    5)重启服务

    [root@es01 ~]# systemctl restart elasticsearch.service
    

    6)重新插入数据

    1.建立索引
    PUT /news
    
    3.创建mapping
    POST /news/text/_mapping
    {
    	"properties": {
    		"content": {
    			"type": "text",
    			"analyzer": "ik_max_word",
    			"search_analyzer": "ik_smart"
    		}
    	}
    }
    
    3.插入数据
    POST /news/text/1
    {"content":"美国留给伊拉克的是个烂摊子吗"}
    POST /news/text/2
    {"content":"公安部:各地校车将享最高路权"}
    POST /news/text/3
    {"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
    POST /news/text/4
    {"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
    

    7)再次查询关键字

    POST /news/_search
    {
    	"query" : { "match" : { "content" : "中国" }},
    	"highlight" : {
    		"pre_tags" : ["<tag1>", "<tag2>"],
    		"post_tags" : ["</tag1>", "</tag2>"],
    		"fields" : {
    			"content" : {}
    		}
    	}
    }
    
    #分词正确
    

    三、ELK介绍

    1.什么是ELK

    ELK是三个软件组成的
    E:elasticsearch		#java程序  存储,查询日志
    L:logstash			#java程序  收集,过滤日志
    K:kibana			#java程序  展示,数据页面化
    
    F:filebeat			#go语言  收集,过滤日志
    

    2.ELK的作用

    1.收集:收集所有服务器的日志
    2.传输:把日志稳定的传输到ES或者消息队列
    3.存储:ES能有效的存储数据
    4.分析:通过web页面和作图进行分析
    5.监控:监控集群架构
    

    3.ELK优点

    1.处理数据方式很灵活
    2.配置简单
    3.查询数据性能高
    4.集群扩展方便
    5.页面直观,好看
    

    4.为什么使用ELK

    1.web日志收集
    2.业务日志收集
    3.系统日志收集
    4.分析以上日志
    
    #在公司,统计分析数据
    1.用户访问量统计
    2.访问量前十的IP
    3.站点访问次数最多的URL
    4.查询一上午以上三个值   8:10-12:30
    5.查询一下午以上三个值   13:30-17:30
    6.对比一下以上数据
    7.对比本周每一天的数据
    
    #如果有ELK以上信息很容易查询
    

    四、logstash介绍

    1.搭建logstash

    1)安装java环境

    [root@web01 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm
    

    2)时间同步

    [root@web01 ~]# ntpdate time1.aliyun.com
    

    3)安装logstash

    [root@web01 ~]# rz
    [root@web01 ~]# yum localinstall -y logstash-6.6.0.rpm
    

    4)授权

    [root@web01 ~]# ll /usr/share/logstash/
    [root@web01 ~]# chown -R logstash.logstash /usr/share/logstash/
    
    #启动文件
    [root@web01 ~]# ll /usr/share/logstash/bin/logstash
    -rwxr-xr-x 1 logstash logstash 2354 Jan 24  2019 /usr/share/logstash/bin/logstash
    

    2.logstash插件

    INPUT:使Logstash能够读取特定的事件源。
    OUTPUT:将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。
    
    INPUT支持事件源 OUTPUT支持输出源 CODEC编解码器支持编码
    azure_event_hubs(微软云事件中心) elasticsearch(搜索引擎数据库) avro(数据序列化)
    beats(filebeat日志收集工具) email(邮件) CEF(嵌入式框架)
    elasticsearch(搜索引擎数据库) file(文件) es_bulk(ES中的bulk api)
    file(文件) http(超文本传输协议) Json(数据序列化、格式化)
    generator(生成器) kafka(基于java的消息队列) Json_lines(便于存储结构化)
    heartbeat(高可用软件) rabbitmq(消息队列 OpenStack) line(行)
    http_poller(http api) redis(缓存、消息队列、NoSQL) multiline(多行匹配)
    jdbc(java连接数据库的驱动) s3*(存储) plain(纯文本,事件间无间隔)
    kafka(基于java的消息队列) stdout(标准输出) rubydebug(ruby语法格式)
    rabbitmq(消息队列 OpenStack) tcp(传输控制协议)
    redis(缓存、消息队列、NoSQL) udp(用户数据报协议)
    s3*(存储)
    stdin(标准输入)
    syslog(系统日志)
    tcp(传输控制协议)
    udp(用户数据报协议)

    3.logstash输入输出插件测试

    1)配置环境变量

    [root@web01 ~]# vim /etc/profile.d/logstash.sh
    export PATH=/usr/share/logstash/bin/:$PATH
    

    2)收集标准输入到标准输出

    [root@web01 ~]# logstash -e 'input { stdin {} } output { stdout {} }'
    
    34567890
    {
    	   #收集到的内容
           "message" => "34567890",
        #时间戳
        "@timestamp" => 2020-12-03T09:27:18.886Z,
        	  #收集到数据的主机
              "host" => "web01",
          #收集的版本
          "@version" => "1"
    }
    

    3)收集标准输入到标准输出指定格式

    [root@web01 ~]# logstash -e 'input { stdin {} } output { stdout { codec => rubydebug } }'
    
    123
    {
           "message" => "123",
          "@version" => "1",
        "@timestamp" => 2020-12-03T09:33:40.563Z,
              "host" => "web01"
    }
    

    4)收集标准输入到文件

    [root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/1.txt" } }'
    123
    [INFO ] 2020-12-03 17:40:50.731 [[main]>worker0] file - Opening file {:path=>"/tmp/1.txt"}
    234
    345
    
    #验证文件写入
    [root@web01 ~]# tail -f /tmp/1.txt 
    {"message":"123","@timestamp":"2020-12-03T09:40:50.333Z","host":"web01","@version":"1"}
    {"message":"234","@timestamp":"2020-12-03T09:41:27.302Z","host":"web01","@version":"1"}
    {"message":"345","@timestamp":"2020-12-03T09:41:45.527Z","host":"web01","@version":"1"}
    

    5)收集标准输入到ES

    [root@web01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "test" } }'
    
    #启动后随便输入点东西,去ES查看
    
    [root@web01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "test_%{+YYYY-MM-dd}" } }'
    
  • 相关阅读:
    js动态向li添加数据
    css实现立体字
    flex属性1
    Gluttonous Snake.css
    Gluttonous Snake.js
    Gluttonous Snake.html
    创建对象7种方法
    ORACLE数据库测试数据插入速度[z]
    maven打包不包含配置文件[z]
    互联网公司的面试官是如何360°无死角考察候选人的?[z]
  • 原文地址:https://www.cnblogs.com/jhno1/p/14095620.html
Copyright © 2011-2022 走看看