暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ELK+kafka日志收集分析系统搭建

乔克的好奇心 2019-07-02
276

环境:

服务器IP软件版本
192.168.0.156zookeeper+kafkazk:3.4.14  kafka:2.11-2.2.0
192.168.0.42zookeeper+kafkazk:3.4.14  kafka:2.11-2.2.0
192.168.0.133zookeeper+kafkazk:3.4.14  kafka:2.11-2.2.0
192.168.0.193logstash7.1.1
192.168.0.107logstash7.1.1
192.168.0.87elasticseach7.1.1
192.168.0.169elasticseach7.1.1
192.168.0.113kibana7.1.1

filebeat7.1.1

拓扑:

安装JDK

不管需不需要,都装上JDK吧,省的麻烦,我这里装的是jdk1.8.0_151

  1. tar xf jdk-8u151-linux-x64.tar.gz -C /opt/

配置环境变量

  1. vim /etc/profile

  2. export JAVA_HOME=/opt/jdk1.8.0_151

  3. export PATH=$JAVA_HOME/bin:$PATH

  4. source /etc/profile

安装zk

以192.168.0.156为例

  1. wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

  2. tar xf zookeeper-3.4.14.tar.gz -C /opt/

  3. # 修改配置信息

  4. cd /opt/zookeeper-3.4.14/conf

  5. cp zoo_sample.cfg zoo.cfg

修改zk配置文件:

  1. # vim zoo.cfg

  2. tickTime=2000

  3. initLimit=10

  4. syncLimit=5

  5. dataDir=/data/elk/zk/data/

  6. clientPort=2181

  7. server.1=192.168.0.156:12888:13888

  8. server.2=192.168.0.42:12888:13888

  9. server.3=192.168.0.133:12888:13888

创建数据目录,添加zk的竞选ID:

  1. # 添加数据目录

  2. mkdir -p /data/elk/zk/data/

  3. # 192.168.0.156上

  4. echo 1 > /data/elk/zk/data/myid

  5. # 192.168.0.42上

  6. echo 2 > /data/elk/zk/data/myid

  7. # 192.168.0.133上

  8. echo 3 > /data/elk/zk/data/myid

其他两台的配置一样,除了myid不同。

启动三台ZK

  1. ./bin/zkServer.sh start

查看状态,输出如下表示ZK集群OK了

  1. ./bin/zkServer.sh status

  2. ZooKeeper JMX enabled by default

  3. Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg

  4. Mode: follower

安装Kafka

  1. wget https://www-us.apache.org/dist/kafka/2.2.0/kafka_2.11-2.2.0.tgz

  2. tar xf kafka_2.11-2.2.0.tgz -C /opt/

  3. # 配置文件

  4. cd /opt/kafka_2.11-2.2.0/config

修改配置文件:

  1. # vim server.properties

  2. broker.id=1

  3. listeners=PLAINTEXT://192.168.0.156:9092

  4. num.network.threads=3

  5. num.io.threads=8

  6. socket.send.buffer.bytes=102400

  7. socket.receive.buffer.bytes=102400

  8. socket.request.max.bytes=104857600

  9. log.dirs=/data/elk/kafka/logs

  10. num.partitions=1

  11. num.recovery.threads.per.data.dir=1

  12. offsets.topic.replication.factor=1

  13. transaction.state.log.replication.factor=1

  14. transaction.state.log.min.isr=1

  15. log.retention.hours=168

  16. log.segment.bytes=1073741824

  17. log.retention.check.interval.ms=300000

  18. zookeeper.connect=192.168.0.156:2181,192.168.0.42:2181,192.168.0.133:2181

  19. zookeeper.connection.timeout.ms=6000

  20. group.initial.rebalance.delay.ms=0

另外两台配置信息需要改动的地方分别是broker.id=2和3,listeners改成自己本机IP。

创建日志目录:

  1. mkdir -p /data/elk/kafka/logs

配置hosts:

  1. kafka01 192.168.0.156

  2. kafka02 192.168.0.42

  3. kafka03 192.168.0.133

启动三台kafka

  1. ../bin/kafka-server-start.sh -daemon server.properties

测试:
(1)、创建topic

  1. ../bin/kafka-topics.sh --create --zookeeper 192.168.0.156:2181 --replication-factor 1 --partitions 2 --topic message_topic

(2)、查看topic

  1. ../bin/kafka-topics.sh --list --zookeeper 192.168.0.156:2181

(3)、测试消费者,生产者

  1. # 在其中一台执行以下命令

  2. ./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.156:9092 --topic message_topic --from-beginning

  3. # 另开一个终端执行以下命令

  4. ../bin/kafka-console-producer.sh --broker-list 192.168.0.156:9092 --topic message_topic

  5. >hello

  6. >

  7. # 就会输出以下内容

  8. ./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.156:9092 --topic message_topic --from-beginning

  9. hello

安装logstash

  1. wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz

  2. tar xf logstash-7.1.1.tar.gz -C /opt/

修改配置文件
vim logstash.yml

  1. path.data: /data/elk/logstash/data

  2. pipeline.workers: 4

  3. pipeline.batch.size: 125

  4. pipeline.batch.delay: 50

  5. path.config: /opt/logstash-7.1.1/config/conf.d

  6. http.host: "192.168.0.193"

  7. log.level: info

  8. path.logs: /data/elk/logstash/logs

安装elasticsearch

  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz

  2. tar xf elasticsearch-7.1.1-linux-x86_64.tar.gz -C /opt/

