• Docker搭建ELK


    docker安装ElasticSearch

    创建网络

    1. #这里先创建一个网络:因为我们还需要部署kibana容器、logstash容器,需要让这些容器互联。
    2. docker network create elk-net
    1. #查看网络
    2. docker network ls

    invalid image(图片无法加载)

    下载ES镜像

    1. #搜索镜像
    2. docker search elasticsearch
    3. #下载镜像
    4. docker pull elasticsearch:7.12.1

    invalid image(图片无法加载)

    创建容器

    1. docker run -d \
    2. --name es \
    3. -e "discovery.type=single-node" \
    4. -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    5. -v es-data:/usr/share/elasticsearch/data \
    6. -v es-plugins:/usr/share/elasticsearch/plugins \
    7. --privileged \
    8. --network elk-net \
    9. -p 9200:9200 \
    10. -p 9300:9300 \
    11. elasticsearch:7.12.1

    命令解释

    1. -e "cluster.name=es-docker-cluster":设置集群名称
    2. -e "http.host=0.0.0.0":监听的地址,可以外网访问
    3. -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
    4. -e "discovery.type=single-node":非集群模式
    5. -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
    6. -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
    7. -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
    8. --privileged:授予逻辑卷访问权
    9. --network elk-net :加入一个名为es-net的网络中
    10. -p 9200:9200:端口映射配置

    invalid image(图片无法加载)

    docker安装Kibana

    创建容器

    1. #如果不提前下载好,在创建容器时,会先下载,然后创建容器
    2. docker run -d \
    3. --name kibana \
    4. -e ELASTICSEARCH_HOSTS=http://es:9200 \
    5. -e "I18N_LOCALE=zh-CN" \
    6. --network=elk-net \
    7. -p 5601:5601 \
    8. kibana:7.12.1
    9. #http://192.168.200.130:5601 浏览器访问

    命令解释

    1. --network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
    2. -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
    3. -p 5601:5601:端口映射配置

    docker安装logstash

    创建容器

    docker run -d -p 5044:5044 -p 9600:9600 --name logstash --network=elk-net logstash:7.12.1
    

    修改配置

    设置ES地址
    1. #进入容器
    2. docker exec -it logstash /bin/bash

    找到config目录下面的logstatsh.yml文件
     

    invalid image(图片无法加载)


    修改里面的内容设置ES服务

    1. http.host: "0.0.0.0"
    2. xpack.monitoring.elasticsearch.hosts: [ "http://ip:9200" ] #设置跟es的服务地址

    设置logstash收集日志的输入和输出

    找到pipeline目录中的logstatsh.conf文件

    invalid image(图片无法加载)


    修改如下,可以设置数据输入的方式,也可以设置把数据存放到哪里

    1. input {
    2. tcp {
    3. mode => "server"
    4. host => "0.0.0.0" # 允许任意主机发送日志
    5. port => 5044
    6. codec => json_lines # 数据格式
    7. }
    8. }
    9. output {
    10. elasticsearch {
    11. hosts => ["http://ip:9200"] # ElasticSearch 的地址和端口
    12. index => "log-%{+YYYY.MM.dd}" # 指定索引名,可以根据自己的需求指定命名
    13. codec => "json"
    14. }
    15. stdout {
    16. codec => rubydebug
    17. }
    18. }

    修改完所有的配置后,需要重启logstash容器

    1. #退出容器
    2. exit
    3. #重启
    4. docker restart logstash

    应用系统对接logstash

    1. #新增依赖
    2. <dependency>
    3. <groupId>net.logstash.logback</groupId>
    4. <artifactId>logstash-logback-encoder</artifactId>
    5. <version>6.6</version>
    6. </dependency>

    需要在resources目录中新增一个文件logback-spring.xml(注意命名,不要修改)

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration>
    3. <include resource="org/springframework/boot/logging/logback/base.xml" />
    4. <springProperty scope="context" name="springAppName" source="Website may be available for web development ideas"/>
    5. <springProperty scope="context" name="serverPort" source="server.port"/>
    6. <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    7. <!--logstash的服务地址和端口,可以实际情况设置-->
    8. <destination>192.168.200.130:5044</destination>
    9. <!-- 日志输出编码 -->
    10. <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
    11. <providers>
    12. <timestamp>
    13. <timeZone>UTC</timeZone>
    14. </timestamp>
    15. <pattern>
    16. <pattern>
    17. {
    18. <!--应用名称 -->
    19. "app": "${springAppName}_${serverPort}",
    20. <!--打印时间 -->
    21. "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
    22. <!--线程名称 -->
    23. "thread": "%thread",
    24. <!--日志级别 -->
    25. "level": "%level",
    26. <!--日志名称 -->
    27. "logger_name": "%logger",
    28. <!--日志信息 -->
    29. "message": "%msg",
    30. <!--日志堆栈 -->
    31. "stack_trace": "%exception"
    32. }
    33. </pattern>
    34. </pattern>
    35. </providers>
    36. </encoder>
    37. </appender>
    38. <!--定义日志文件的存储地址,使用绝对路径-->
    39. <property name="LOG_HOME" value="/home/logs"/>
    40. <!-- 按照每天生成日志文件 -->
    41. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    42. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    43. <!--日志文件输出的文件名-->
    44. <fileNamePattern>${LOG_HOME}/${springAppName}-${serverPort}-%d{yyyy-MM-dd}.log</fileNamePattern>
    45. </rollingPolicy>
    46. <encoder>
    47. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    48. </encoder>
    49. </appender>
    50. <root level="INFO">
    51. <appender-ref ref="LOGSTASH" />
    52. <appender-ref ref="FILE" />
    53. <appender-ref ref="CONSOLE" />
    54. </root>
    55. </configuration>

    也可以在专门在application.yml文件中设置logback配置的目录

    1. logging:
    2. config: classpath:logback-spring.xml
  • 相关阅读:
    推荐vim插件tmux
    计算机组成原理平时作业四
    SVD奇异值分解原理及应用
    进程与线程的区别
    R语言数据分析案例
    链表的分割——哨兵位
    SAP 修改大表主键数据类型修改,数据修改影响选择条件
    5分钟教会你如何在生产环境debug代码
    【Tools】了解人工通用智能 (AGI):未来的智能体
    Mysql的函数方法
  • 原文地址:https://blog.csdn.net/w12345ll/article/details/139839869