docker搭建ElasticStack7.7.0

elasticsearch:
#创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create elk
docker run -d --name elasticsearch --net elk -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:7.7.0
kibana:
docker run -d --name kibana --net elk -p 5601:5601 kibana:7.7.0
中文:配置文件添加 i18n.locale: “zh-CN”
logstash:
1.数据卷:
添加logstash.yml:
path.config: /usr/share/logstash/conf.d/**/*.conf
path.logs: /var/log/logstash

2.docker run -d --restart=always --net elk --privileged=true --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /var/lib/docker/volumes/logstash_conf/_data/logstash.yml:/usr/share/logstash/config/logstash.yml -v /var/lib/docker/volumes/logstash_conf/_data/conf.d/:/usr/share/logstash/conf.d/ logstash:7.7.0
注意:如果容器内出现permission denied,创建容器时添加–privileged,宿主机对需要权限的目录运行
chmod -R 777 目录/
3.收集beat采集的日志
添加conf.d/beat/beat.conf:

input {
    beats {
        #指定监听端口
        port => 5044
        codec => "json"
    }
}
filter{
  mutate{
        remove_field => ["agent","esc","tags"]
   }
}
output {
  if [fields][appname] == "nginx_access" {
     elasticsearch {
        hosts => ["elasticsearch:9200"]
        index => "nginx_log_%{+YYYY.MM.dd}"
        document_type => "nginx_log"
    }
  }
  if [fields][appname] == "mysql" {
     elasticsearch {
        hosts => ["elasticsearch:9200"]
        index => "mysql_log_%{+YYYY.MM.dd}"
        document_type => "mysql_log"
    }
  }
  stdout { codec => rubydebug }
}

4.采集csv
添加conf.d/csv/csv.conf

input {
  file {
    #只能绝对路径
    path => "/usr/share/logstash/conf.d/csv/movies.csv"
    start_position => "beginning"
    #记录上次读取的位置,如果需要从头读,要删掉
    sincedb_path => "db_path.log"
  }
}
filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }
  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }
  mutate {
    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }
  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }
}
output {
   elasticsearch {
     hosts => ["elasticsearch:9200"]
     index => "movies"
     document_id => "%{id}"
     document_type => "csv"
   }
  stdout {}
}

5.采集mysql数据
mysql驱动放到/usr/share/logstash/logstash-core/lib/jars目录下

input {
    jdbc {
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_connection_string => "jdbc:mysql://192.168.31.229:3306/manage?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&allowMultiQueries=true"
      jdbc_user => "root"
      jdbc_password => "root"
      #启⽤追踪,如果为true,则需要指定tracking_column
      use_column_value => true
      #指定追踪的字段,
      tracking_column => id
      #追踪字段的类型,⽬前只有数字(numeric)和时间类型(timestamp),默认是数字类型
      tracking_column_type => "numeric"
      #记录最后⼀次运⾏的结果
      record_last_run => true
      #上⾯运⾏结果的保存位置
      last_run_metadata_path => "mysql-position.txt"
      statement => "SELECT * FROM sys_oper_log where oper_id > :sql_last_value"
      schedule => "* * * * * *"
    }
}
output {
    elasticsearch {
        hosts => ["elasticsearch:9200"]
	     # 索引名
        index => "sys_oper_log"
	     # 需要关联的数据库中有有一个id字段,对应索引的id号
        document_id => "%{oper_id}"
	     document_type => "sys_oper_log"
    }
    stdout{
        codec => rubydebug
    }
} 

自动处理:放到loagstash.yml指定的文件目录下
手动处理:进入bin/目录,运行./logstash --debug -f 配置文件目录
写入事件所用的索引。可以动态的使用%{foo}语法,它的默认值是:
“logstash-%{+YYYY.MM.dd}”,以天为单位分割的索引,使你可以很容易的删除老的数据或者搜索指定时间范围内的数据。
索引不能包含大写字母。推荐使用以周为索引的ISO 8601格式,例如logstash-%{+xxxx.ww}
filebeat:
1.数据卷
添加filebeat.docker.yml

#日志输入配置
filebeat.inputs:
#一个配置文件里面可以同时收集多个日志
- type: log #指定input类型,有log、stdin、redis、tcp、syslog等
  enabled: true
  paths:
  #需要收集的日志所在的位置,可使用通配符进行配置
  - /nginx_logs/*.log
  json.keys_under_root: true
  json.overwrite_keys: true
  fields:
    appname: nginx_access  # 附加的可选字段,以向output添加额外的信息。output里面可以使用这个变量
#日志输出配置(采用 logstash 收集日志,5044为logstash端口)
output.logstash:
  hosts: ['logstash:5044']

2.docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name filebeat --net elk --user=root -d -v /usr/local/nginx/logs/:/nginx_logs/ -v /var/lib/docker/volumes/filebeat_conf/_data/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml store/elastic/filebeat:7.7.0
docker run --restart=always --name filebeat_mysql --net elk -v /var/lib/docker/volumes/2790f3ed8359526c06bab4f4ad07b6f6257318869f1a1bb8ead61e5b258f25a8/_data/:/logs/ -idt store/elastic/filebeat:7.7.0

filter{
   mutate{
        remove_field => ["agent","esc","tags"]
   }
   grok{
        match => {"id"=> "%{WORD:date} %{NUMBER:num} Query %{WORD:Query}"}
   }
   geoip{
        source => "remote_addr"
  }
}
#日志输入配置
filebeat.inputs:
- type: log
  enabled: true
  paths:
  #需要收集的日志所在的位置,可使用通配符进行配置
  - /mysql_logs/*.log
  #json.keys_under_root: true
  #json.overwrite_keys: true
  fields:
    appname: mysql_binlog
#日志输出配置(采用 logstash 收集日志,5044为logstash端口)
output.logstash:
  hosts: ['logstash:5044']

docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name filebeat_mysql --net elk --user=root -d -v /var/lib/docker/volumes/9fbd77d53f34e50d55bdd3828adbd0a498929e97bf1bb408b66e0b365843af4c/_data/:/mysql_logs/ -v /var/lib/docker/volumes/filebeat_mysql_conf/_data/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml store/elastic/filebeat:7.7.0

3.filebeat自带一些常用应用的模块,位于modules.d目录,带disabled后缀的表示不可使用,去掉就表示或使用。使用模块的情况下,数据是直接传递给elasticsearch。
MetricBeat:
docker run --restart=always -d --name metricbeat --net elk --user=root -v /var/run/docker.sock:/var/run/docker.sock elastic/metricbeat:7.7.0
#修改配置,添加 Elasticsearch 和 Kibana 的主机
vi metricbeat.yml

metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.elasticsearch:
  hosts: 'elasticsearch:9200'
  username: 'elastic'
  password: 'xxx'
setup.kibana:
  host: "kibana:5601"

启用 docker采集模块
metricbeat modules enable docker
编辑 docker采集配置
vi modules.d/docker.yml

- module: docker
  metricsets:
    - container
    - cpu
    - diskio
    - event
    - healthcheck
    - info
    - memory
    - network
  period: 10s
  hosts: ["unix:///var/run/docker.sock"]

设置 Metricbeat 创建 Kibana上的 Index Pattern 和 Dashboard
metricbeat setup
重启 Metricbeat 生效配置
docker restart metricbeat

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大成桥一霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值