配置elasticsearch.yml

  1. node.name: node02

  2. path.data: /data/elk/data

  3. path.logs: /data/elk/logs

  4. network.host: 192.168.0.169

  5. http.port: 9200

  6. discovery.seed_hosts: ["node01", "node02"]

  7. cluster.initial_master_nodes: ["node01", "node02"]

另外一台配置更改node.name和network即可。

创建普通用户

  1. useradd elastic

  2. chown elastic.elastic elasticsearch-7.1.1/ -R

创建数据日志目录

  1. mkdir -p /data/elk/{data,logs}

  2. chown elastic.elastic /data -R

配置内核参数和文件描述符

  1. vim /etc/stsctl.conf

  2. fs.file-max=65536

  3. vm.max_map_count = 262144

  4. sysctl -p

  5. vim /etc/security/limits.conf

  6. * soft nofile 65536

  7. * hard nofile 65536

  8. * soft nproc 2048

  9. * hard nproc 4096

查看集群状态

  1. # curl http://192.168.0.87:9200/_cluster/health?pretty

  2. {

  3. "cluster_name" : "my-elk",

  4. "status" : "green",

  5. "timed_out" : false,

  6. "number_of_nodes" : 2,

  7. "number_of_data_nodes" : 2,

  8. "active_primary_shards" : 2,

  9. "active_shards" : 4,

  10. "relocating_shards" : 0,

  11. "initializing_shards" : 0,

  12. "unassigned_shards" : 0,

  13. "delayed_unassigned_shards" : 0,

  14. "number_of_pending_tasks" : 0,

  15. "number_of_in_flight_fetch" : 0,

  16. "task_max_waiting_in_queue_millis" : 0,

  17. "active_shards_percent_as_number" : 100.0

  18. }

查看节点状态

  1. # curl http://192.168.0.87:9200/_cat/nodes?v

  2. ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name

  3. 192.168.0.169 16 27 0 0.03 0.09 0.10 mdi - node02

  4. 192.168.0.87 14 44 0 0.05 0.08 0.09 mdi * node01

安装kibana

  1. wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-linux-x86_64.tar.gz

  2. tar xf kibana-7.1.1-linux-x86_64.tar.gz -C /opt/

修改配置文件

  1. server.port: 5601

  2. server.host: 192.168.0.113

  3. elasticsearch.hosts: ["http://192.168.0.87:9200"]

  4. elasticsearch.hosts: ["http://192.168.0.169:9200"]

安装filebeat

  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz

  2. tar xf filebeat-7.1.1-linux-x86_64.tar.gz -C /opt/

示例nginx

在nginx服务器上配置filebeat

首先部署filebeat。
修改配置文件:

  1. # vim filebeat.yml

  2. filebeat.inputs:

  3. - type: log

  4. enabled: false

  5. paths:

  6. - /var/log/*.log

  7. - type: log

  8. enable: true

  9. paths:

  10. - /var/log/nginx/access.log

  11. fields:

  12. name: nginx-access

  13. fields_under_root: false

  14. tail_files: false

  15. - type: log

  16. enable: true

  17. paths:

  18. - /var/log/nginx/error.log

  19. fields:

  20. name: nginx-error

  21. fields_under_root: false

  22. tail_files: false

  23. filebeat.config.modules:

  24. path: ${path.config}/modules.d/*.yml

  25. reload.enabled: false

  26. setup.template.settings:

  27. index.number_of_shards: 1

  28. setup.kibana:

  29. output.kafka:

  30. enabled: true

  31. hosts: ["192.168.0.156:9092","192.168.0.42:9092","192.168.0.133:9092"]

  32. topic: 'nginx-topic'

  33. partition.round_robin:

  34. reachable_only: true

  35. worker: 4

  36. required_acks: 1

  37. compression: gzip

  38. max_message_bytes: 1000000

  39. processors:

  40. - add_host_metadata: ~

  41. - add_cloud_metadata: ~

  42. logging.level: info

  43. logging.to_files: true

  44. logging.files:

  45. path: /data/elk/filebeat/logs

  46. name: filebeat

  47. rotateeverybytes: 52428800 # 50MB

  48. keepfiles: 5

启动服务:

  1. nohup ./filebeat &

在logstash上配置获取日志

配置文件:

  1. # vim opt/logstash-7.1.1/config/conf.d/nginx.conf

  2. input {

  3. kafka {

  4. codec => "json"

  5. topics => ["nginx-topic"]

  6. bootstrap_servers => ["192.168.0.156:9092, 192.168.0.42:9092, 192.168.0.133:9092"]

  7. group_id => "logstash-g1"

  8. }

  9. }

  10. output {

  11. elasticsearch {

  12. hosts => ["192.168.0.87:9200", "192.168.0.169:9200"]

  13. index => "logstash-%{+YYYY.MM.dd}"

  14. }

  15. }

启动服务:

  1. nohup ../../bin/logstash -f ../conf.d/nginx.conf &

在ES上查看索引

  1. curl '192.168.0.87:9200/_cat/indices?v'

  2. health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

  3. green open .kibana_task_manager xaxQMaJsRnycacsKZJBW5A 1 1 2 9 33.2kb 16.6kb

  4. green open .kibana_1 TZ7_EmQMSFy1cPS4Irx7iw 1 1 7 0 87.4kb 43.7kb

  5. green open logstash-2019.06.17-000001 vNCkz0a2R8unLxr5m9dSWg 1 1 2 0 82.1kb 41kb

在kibana上添加索引

在NG的机器上随便curl以下:

  1. # curl localhost/121231

日志比较乱,是因为我们没做日志的过滤。


文章转载自乔克的好奇心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论