zoukankan      html  css  js  c++  java
  • Centos安装ELK

    安装Elastic Search

    安装 Java

    Elasticsearch 是一个 Java 应用,因此,第一步就是安装 Java。

    以 root 或者其他 sudo 用户身份运行下面的命令,去安装 OpenJDK 软件包:

    # 确认jdk是否已经安装
    java -version
    
    # 安装jdk
    sudo dnf install java-11-openjdk-devel
    

    查看java版本:

    java -version
    

    安装Elastic Search

    # 进入软件下载目录
    cd /root/software
    
    # 下载安装包
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-x86_64.rpm
    
    # 安装
    rpm -ivh elasticsearch-7.1.1-x86_64.rpm
    
    # 启动服务
    sudo systemctl start elasticsearch.service
    
    # 设置为开机自动启动
    sudo systemctl enable elasticsearch.service
    

    验证 Elasticsearch 是否运行:

    curl -X GET "localhost:9200/"
    

    输出结果如下:

    {
      "name" : "192.168.63.129",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "L9lXB8HXScaMlQaM4GqF-A",
      "version" : {
        "number" : "7.9.2",
        "build_flavor" : "default",
        "build_type" : "rpm",
        "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
        "build_date" : "2020-09-23T00:45:33.626720Z",
        "build_snapshot" : false,
        "lucene_version" : "8.6.2",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

    修改配置

    # 停止服务
    systemctl stop elasticsearch.service
    
    # 创建数据存储目录
    cd /root/data
    mkdir elasticsearch
    cd elasticsearch
    mkdir data
    cd data
    pwd
    
    # 修改对应目录权限
    chown -R elasticsearch:elasticsearch /root/data/elasticsearch/data/
    
    # 确认其目录外部的权限是否为755,包括root目录,如果不是可以使用下面命令修改
    chmod 775 /root
    chmod 775 /root/data
    chmod 775 /root/data/elasticsearch
    
    # 修改elasticsearch配置文件
    vim /etc/elasticsearch/elasticsearch.yml
    
    # 修改内容如下:
    
    # 集群名,17行
    cluster.name: cnki-oa-elasticsearch
    
    # node名,23行
    node.name: node-1
    
    # 数据目录,33行
    path.data: /root/data/elasticsearch/data
    
    # 日志目录,37行
    path.logs: /var/log/elasticsearch
    
    # 配置站点地址,55行
    network.host: 192.168.43.131
    
    # 配置站点端口,59行
    http.port: 9200
    
    # 集群master需要和node名设置一致,72行
    cluster.initial_master_nodes: ["node-1"]
    
    # 启动服务
    systemctl start elasticsearch.service
    
    # 如果启动失败可以查看错误日志
    vim /var/log/elasticsearch/cnki-oa-elasticsearch.log
    
    # 使用其他服务器验证
    curl -X GET "192.168.43.131:9200/"
    

    开放端口

    Elasticsearch使用的端口为92009300两个端口,需要在防火墙上进行开启。

    # 开启对应端口
    firewall-cmd --permanent --add-port={9200/tcp,9300/tcp}
    
    # 重新加载配置文件
    firewall-cmd --reload
    
    # 验证端口开放情况
    firewall-cmd  --list-all
    

    访问地址

    http://192.168.43.131:9200/
    

    相关命令

    # 查询集群健康状态
    # 绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用.
    curl '192.168.43.131:9200/_cat/health?v'
    
    # 查询所有索引
    curl '192.168.43.131:9200/_cat/indices?v'
    
    # 创建索引,创建一个名为“test”的索引
    curl -XPUT '192.168.43.131:9200/test?pretty'
    
    # 插入数据,向index索引中插入类型为external、Id为1的数据
    curl -H "Content-Type: application/json" -XPUT '192.168.43.131:9200/test/external/1?pretty' -d '
    {
      "name": "John Doe"
    }'
    
    # 获取数据
    curl -XGET '192.168.43.131:9200/test/external/1?pretty'
    
    # 删除索引
    curl -XDELETE '192.168.43.131:9200/test?pretty'
    
    # 更新数据
    curl -H "Content-Type: application/json" -XPOST '192.168.43.131:9200/test/external/1/_update?pretty' -d '
    {
      "doc": { "name": "Jane Doe", "age": 20 }
    }'
    
    # 使用script将年龄增加5
    curl -H "Content-Type: application/json" -XPOST '192.168.43.131:9200/test/external/1/_update?pretty' -d '
    {
      "script" : "ctx._source.age += 5"
    }'
    
    # 删除数据
    curl -XDELETE ' :9200/test/external/2?pretty'
    
    # 查询全部数据
    curl '192.168.43.131:9200/test/_search?q=*&pretty'
    
    # 返回指定数量的数据,这里返回一条数据
    curl -H "Content-Type: application/json" -XPOST '192.168.43.131:9200/test/_search?pretty' -d '
    {
      "query": { "match_all": {} },
     "size": 1
    }'
    
    # 查询指定规则的字段,将match更换为match_phrase可实现模糊查询
    curl -H "Content-Type: application/json" -XPOST '192.168.43.131:9200/test/_search?pretty' -d '
    {
      "query": { "match": { "name": "Jane Doe" } }
    }'
    

    安装elasticsearch-head插件

    该插件需要依赖git和nodejs,需要首先在系统中确认是否已安装。

    安装Git

    # 确认Git是否已经安装
    git --version
    
    # 安装Git
    yum install git
    
    # 查看Git版本
    git --version
    

    安装nodejs

    # 查看node版本,确认是否已安装
    node -v
    npm -v
    
    # 安装nodejs
    yum install nodejs
    
    # 查看已安装版本
    node -v
    npm -v
    

    下载elasticsearch-head

    # 进入软件运行目录
    cd /root/data/
    mkdir elasticsearch-head
    cd elasticsearch-head/
    pwd
    
    # 下载代码
    git clone https://github.com/mobz/elasticsearch-head.git
    
    # 初始化
    cd elasticsearch-head
    npm install
    

    配置

    默认开放9100端口进行访问。

    # 修改Gruntfile.js,此时目录位置:/root/data/elasticsearch-head/elasticsearch-head
    vim Gruntfile.js
    
    # 具体修改内容如下:
    
    # 第97行
    server: {
            options: {
                    hostname: "192.168.43.131",//或者”*“表示所有
                    port: 9100,
                    base: '.',
                    keepalive: true
            }
    }
    
    # 修改elasticsearch-head默认连接地址,此时目录位置:/root/data/elasticsearch-head/elasticsearch-head
    vim _site/app.js
    
    # 修改前内容:
    this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
    
    # 修改后内容:
    this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.43.131:9200";
    

    修改ElasticSearch配置

    修改ElasticSearch配置文件,允许其跨域运行。

    # 修改配置文件
    vim /etc/elasticsearch/elasticsearch.yml
    
    # 在第59行处添加下面配置数据:
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    # 重新启动ElasticSearch服务
    systemctl restart elasticsearch
    

    开放端口

    Elasticsearch-head使用的端口为9100端口,需要在防火墙上进行开启。

    # 开启对应端口
    firewall-cmd --permanent --add-port={9100/tcp}
    
    # 重新加载配置文件
    firewall-cmd --reload
    
    # 验证端口开放情况
    firewall-cmd  --list-all
    

    启动

    # 此时目录位置:/root/data/elasticsearch-head/elasticsearch-head
    
    # 测试启动
    npm run start
    
    # 后台运行,日志会输出在当前文件夹nohup.out里面
    # 系统重启后需手动启动
    nohup npm run start &
    

    访问地址

    http://192.168.43.131:9100/
    

    安装Kibana

    下载安装包

    # 进入软件下载目录
    cd /root/software
    
    # 下载安装包,如果下载太慢可使用迅雷下载后上传至服务器
    wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-x86_64.rpm
    

    安装kibana

    # 进入软件下载目录
    cd /root/software
    
    # 安装
    rpm -ivh kibana-7.1.1-x86_64.rpm
    
    # 启动服务
    sudo systemctl start kibana.service
    
    # 设置为开机自动启动
    sudo systemctl enable kibana.service
    

    配置相关参数

    # 停止服务
    systemctl stop kibana
    
    # 编辑配置文件
    vim /etc/kibana/kibana.yml
    
    # 相关配置文件参数如下,注意修改对应IP地址
    
    # 站点端口号,2行
    server.port: 5601
    
    # 站点IP地址,7行
    server.host: "192.168.43.131"
    
    # 站点名称,25行
    server.name: "kibana-node-1"
    
    # ElasticSearch站点地址,28行
    elasticsearch.hosts: ["http://192.168.43.131:9200"]
    
    # 索引,37行
    kibana.index: ".kibana"
    
    # 语言显示为中文,第113行
    i18n.locale: "zh-CN"
    
    # 启动服务
    systemctl start kibana
    
    # 验证站点是否正常,URL地址如下:
    http://192.168.43.131:5601
    

    安装Logstash

    下载安装包

    # 进入软件下载目录
    cd /root/software
    
    # 下载安装包,如果下载太慢可使用迅雷下载后上传至服务器
    wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.rpm
    

    安装logstash

    # 进入软件下载目录
    cd /root/software
    
    # 安装
    rpm -ivh logstash-7.1.1.rpm
    
    # 启动服务
    sudo systemctl start logstash.service
    
    # 设置为开机自动启动
    sudo systemctl enable logstash.service
    

    配置Logstash

    Logstash配置文件为JSON格式,存放在/etc/logstash/conf.d/中。该配置由三个部分组成:输入,过滤和输出。

    # 创建配置文件目录
    cd /root/data/
    mkdir logstash
    cd logstash/
    mkdir conf
    cd conf/
    pwd
    
    # 修改默认配置文件目录
    cd /etc/logstash/
    vim logstash.yml
    
    # 修改配置文件存放目录,第64行
    path.config: /root/data/logstash/conf/*.conf
    #定期检查配置是否更改并重新加载管道,默认为false,第77行
    config.reload.automatic: true
    

    启动Logstash

    # 启动服务,如果添加或修改配置文件,需重启服务才能生效
    systemctl start logstash.service
    
    # 设置开机启动
    systemctl enable logstash.service
    

    使用Logstash测试文件输出到ElasticSearch

    Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。
    这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据。

    # 进入配置文件目录
    cd /root/data/logstash/conf
    
    # 创建日志文件相关目录
    cd /root/data/logstash
    mkdir logs
    cd logs/
    mkdir test
    cd test
    pwd
    
    # 创建测试日志文件
    vim testLog-20201012.txt
    
    # 创建测试日志配置文件
    cd /root/data/logstash/conf/
    vim conf-testlog.conf
    
    # 文件内容如下所示:
    
    input {
      file {
          path => "/root/data/logstash/logs/test/testLog-*.csv"
          type => "testlog-file"
          start_position => "beginning"
      }
    }
    filter {
      if [type] == "testlog-file" {
        mutate {
            split => ["message","|"]     #按 | 进行split切割message
                add_field =>   {
                        "SystemName" => "%{[message][0]}"
                }
                add_field =>   {
                        "Environment" => "%{[message][1]}"
                }
                add_field =>   {
                        "Level" => "%{[message][2]}"
                }
                add_field =>   {
                        "LogTime" => "%{[message][3]}"
                }
                add_field =>   {
                        "Content" => "%{[message][4]}"
                }
        }
        ruby { # 解决时间戳不对问题
                code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
        }
        ruby {
                code => "event.set('@timestamp',event.get('timestamp'))"
        }
        mutate {
                remove_field => ["timestamp"]
        }
      }
    }
    output {
      if [type] == "testlog-file" {
        elasticsearch{
            hosts => ["192.168.43.131:9200"]
            index => "testlog" # 如果每天创建一个则可以按照此语法:"testlog-%{+YYYY.MM.dd}"
            document_type => "debug"
        }
      }
    }
    

    测试文件内容如下:

    SSOModule|Test|Debug|2020-10-12 16:27:12|测试01
    SSOModule|Test|Debug|2020-10-12 16:29:12|测试02
    SSOModule|Prod|Error|2020-10-12 16:27:12|测试01
    ProjectMgnt|Test|Debug|2020-10-12 16:27:12|测试01
    ProjectMgnt|Test|Error|2020-10-12 16:27:12|测试01
    ProjectMgnt|Prod|Error|2020-10-13 08:27:12|测试01
    
    # 一般添加或修改配置文件后,重启logstash服务即可
    systemctl restart logstash
    
    # 测试配置文件
    /usr/share/logstash/bin/logstash -t -f /root/data/logstash/conf/conf-testlog.conf
    
    # 加载logstash配置文件,注意命令行后加上&,否则关闭shell窗口,该程序可能会随着关闭
    /usr/share/logstash/bin/logstash -f /root/data/logstash/conf/conf-testlog.conf &
    
    # 修改日志文件内容,可将新增日志输出到ElasticSearch中,使用vim修改将会造成日志文件重复
    echo 'test05' >> testLog-20201012.txt
    

    使用Logstash测试Kafka输出到ElasticSearch

    # 进入配置文件目录
    cd /root/data/logstash/conf
    
    # 创建测试日志配置文件
    vim conf-testlog-from-kafka.conf
    
    # 文件内容如下所示:
    
    input {
      kafka {
            bootstrap_servers => "192.168.43.131:9092"
            group_id => "testTopicGroup"
            client_id => "logstash-1"
            auto_offset_reset => "latest" # earliest、latest
            topics => ["testTopic"]	
            consumer_threads => 3
            decorate_events => true
            type => "bussiness-log-kafka"
      }
    }
    filter {
      if [type] == "bussiness-log-kafka" {
        mutate {
            split => ["message","|"]     #按 | 进行split切割message
                add_field =>   {
                        "SystemName" => "%{[message][0]}"
                }
                add_field =>   {
                        "Environment" => "%{[message][1]}"
                }
                add_field =>   {
                        "Level" => "%{[message][2]}"
                }
                add_field =>   {
                        "LogTime" => "%{[message][3]}"
                }
                add_field =>   {
                        "Content" => "%{[message][4]}"
                }
        }
        ruby { # 解决时间戳不对问题
                code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
        }
        ruby {
                code => "event.set('@timestamp',event.get('timestamp'))"
        }
        mutate {
                remove_field => ["timestamp"]
        }
      }
    }
    output {
      if [type] == "bussiness-log-kafka" {
        elasticsearch {
            hosts => ["192.168.43.131:9200"]
            index => "businesslog-kafka" # 如果每天创建一个则可以按照此语法:"testlog-%{+YYYY.MM.dd}"
            document_type => "debug"
        }
      }
    }
    
  • 相关阅读:
    1166
    SpringBoot(八) Caching
    将本地项目上传到码云
    《码出高效 Java开发手册》
    Sourcetree报错: 您没有已经配置扩展集成设置的远端
    看准网免登陆查看
    redis入门基础
    Java泛型类型
    SpringBoot(七) Working with data: SQL
    ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
  • 原文地址:https://www.cnblogs.com/zhang-guansheng/p/14647289.html
Copyright © 2011-2022 走看看