ELK日志收集系统

在这里插入图片描述
max_map_count: 定义了一个进程能拥有的最多的内存区域,默认为 65536 内存异常处理

cat >> /etc/sysctl.conf <<-'EOF'
net.ipv4.ip_forward=1
vm.max_map_count=655360
EOF
sysctl -p

利用docker macvlan模式让每一个容器都拥有独立IP

docker network create -d macvlan \
 --subnet=192.168.31.0/24 \
 --ip-range=192.168.31.0/24 \
 --gateway=192.168.31.1 \
 -o parent=ens33 \
macvlan31

构建ElasticSearch7,用于存储日志数据

docker run --name elasticsearch \
--restart=always \
--network macvlan31  --ip=192.168.31.240 \
-e "discovery.type=single-node" -d \
elasticsearch:7.9.3

docker exec -it elasticsearch /bin/bash

tee >> /usr/share/elasticsearch/config/elasticsearch.yml <<-'EOF'
http.cors.enabled: true
http.cors.allow-origin: "*"
EOF
exit
docker restart elasticsearch

部署Kibana,用于数据交互与演示

docker run --name kibana \
--restart=always \
--network macvlan31  --ip=192.168.31.241 \
-e ELASTICSEARCH_URL=http://192.168.31.240:9200 \
-d kibana:7.9.3

部署Logstash,用于日志转换与过滤筛选

mkdir /home/elk

tee > /home/elk/logstash.conf <<-'EOF'
input {
    tcp {
        port => 5044
    		# 输入为json数据
        codec => json_lines
    }
}
filter {
  ruby { 
		code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" 
	}
	ruby {
		code => "event.set('@timestamp',event.get('timestamp'))"
	}
	mutate {
		remove_field => ["timestamp"]
	}
}
output {
	# 这个是logstash的控制台打印(进行安装调试的时候开启,稍后成功后去掉这个配置即可)
	stdout {
		codec => rubydebug
	}
	# elasticsearch配置
	elasticsearch {
		hosts => ["192.168.31.240:9200"]
		# 索引名称,没有会自动创建
		index => "logstash-%{[server_name]}-%{+YYYY.MM.dd}"
	}
}
EOF

docker run --network macvlan31  --ip=192.168.31.242  -v /home/elk/logstash.conf:/usr/share/logstash/pipeline/logstash.conf --name logstash -d logstash:7.17.5

客户端1:应用使用logstash-logback-encoder向Logstash推送日志数据

<dependency>
  <groupId>net.logstash.logback</groupId>
  <artifactId>logstash-logback-encoder</artifactId>
  <version>6.3</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg) %n</pattern>
        </layout>
    </appender>
    <!--logback输出-->
    <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.31.242:5044</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- 打印行号、方法名,官方不建议在生产环境开启此配置,默认为false(关闭),具网友测试开启后的耗时是未开启的大约360倍的时间(业务量小的时候可以忽略) -->
            <includeCallerData>true</includeCallerData>
            <!-- 设置时区-->
            <timeZone>UTC</timeZone>
            <!-- 日期格式化-->
            <!-- <timestampPattern>yyyy-MM-dd'T'HH:mm:ss.SSS</timestampPattern>-->
            <!-- 添加自定义属性,这里的server_name是服务名-->
            <customFields>{"server_name":"demo-server"}</customFields>
        </encoder>
        <!-- 设置超时时间, 默认没有,使用集群的时候可以加上-->
        <!--<writeTimeout>30 seconds</writeTimeout>-->
    </appender>

    <root level="INFO">
        <!--本地开发调试将控制台输出打开,同时将日志文件输出关闭,提高日志性能;线上部署请务必将控制台输出关闭-->
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="STASH"/>
    </root>
</configuration>

验证脚本

GET /logstash-demo-server-2022.08.18/_search
{
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ], 
  "query": {
    "match": {
      "level":"INFO"
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗的老史

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

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

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

打赏作者

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

抵扣说明:

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

余额充值