elasticsearch集群和logstash同步txt-json文件

elasticsearch集群和logstash同步txt/json文件

1.ES集群

前期准备:
1.3台linux中JAVA环境配置,docker安装

可以参考:
https://blog.csdn.net/yuanpeij/article/details/116491684
1.三台docker先pull elasticsearch
docker pull elasticsearch:7.0.0
2.添加配置文件
2.1 第一台
mkdir /home/esconfig
vi /home/esconfig/es1.yml
cluster.name: ES-Cluster
#节点名
node.name: node-1
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 172.16.10.115
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.seed_hosts: ["172.16.10.115:9300","172.16.10.116:9300","172.16.10.117:9300"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 1
#xpack.security.enabled: false 
2.2 第二台
mkdir /home/esconfig
vi /home/esconfig/es1.yml
cluster.name: ES-Cluster
#节点名
node.name: node-2
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 172.16.10.116
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.seed_hosts: ["172.16.10.115:9300","172.16.10.116:9300","172.16.10.117:9300"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 1
#xpack.security.enabled: false 

2.3 第三台
mkdir /home/esconfig
vi /home/esconfig/es1.yml
cluster.name: ES-Cluster
#节点名
node.name: node-3
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 172.16.10.117
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.seed_hosts: ["172.16.10.115:9300","172.16.10.116:9300","172.16.10.117:9300"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 1
#xpack.security.enabled: false 

3.启动
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/esconfig/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  --name node-1 elasticsearch:7.0.0
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/esconfig/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  --name node-2 elasticsearch:7.0.0
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/esconfig/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  --name node-3 elasticsearch:7.0.0

验证和安装IK分词器(3台都需要安装IK)

http://192.168.6.175:9200/
http://192.168.6.175:9200/_cat/nodes

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "验证一下IK分词器"
}
docker cp ik node-1:/usr/share/elasticsearch/plugins
docker exec -it node-1 /bin/bash
4.pull kibana

我是一台连外网, 2台内网的, 连外网的pull kibana

通过外网linux当跳板机连接内网linux:
https://blog.csdn.net/yuanpeij/article/details/121399893
docker pull kibana:7.0.0

拉下来后, 启动: ELASTICSEARCH_HOSTS:填写你自己linux的

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://xxx.xx:9200 -e SERVER_PORT=5601  -e SERVER_HOST=0.0.0.0 -p 5601:5601 -d kibana:7.0.0

然后 ip:5601进入kibana

5.常见报错
firewall-cmd --zone=public --add-port=9200/tcp --permanent   # 开放9200端口
firewall-cmd --reload   # 配置立即生效
查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
首先查看docker启动日志

docker logs -f 容器id

错误消息

ERROR: [2] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
修改配置文件
vi /etc/sysctl.conf

添加:
vm.max_map_count=655360

修改完成后,执行此命令:
sysctl -p

2.logstash同步文件下的所有txt/json文件

2.1 连接外网的linux装logstash
docker pull logstash:7.0.0
2.2 logstash.yml配置文件放在宿主机(连接外网的linux)/data/elk/logstash目录下,内容如下:
mkdir /data/elk/logstash
vi /data/elk/logstash/logstash.yml
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
2.3 编辑my.conf文件(/data/elk/logstash/conf.d)
mkdir /data/elk/logstash/conf.d
vi /data/elk/logstash/conf.d/my.conf
input {
    file{
    	#docker中logstash内部的地址(可以通过数据卷来进行同步)
        path => "/usr/share/logstash/txtfile/**"
        #可选项,表示从哪个位置读取文件数据,初次导入为:beginning,最新数据为:end
        start_position => beginning
        #可选项,logstash多久检查一次被监听文件的变化,默认1s;
        stat_interval => 1
        #可选项,logstash多久检查一下path下有新文件,默认15s;
        discover_interval => 1
    }
 }


output {
            elasticsearch {
                #es地址ip端口
                hosts => ["192.168.6.82:9200"]
                #索引
                index => "txt_index"
            }

		#日志输出
       stdout {
        codec => json_lines
    }
}

input补充字段:
codec => #可选项,默认是plain,可设置其他编码方式;
 
discover_interval => #可选项,logstash多久检查一下path下有新文件,默认15s;
 
exclude => #可选项,排除path下不想监听的文件;
 
sincedb_path => #可选项,记录文件以及文件读取信息位置的数据文件;
 
sincedb_write_interval => #可选项,logstash多久写一次sincedb文件,默认15s;
 
stat_interval => #可选项,logstash多久检查一次被监听文件的变化,默认1s;
 
start_position => #可选项,表示从哪个位置读取文件数据,初次导入为:beginning,最新数据为:end
 
path => #必选项,配置文件路径,可定义多个,也可模糊匹配;
 
tags => #可选项,在数据处理过程中,由具体的插件来添加或者删除的标记;
 
type => #可选项,当有多个file的时候,可用于一对一匹配输入或者输出;



filter {   
    mutate{
        #删除无效的字段
        remove_field => ["@version","message","host","path"]
    }
    
    #新增timestamp字段,将@timestamp时间增加8小时
    ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" }
    
}

#设置txt文件路径,多个文件路径可设置成数组[],模糊匹配用*
        #指定单一文件
        #path => "/data/es/logstash-5.6.1/files/test.txt"
        #指定数组文件
        #path => ["/data/es/logstash-5.6.1/files/test-1.txt","/data/es/logstash-5.6.1/files/test-2.txt"]
        #指定同级目录模糊匹配
        #path => "/data/es/logstash-5.6.1/files/test*.txt"
        #指定多级目录模糊匹配
        path => "/data/es/logstash-5.6.1/files/**/test*.txt"
2.4启动logstash
mkdir /data/elk/logstash/txtfile
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /data/elk/logstash/conf.d/:/usr/share/logstash/conf.d/ -v /data/elk/logstash/txtfile/:/usr/share/logstash/txtfile/ logstash:7.0.0
然后给当前linux /data/elk/logstash/txtfile中放入.json或者.txt文件(内容是json类型), 然后logstash就会自动同步到es中了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值