1๏ธโฃ TCP ์ฐ๊ฒฐ ์คํจ
๐จ ์๋ฌ ๋ฉ์์ง
WARN in net.logstash.logback.appender.LogstashTcpSocketAppender[REDIS] - Log destination localhost/<unresolved>:5044: connection failed
๐ ์์ธ ๋ถ์
- Spring Boot์์ Logstash๋ก ์ง์ TCP ์ฐ๊ฒฐ ์๋
- Logstash TCP input ์ค์ ๋๋ฝ ๋๋ ํฌํธ ๋ฏธ์คํ
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
Redis Appender๋ก ์ค์ ๋ณ๊ฒฝ:
<appender name="REDIS" class="com.cwbase.logback.RedisAppender">
<!-- Redis ์ค์ -->
</appender>
2๏ธโฃ Redis URL ํ์ฑ ์๋ฌ
๐จ ์๋ฌ ๋ฉ์์ง
Invalid destination 'redis://qpalz': unparseable port (was '//qpalz')
๐ ์์ธ ๋ถ์
- logback-spring.xml์ Redis ์ฐ๊ฒฐ URL ํ์ ์ค๋ฅ
- LogstashAccessTcpSocketAppender ์ฌ์ฉ ์ ๋ฐ์
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ฐ๋ณ ์์ฑ์ผ๋ก ์ค์ :
<appender name="REDIS" class="com.cwbase.logback.RedisAppender">
<host>${SERVER_URL}</host>
<port>6379</port>
<password>${REDIS_PASSWORD}</password>
<key>logstash</key>
<type>redis</type>
<layout class="net.logstash.logback.layout.LogstashLayout">
<customFields>{"application":"test"}</customFields>
</layout>
</appender>
3๏ธโฃ Logback ์ด๊ธฐํ ์คํจ
๐จ ์๋ฌ ๋ฉ์์ง
Logging system failed to initialize using configuration from 'classpath:logback-spring.xml'
๐ ์์ธ ๋ถ์
- Appender ํด๋์ค ๋ฌธ์
- Redis ์ฐ๊ฒฐ ๋ฌธ์์ด ํ์ ์ค๋ฅ
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์์กด์ฑ ์ถ๊ฐ:
implementation 'com.cwbase:logback-redis-appender:1.1.5'
- Appender ์ค์ ๋ณ๊ฒฝ:
<appender name="REDIS" class="com.cwbase.logback.RedisAppender">
<host>${SERVER_URL}</host>
<port>6379</port>
<password>${REDIS_PASSWORD}</password>
<key>logstash</key>
<type>redis</type>
<layout class="net.logstash.logback.layout.LogstashLayout">
<customFields>{"application":"test"}</customFields>
</layout>
</appender>
4๏ธโฃ ํ๊ฒฝ๋ณ์ ๋ฌธ์
๐จ ์๋ฌ ๋ฉ์์ง
- spring.config.import is missing
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- application.yml ์ค์ :
spring:
data:
redis:
host: ${SERVER_URL}
port: 6379
password: ${REDIS_PASSWORD}
- ํ๊ฒฝ๋ณ์ ์ค์ :
export SERVER_URL=your_server_url
export REDIS_PASSWORD=your_redis_password
5๏ธโฃ ๋ก๊ทธ ์ ์ก ์คํจ
๐ ๋๋ฒ๊น
๋จ๊ณ
- Redis ์ฐ๊ฒฐ ํ์ธ:
docker exec -it redis redis-cli -a ${REDIS_PASSWORD}
ping
- Logstash ๋ก๊ทธ ํ์ธ:
- Redis ๋ก๊ทธ ํ์ธ:
LLEN logstash
LRANGE logstash -1 -1
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ก๊ทธ ๋ ๋ฒจ ์ค์ :
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_REDIS" />
</root>
<logger name="com.example" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_REDIS" />
</logger>
- Redis ์ฐ๊ฒฐ ์ ๋ณด ํ์ธ:
docker inspect redis | grep IPAddress
๐ ์ฒดํฌ๋ฆฌ์คํธ
- Redis ์ฐ๊ฒฐ ์ ๋ณด ์ ํ์ฑ ํ์ธ
- Logstash ํ์ดํ๋ผ์ธ ์ค์ ๊ฒ์ฆ
- ๋ก๊ทธ ๋ ๋ฒจ ์ค์ ํ์ธ
- ํ๊ฒฝ๋ณ์ ์ค์ ํ์ธ
- Docker ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ ์ ๊ฒ
๐ก Best Practices
- Redis Appender ์ฌ์ฉ ๊ถ์ฅ
- ํ๊ฒฝ๋ณ์๋ application.yml์์ ๊ด๋ฆฌ
- Docker ์ปจํ
์ด๋ ๊ฐ ๋คํธ์ํฌ ์ค์ ์ฃผ์
- ๋ก๊ทธ ๋ ๋ฒจ ์ ์ ํ ์ค์
1๏ธโฃ TCP ์ฐ๊ฒฐ ์คํจ
๐จ ์๋ฌ ๋ฉ์์ง
๐ ์์ธ ๋ถ์
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
Redis Appender๋ก ์ค์ ๋ณ๊ฒฝ:
2๏ธโฃ Redis URL ํ์ฑ ์๋ฌ
๐จ ์๋ฌ ๋ฉ์์ง
๐ ์์ธ ๋ถ์
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ฐ๋ณ ์์ฑ์ผ๋ก ์ค์ :
3๏ธโฃ Logback ์ด๊ธฐํ ์คํจ
๐จ ์๋ฌ ๋ฉ์์ง
๐ ์์ธ ๋ถ์
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
implementation 'com.cwbase:logback-redis-appender:1.1.5'4๏ธโฃ ํ๊ฒฝ๋ณ์ ๋ฌธ์
๐จ ์๋ฌ ๋ฉ์์ง
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
5๏ธโฃ ๋ก๊ทธ ์ ์ก ์คํจ
๐ ๋๋ฒ๊น ๋จ๊ณ
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
docker inspect redis | grep IPAddress๐ ์ฒดํฌ๋ฆฌ์คํธ
๐ก Best Practices