• 微服务下ELK统一日志系统搭建


    1.安装部署elasticsearch-7.3.0

    https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
    上传到服务器 /opt/cjq

    2.解压Elasticsearch

    tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz

    3.修改Elasticsearch的配置文件

    cd elasticsearch-7.3.0/config/
    vim elasticsearch.yml

    4.修改配置文件(中文会引起报错,将中文部分删除即可)

    # 如果需要部署集群,集群需要同样的集群名
    cluster.name: cjq-application
    # 每个node的名字需要唯一
    node.name: cjq-1
    # 注意一定要是路径后面加上/var/lib/elasticsearch/nodes,要不然无法加入集群,单机不需要
    # path.data: /var/lib/elasticsearch/nodes
    # path.logs: /var/log/elasticsearch
    # 配置服务器的内网地址,有文档配置的0.0.0.0或localhost,但是后面出现了问题,暂未研究什么原因
    network.host: 192.168.1.141
    # 配置端口号,默认9200
    http.port: 9200
    # 配置集群节点,多个服务器["node-1", "node-2"]
    cluster.initial_master_nodes: ["cjq-1"]
    # discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
    # 解决跨域
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    5.启动Elasticsearch 需用elsearch用户启动

    注意:启动时,不可以使用root用户。
    # 创建elsearch组
    groupadd elsearch
    useradd elsearch(用户名) -g elsearch(组名) -p elsearch(密码)
    # 给新创建用户文件夹执行权限
    chown -R elsearch:elsearch /opt/cjq/elasticsearch-7.3.0
    # 切换elsearch用户
    su elsearch

    6.启动ElasticSearch报错[1]: max file descriptors [4096] for elasticsearch process is too low

    解决办法:

    修改 etc/security/limits.conf

    sudo vi /etc/security/limits.conf
    在文件最后面加上
    * soft nofile 65536
    * hard nofile 131072
    * soft nproc 2048
    * hard nproc 4096
    注:*后面有空格
    修改 /etc/sysctl.conf

    sudo vi /etc/sysctl.conf
    在文件最后面加上

    vm.max_map_count=262144

    配置重新生效
    sysctl -p
    重新启动
    进入/opt/cjq/elasticsearch-7.3.0/bin目录下执行
    sh elasticsearch &

    7.启动成功后,访问 http://192.168.1.141:9200/

    {
      "name" : "cjq-1",
      "cluster_name" : "cjq-application",
      "cluster_uuid" : "KdgE7GOpQoaMzyctiL4nnw",
      "version" : {
        "number" : "7.3.0",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "de777fa",
        "build_date" : "2019-07-24T18:30:11.767338Z",
        "build_snapshot" : false,
        "lucene_version" : "8.1.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    View Code

    8.安装部署ElasticSearch的Head插件

    注意:安装head需要安装node和npm 参考:https://www.cnblogs.com/bejamin/p/14439970.html
    注意: 之前安装node最新版本(16.14.0)没法用,后改用(8.14.0)正常
    注意: github官网无法访问或者下载很慢
    hosts文件用ip配置github域名
    #github ipconfig /flushdns
    140.82.112.4 github.com
    199.232.69.194 github.global.ssl.fastly.net
    185.199.108.153 assets-cdn.github.com
    185.199.110.153 assets-cdn.github.com
    185.199.111.153 assets-cdn.github.com

    下载地址:https://github.com/mobz/elasticsearch-head.git
    下载后执行:
    unzip elasticsearch-head-master.zip
    # 安装module
    npm install
    # 运行head插件 需用elsearch用户启动
    npm run start &

    访问界面 http://192.168.1.141:9100/

    9.安装部署Logstash

    下载Logstash
    https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz

    解压Logstash
    tar -zxvf logstash-7.3.0.tar.gz

    要测试Logstash安装成功,运行最基本的Logstash管道。 执行以下的命令
    ./logstash -e 'input { stdin { } } output { stdout {} }'
    然后在命令提示符下输入hello world,显示的如下:

    hello world
    {
    "host" => "localhost.localdomain",
    "@version" => "1",
    "@timestamp" => 2022-02-14T09:50:46.954Z,
    "message" => "hello world"
    }

    10.配置logstash输出到elasticsearch

    cd logstash-7.3.0/config/
    vim logstash-sample.conf

    修改完配置如下:

    input {
    beats {
    port => 5044
    }
    tcp {
    port => 4569
    codec => "json"
    }
    stdin{
    }
    }
    
    filter {
    geoip {
    source => "x_forword_ip"
    target => "x_forword_geo"
    }
    
    date {
    match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
    
    useragent {
    source => "ngx_ua"
    target => "ua"
    }
    
    mutate {
    split => { "x_forword" => ", " }
    }
    mutate {
    rename => { "[host][name]" => "host" }
    }
    }
    
    output {
    elasticsearch {
    hosts => ["192.168.1.141:9200"]
    index => "cjq_index"
    codec => rubydebug
    }
    stdout { codec => rubydebug }
    }
    View Code

    更多配置参照官网教程:https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
    可以参考该logstash手册:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/hello_world.html

    控制台测试启动
    ./bin/logstash -f ./config/logstash-sample.conf

    后台启动logstash  -真正使用
    nohup ./bin/logstash -f ./config/logstash-sample.conf &>nohup.log&

    11.logstash结合filebeat使用

    在分布式系统中,一台主机可能有多个应用,应用将日志输出到主机的指定目录,这时由logstash来搬运日志并解析日志,然后输出到elasticsearch上。由于于
    logstash是java应用,解析日志是非常消耗cpu和内存,logstash安装在应用部署的机器上显得非常的笨重。最常见的做法是用filebeat部署在应用的机器上,logstash单独部署,然后由
    filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。

    下载filebeat,下载命令如下:

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-linux-x86_64.tar.gz
    tar -zxvf filebeat-7.3.0-linux-x86_64.tar.gz
    cd /filebeat-7.3.0-linux-x86_64/

    vim filebeat.yml修改配置:
    filebeat.inputs:
    - type: log
    enabled: true
    paths:
    - /opt/apphome/msdp-2.0/msdp-wk-biz.log
    output.logstash:
    hosts: ["192.168.1.141:5044"]

    主要配置的是日志的搜集目录为/opt/apphome/msdp-2.0/msdp-wk-biz.log,这个目录是应用service输出日志的文件。输出到logstsh的地址为192.168.1.141

    启动filebeat,执行以下命令:

    sudo chown root filebeat.yml
    sudo ./filebeat -e >filebeat.log 2>&1 &
    这样日志就传输到了logstash, 然后通过logstash输出到elasticsearch
    具体效果需要结合Kibana或者通过elasticsearch-head查看

     

    12.SpringCloud + logstash结合logbak使用(暂时未使用)

    此方式将通过tcp方式直接把日志输出到logstash服务器
    在pom文件引用
    <!--logback日志-->
    <dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.2</version>
    </dependency>

    在resources添加logbak的配置文件 logback-spring.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds">
    <!-- 定义参数 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!-- 控制台打印设置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
    <pattern>${log.pattern}</pattern>
    </encoder>
    </appender>

    <!-- logstash设置 -->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <param name="Encoding" value="UTF-8"/>
    <!-- logstash服务器ip -->
    <remoteHost>192.168.0.146</remoteHost>
    <!-- logstash tcp 端口-->
    <port>4569</port>
    <!-- <filter class="com.program.interceptor.ELKFilter"/>-->//引入过滤类
    <!-- encoder is required -->
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
    <customFields>{"appname":"ceshi"}</customFields> // 索引名
    </encoder>
    </appender>

    <root level="info">
    <appender-ref ref="consoleAppender" />
    <appender-ref ref="logstash"/>
    </root>
    </configuration>

    其中{“appname”:“ceshi”} 对应logstash配置文件中的appname,为创建的索引名。
    可以在Kibana索引管理中根据名称进行分区搜索。根据自己的需求来

    编写测试方法:
    @Slf4j
    @RestController
    public class TestController {
    @RequestMapping(value = "/test")
    public String test(String id) {
    log.info("这是一个日志测试的controller");
    return "这是一个日志测试的controller";
    }
    }

    13.安装部署Kibana

    下载Kibana
    wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz

    解压Kibana
    tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz

    修改Kibana的配置文件
    cd kibana-7.3.0/config/
    vim kibana.yml

    修改配置文件如下:
    # 端口
    server.port: 5601
    # 指定本机ip让外部能访问
    server.host: "0.0.0.0"
    # 请求数据指向的elasticsearch服务器
    elasticsearch.hosts: ["http://192.168.1.141:9200"]

    配置完启动kibana,进入bin目录执行
    sh kibana &

    访问http://192.168.1.141:5601

    查看通过logstash传输的日志列表

    配置索引模式

     查看日志

     14.参考文献

    https://blog.csdn.net/qq_34988304/article/details/100058049

  • 相关阅读:
    小小知识点(二)——如何修改win10 的C盘中用户下的文件夹名称
    Day15 Python基础之logging模块(十三)
    Day14 Python基础之os/sys/hashlib模块(十二)
    Day13 Python基础之time/datetime/random模块一(十一)
    Day12 Python基础之生成器、迭代器(高级函数)(十)
    Day11 Python基础之装饰器(高级函数)(九)
    火狐HACK
    javascript操作cookie
    <!DOCTYPE>标签的定义与用法
    前端性能优化
  • 原文地址:https://www.cnblogs.com/1234cjq/p/15896987.html
Copyright © 2020-2023  润新知