docker搭建ELK,使用logstash增量同步mysql数据到es

本文详细介绍如何使用Docker快速部署Elasticsearch、Kibana和Logstash,实现ELK堆栈的搭建,用于日志收集、分析和可视化。文章包括镜像拉取、配置文件创建、服务启动及验证步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker搭建elasticsearch

  1. 拉取镜像:
    docker pull elasticsearch:版本号
  2. 启动:
    docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch 镜像名
  3. 浏览器访问http://localhost:9200 查看是否成功

 

docker搭建kibana

  1. 构建镜像
    docker pull kibana:版本号

     

  2. 启动:
    docker run --name kibana -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 -d 镜像名

     

  3. 浏览器访问http://localhost:5601/查看是否成功

 

 

docker搭建logstash

  1. 构建dockerfile:
    FROM logstash
    #安装input插件
    RUN logstash-plugin install logstash-input-jdbc
    #安装output插件
    RUN logstash-plugin install logstash-output-elasticsearch
    #容器启动时执行的命令.(CMD 能够被 docker run 后面跟的命令行参数替换)
    CMD ["-f", "/opt/kibana/config/logstash.conf"]
  2. 构建镜像:
    docker build -t my-logstash .
  3. 创建logstash.conf
    注意:目录:/opt/kibana/config 需要有mysql-connector-java-6.0.6.jar
    input {
     stdin { }
        jdbc {
            #注意mysql连接地址一定要用ip,不能使用localhost等
            jdbc_connection_string => "jdbc:mysql://10.11.0.100/uckefu?serverTimezone=UTC"
            jdbc_user => "xxx"
            jdbc_password => "xxx"
            #这个jar包的地址是容器内的地址
            jdbc_driver_library => "/opt/kibana/config/mysql-connector-java-6.0.6.jar"
            jdbc_driver_class => "com.mysql.jdbc.Driver"
            jdbc_paging_enabled => "true"
            jdbc_page_size => "50000"
            statement => "SELECT * FROM uk_chat_message where createtime> :sql_last_value order by createtime asc"
            schedule => "*/15 * * * *"
    
    	#处理中文乱码问题
          	codec => plain { charset => "UTF-8"}
    	#是否记录上次运行的结果
            record_last_run => true
            #记录上次运行结果的文件位置
            last_run_metadata_path => "/opt/kibana/config/station_parameter.txt"
            #是否使用数据库某一列的值,
            use_column_value => true
            tracking_column => "createtime"
            #numeric或者timestamp
            tracking_column_type => timestamp
            
            #如果为true则会清除 last_run_metadata_path 的记录,即重新开始同步数据
            #clean_run => false
    
        }
     }
     
     filter {
        ruby {
            code => "event.timestamp.time.localtime"
        }
    }
    
     output {
         stdout {
            codec => json_lines
        }
        elasticsearch {
            #注意mysql连接地址一定要用ip,不能使用localhost等
            hosts => "10.11.1.50:9200"
            index => "uckefu"
            document_type => "message"
            document_id => "%{id}"
        }
    }

     

  4. 在目录 /opt/kibana/config/   创建  station_parameter.txt 用于记录上次同步位置
  5. 启动:
    docker run --name logstash -d -it -v /opt/kibana/config:/opt/kibana/config my-logstash

     

  6. 若控制台有显示mysql相应表的数据,则同步成功

至此,使用docker搭建ELK、es增量同步MySQL成功,以上亲测可用!

 

方案二:使用docker-compose搭建

  1. 构建docker-compose.yml:
    version: '2' 
    services:
      elasticsearch:
        image: elasticsearch
        environment:
          - cluster.name=elasticsearch
        ports:
          - "9200:9200"
      kibana:
        image: kibana
        environment:
          SERVER_NAME: kibana
          ELASTICSEARCH_URL: http://elasticsearch:9200
        ports:
          - "5601:5601"
      logstash:
         #image: logstash
        build: .#若使用build,需要结合上诉dockerfile使用
        volumes:
       	- /opt/kibana/config: /opt/kibana/config
        ports:
       	- "4560:4560"
        links:
       	- elasticsearch

     

  2. 启动
     

    docker-compose up -d


    注意:方案二未经过严格亲测,仅提供参考

### Elasticsearch连接数据库集成方案 #### Python调用Elasticsearch更新数据库实例 为了在Python中实现与Elasticsearch的集成并更新数据库,需遵循一系列配置步骤。确保安装了适用于所使用的Elasticsearch版本的`elasticsearch-py`库,并确认服务端口开放且正常工作。通过编写脚本指定目标索引名称、文档ID及相关字段值完成数据同步操作[^1]。 ```python from elasticsearch import Elasticsearch, helpers es_client = Elasticsearch(hosts=["http://localhost:9200"]) def update_document(index_name, doc_id, body): es_client.update( index=index_name, id=doc_id, body={"doc": body} ) ``` #### 利用ElasticsearchRetriever增强LangChain应用 对于涉及多字段复杂结构化数据的应用场景,如由Web爬虫收集的信息集合,采用ElasticsearchRetriever组件能极大提升查询效率精准度。此方法允许自定义查询逻辑,从而更好地适应业务需求变化。例如,创建一个函数接收用户请求参数作为输入,转换成符合Elasticsearch Query DSL语法格式的有效载荷发送给服务器处理[^2]。 ```python from langchain.retrievers.elasticsearch_retriever import ElasticsearchRetriever retriever = ElasticsearchRetriever(es_client) query_body = { "size": 10, "query": { "multi_match": { "query": user_input_query, "fields": ["title", "content"] } } } response = retriever.retrieve(query=query_body) ``` #### 结合Lucene特性拓展高级搜索能力 得益于内置的Lucene引擎支持,Elasticsearch不仅限于简单的全文检索任务;它同样擅长执行复杂的地理空间分析或基于向量相似性的推荐算法等高阶应用场景。比如利用GeoShape类型定义地理位置范围条件筛选符合条件的结果记录[^3]。 ```json { "query": { "bool": { "must": [ { "geo_shape": { "location": { "shape": { "type": "envelope", "coordinates": [[min_lon, max_lat], [max_lon, min_lat]] }, "relation": "intersects" } } } ] } } } ``` #### 实施资源隔离机制保障多租户环境下的安全性 借鉴Spring框架下`AbstractRoutingDataSource`的设计理念,在实际部署过程中可以通过设定不同的Tenant ID来区分各个客户的独立访问路径,进而达到物理层面的数据分区效果。每当发起新的HTTP会话之前都会先检查当前线程变量内的标识符决定最终指向哪个具体的持久层接口实例进行交互操作[^4]。 ```java public class TenantAwareDataSourceRouter extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return TenantContext.getCurrentTenant(); } } ``` 综上所述,针对不同层次的需求特点提供了多种可行的技术路线供参考选用,无论是基础级别的CRUD增删改查动作还是面向未来的智能化信息服务建设都能找到合适的切入点加以实践尝试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值