ELK 重难点解析以及最佳实践

ELK 重难点解析以及最佳实践

目录

  • ELK简介
  • 核心组件详解
  • 使用技巧
  • 重难点解析
  • Spring Boot集成
  • 具体场景使用
  • 最佳实践

ELK简介

什么是ELK

ELK是一个开源的日志分析平台,由三个核心组件组成:

  • Elasticsearch: 分布式搜索引擎,用于存储和检索日志数据
  • Logstash: 数据收集和转换工具,用于处理各种来源的日志
  • Kibana: 数据可视化平台,用于展示和分析日志数据

ELK架构

数据源 → Logstash → Elasticsearch → Kibana↓         ↓           ↓           ↓
应用日志   数据收集    数据存储    数据展示
系统日志   数据转换    数据索引    数据分析
网络日志   数据过滤    数据搜索    数据监控

主要特点

  • 实时性: 支持实时日志收集和分析
  • 可扩展性: 支持水平扩展,处理大规模数据
  • 灵活性: 支持多种数据源和格式
  • 可视化: 丰富的图表和仪表板
  • 搜索能力: 强大的全文搜索和聚合分析

适用场景

  • 日志集中管理
  • 系统监控告警
  • 业务数据分析
  • 安全事件分析
  • 性能监控分析

核心组件详解

1. Elasticsearch

基本概念
  • 索引(Index): 逻辑数据容器,类似关系数据库中的数据库
  • 分片(Shard): 数据物理分割,支持水平扩展
  • 副本(Replica): 数据备份,提高可用性
  • 文档(Document): 最小数据单元,类似关系数据库中的行
核心功能
// 创建索引
PUT /logs
{"settings": {"number_of_shards": 3,"number_of_replicas": 1,"analysis": {"analyzer": {"log_analyzer": {"type": "custom","tokenizer": "standard","filter": ["lowercase", "stop"]}}}},"mappings": {"properties": {"timestamp": {"type": "date"},"level": {"type": "keyword"},"message": {"type": "text","analyzer": "log_analyzer"},"service": {"type": "keyword"},"host": {"type": "ip"}}}
}

2. Logstash

基本概念
  • Input: 数据输入插件,支持文件、网络、数据库等
  • Filter: 数据过滤和转换插件
  • Output: 数据输出插件,支持Elasticsearch、文件等
配置示例
# logstash.conf
input {file {path => "/var/log/application/*.log"start_position => "beginning"sincedb_path => "/dev/null"}beats {port => 5044}
}filter {if [type] == "application" {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }}date {match => [ "timestamp", "ISO8601" ]target => "@timestamp"}mutate {remove_field => [ "timestamp" ]}}if [type] == "access" {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}geoip {source => "clientip"}}
}output {elasticsearch {hosts => ["localhost:9200"]index => "logs-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}

3. Kibana

基本概念
  • Discover: 数据探索和搜索
  • Visualize: 数据可视化创建
  • Dashboard: 仪表板展示
  • Management: 系统管理配置
功能特性
  • 实时数据搜索
  • 多种图表类型
  • 自定义仪表板
  • 告警配置
  • 用户权限管理

使用技巧

1. 索引管理

索引生命周期管理(ILM)
// 创建ILM策略
PUT _ilm/policy/logs-policy
{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {"rollover": {"max_size": "50GB","max_age": "1d"}}},"warm": {"min_age": "1d","actions": {"forcemerge": {"max_num_segments": 1},"shrink": {"number_of_shards": 1}}},"cold": {"min_age": "7d","actions": {"freeze": {}}},"delete": {"min_age": "30d","actions": {"delete": {}}}}}
}// 应用ILM策略
PUT _template/logs-template
{"index_patterns": ["logs-*"],"settings": {"index.lifecycle.name": "logs-policy","index.lifecycle.rollover_alias": "logs"}
}
索引优化
// 优化索引设置
PUT /logs/_settings
{"index.refresh_interval": "30s","index.number_of_replicas": 0,"index.translog.durability": "async"
}// 强制合并分片
POST /logs/_forcemerge?max_num_segments=1

2. 查询优化

查询DSL优化
// 使用filter context减少评分计算
GET /logs/_search
{"query": {"bool": {"must": [{"match": {"message": "error"}}],"filter": [{"range": {"@timestamp": {"gte": "now-1h"}}},{"term": {"level": "ERROR"}}]}},"_source": ["timestamp", "level", "message", "service"],"size": 100
}
聚合查询优化
// 高效聚合查询
GET /logs/_search
{"size": 0,"aggs": {"error_count": {"filter": {"term": {"level": "ERROR"}}},"errors_by_service": {"terms": {"field": "service","size": 10},"aggs": {"error_rate": {"cardinality": {"field": "host"}}}},"error_timeline": {"date_histogram": {"field": "@timestamp","calendar_interval": "1h"},"aggs": {"error_count": {"value_count": {"field": "level"}}}}}
}

3. 性能调优

集群优化
// 分片数量优化
// 分片数 = 数据量 / 单个分片大小(建议30-50GB)
// 分片数 = CPU核心数 * 2// 内存优化
PUT _cluster/settings
{"persistent": {"indices.memory.index_buffer_size": "30%","indices.queries.cache.size": "20%"}
}
查询性能优化
// 使用scroll API处理大量数据
GET /logs/_search?scroll=5m
{"query": {"match_all": {}},"size": 1000
}// 使用search_after进行深度分页
GET /logs/_search
{"query": {"match_all": {}},"size": 1000,"sort": [{"@timestamp": "asc"},{"_id": "asc"}],"search_after": [1640995200000, "doc_id"]
}

重难点解析

1. 数据一致性

问题描述

在分布式环境中,数据写入和读取可能出现不一致的情况。

解决方案
// 写入一致性设置
PUT /logs/_settings
{"index.write.wait_for_active_shards": "all","index.refresh_interval": "1s"
}// 读取一致性设置
GET /logs/_search?preference=_primary
{"query": {"match_all": {}}
}

2. 集群扩展

分片策略
// 自定义分片路由
PUT /logs/_settings
{"index.routing.allocation.require.box_type": "hot"
}// 分片预热
POST /logs/_forcemerge?max_num_segments=1
节点管理
// 节点角色配置
node.master: true
node.data: false
node.ingest: false// 分片分配控制
PUT _cluster/settings
{"persistent": {"cluster.routing.allocation.enable": "all"}
}

3. 数据安全

访问控制
// 创建角色
POST /_security/role/logs_admin
{"cluster": ["monitor", "manage_index_templates"],"indices": [{"names": ["logs-*"],"privileges": ["all"]}]
}// 创建用户
POST /_security/user/logs_user
{"password": "password123","roles": ["logs_admin"],"full_name": "Logs Administrator"
}
数据加密
# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Spring Boot集成

1. 依赖配置

Maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.2</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
Gradle依赖
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
implementation 'net.logstash.logback:logstash-logback-encoder:7.2'
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'

2. 日志配置

Logback配置
<!-- logback-spring.xml -->
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="net.logstash.logback.encoder.LogstashEncoder"><includeMdc>true</includeMdc><includeContext>false</includeContext></encoder></appender><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder class="net.logstash.logback.encoder.LogstashEncoder"><includeMdc>true</includeMdc><includeContext>false</includeContext></encoder></appender><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root>
</configuration>
Log4j2配置
<!-- log4j2-spring.xml -->
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><JsonLayout complete="false" compact="true" eventEol="true"><KeyValuePair key="timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}" /><KeyValuePair key="level" value="$${level}" /><KeyValuePair key="logger" value="$${logger}" /><KeyValuePair key="message" value="$${message}" /><KeyValuePair key="thread" value="$${thread}" /></JsonLayout></Console><RollingFile name="RollingFile" fileName="logs/application.log"filePattern="logs/application-%d{yyyy-MM-dd}-%i.log.gz"><JsonLayout complete="false" compact="true" eventEol="true"><KeyValuePair key="timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}" /><KeyValuePair key="level" value="$${level}" /><KeyValuePair key="logger" value="$${logger}" /><KeyValuePair key="message" value="$${message}" /><KeyValuePair key="thread" value="$${thread}" /></JsonLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="100MB" /></Policies><DefaultRolloverStrategy max="30" /></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="Console" /><AppenderRef ref="RollingFile" /></Root></Loggers>
</Configuration>

3. 应用配置

application.yml配置
spring:application:name: my-applicationelasticsearch:uris: http://localhost:9200logging:level:root: INFOcom.example: DEBUGpattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

4. 日志服务实现

日志服务类
@Service
public class LogService {private static final Logger logger = LoggerFactory.getLogger(LogService.class);public void logUserAction(String userId, String action, String details) {MDC.put("userId", userId);MDC.put("action", action);logger.info("User action: {}", details);MDC.clear();}public void logError(String message, Throwable throwable) {logger.error("Error occurred: {}", message, throwable);}public void logPerformance(String operation, long duration) {logger.info("Performance: {} took {}ms", operation, duration);}
}
日志拦截器
@Component
public class LoggingInterceptor implements HandlerInterceptor {private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String requestId = UUID.randomUUID().toString();MDC.put("requestId", requestId);MDC.put("method", request.getMethod());MDC.put("uri", request.getRequestURI());MDC.put("userAgent", request.getHeader("User-Agent"));request.setAttribute("startTime", System.currentTimeMillis());logger.info("Request started");return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {long startTime = (Long) request.getAttribute("startTime");long duration = System.currentTimeMillis() - startTime;MDC.put("duration", String.valueOf(duration));MDC.put("status", String.valueOf(response.getStatus()));if (ex != null) {logger.error("Request failed", ex);} else {logger.info("Request completed");}MDC.clear();}
}

5. 配置类

@Configuration
public class LoggingConfig {@Beanpublic HandlerInterceptor loggingInterceptor() {return new LoggingInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loggingInterceptor());}
}

具体场景使用

1. 微服务日志聚合

场景描述

在微服务架构中,需要集中收集和分析各个服务的日志,实现统一的监控和告警。

实现方案
# docker-compose.yml
version: '3.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0environment:- discovery.type=single-node- xpack.security.enabled=falseports:- "9200:9200"volumes:- es_data:/usr/share/elasticsearch/datalogstash:image: docker.elastic.co/logstash/logstash:8.8.0ports:- "5044:5044"- "9600:9600"volumes:- ./logstash/config:/usr/share/logstash/config- ./logstash/pipeline:/usr/share/logstash/pipelinedepends_on:- elasticsearchkibana:image: docker.elastic.co/kibana/kibana:8.8.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200depends_on:- elasticsearchvolumes:es_data:
Logstash配置
# logstash/pipeline/logs.conf
input {beats {port => 5044}tcp {port => 5000codec => json}
}filter {if [type] == "application" {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} \[%{DATA:thread}\] %{DATA:logger} - %{GREEDYDATA:message}" }}date {match => [ "timestamp", "ISO8601" ]target => "@timestamp"}mutate {remove_field => [ "timestamp" ]add_field => { "service_type" => "application" }}}if [type] == "access" {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}geoip {source => "clientip"}useragent {source => "useragent"}}
}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "logs-%{+YYYY.MM.dd}"}
}

2. 应用性能监控(APM)

场景描述

监控应用程序的性能指标,包括响应时间、吞吐量、错误率等。

实现方案
@RestController
@RequestMapping("/api")
public class PerformanceController {private static final Logger logger = LoggerFactory.getLogger(PerformanceController.class);@GetMapping("/data")public ResponseEntity<Map<String, Object>> getData() {long startTime = System.currentTimeMillis();try {// 模拟业务逻辑Thread.sleep(100);Map<String, Object> result = new HashMap<>();result.put("message", "Data retrieved successfully");result.put("timestamp", System.currentTimeMillis());long duration = System.currentTimeMillis() - startTime;logger.info("API call completed in {}ms", duration);return ResponseEntity.ok(result);} catch (Exception e) {long duration = System.currentTimeMillis() - startTime;logger.error("API call failed after {}ms", duration, e);throw e;}}
}
APM配置
# elasticsearch.yml
xpack.security.enabled: false
xpack.monitoring.enabled: true
xpack.monitoring.collection.enabled: true# kibana.yml
xpack.apm.enabled: true
xpack.apm.ui.enabled: true

3. 安全事件监控

场景描述

监控系统安全事件,包括登录失败、异常访问、权限变更等。

实现方案
@Component
public class SecurityEventLogger {private static final Logger logger = LoggerFactory.getLogger(SecurityEventLogger.class);public void logLoginAttempt(String username, String ip, boolean success, String reason) {MDC.put("event_type", "login_attempt");MDC.put("username", username);MDC.put("ip_address", ip);MDC.put("success", String.valueOf(success));MDC.put("reason", reason);if (success) {logger.info("Login successful for user: {}", username);} else {logger.warn("Login failed for user: {} from IP: {} - Reason: {}", username, ip, reason);}MDC.clear();}public void logAccessDenied(String username, String resource, String reason) {MDC.put("event_type", "access_denied");MDC.put("username", username);MDC.put("resource", resource);MDC.put("reason", reason);logger.warn("Access denied for user: {} to resource: {} - Reason: {}", username, resource, reason);MDC.clear();}public void logPrivilegeChange(String username, String oldRole, String newRole, String changedBy) {MDC.put("event_type", "privilege_change");MDC.put("username", username);MDC.put("old_role", oldRole);MDC.put("new_role", newRole);MDC.put("changed_by", changedBy);logger.info("Privilege changed for user: {} from {} to {} by {}", username, oldRole, newRole, changedBy);MDC.clear();}
}
安全告警配置
// 创建告警规则
POST /_watcher/watch/security_alert
{"trigger": {"schedule": {"interval": "1m"}},"input": {"search": {"request": {"search_type": "query_then_fetch","indices": ["logs-*"],"body": {"query": {"bool": {"must": [{"range": {"@timestamp": {"gte": "now-1m"}}},{"bool": {"should": [{"term": {"event_type": "login_attempt"}},{"term": {"event_type": "access_denied"}}]}}]}},"aggs": {"failed_logins": {"filter": {"term": {"success": "false"}}}}}}}},"condition": {"compare": {"ctx.payload.aggregations.failed_logins.doc_count": {"gt": 5}}},"actions": {"send_email": {"email": {"to": "admin@example.com","subject": "Security Alert: Multiple Failed Login Attempts","body": "Detected {{ctx.payload.aggregations.failed_logins.doc_count}} failed login attempts in the last minute."}}}
}

4. 业务数据分析

场景描述

分析业务数据,包括用户行为、交易统计、性能指标等。

实现方案
@Service
public class BusinessAnalyticsService {private static final Logger logger = LoggerFactory.getLogger(BusinessAnalyticsService.class);public void logUserAction(String userId, String action, Map<String, Object> context) {MDC.put("event_type", "user_action");MDC.put("user_id", userId);MDC.put("action", action);// 记录用户行为logger.info("User action: {} with context: {}", action, context);MDC.clear();}public void logTransaction(String transactionId, String userId, BigDecimal amount, String status) {MDC.put("event_type", "transaction");MDC.put("transaction_id", transactionId);MDC.put("user_id", userId);MDC.put("amount", amount.toString());MDC.put("status", status);logger.info("Transaction: {} - User: {} - Amount: {} - Status: {}", transactionId, userId, amount, status);MDC.clear();}public void logPerformanceMetric(String metric, double value, String unit) {MDC.put("event_type", "performance_metric");MDC.put("metric", metric);MDC.put("value", String.valueOf(value));MDC.put("unit", unit);logger.info("Performance metric: {} = {} {}", metric, value, unit);MDC.clear();}
}
数据分析查询
// 用户行为分析
GET /logs-*/_search
{"size": 0,"query": {"bool": {"must": [{"term": {"event_type": "user_action"}},{"range": {"@timestamp": {"gte": "now-7d"}}}]}},"aggs": {"actions_by_type": {"terms": {"field": "action","size": 20},"aggs": {"unique_users": {"cardinality": {"field": "user_id"}}}},"user_activity_timeline": {"date_histogram": {"field": "@timestamp","calendar_interval": "1h"},"aggs": {"unique_users": {"cardinality": {"field": "user_id"}}}}}
}

最佳实践

1. 日志设计原则

结构化日志
// 使用结构化日志格式
logger.info("User action completed", Map.of("userId", userId,"action", action,"duration", duration,"status", "success")
);
日志级别使用
// 合理使用日志级别
logger.trace("Detailed debug information");  // 最详细的信息
logger.debug("Debug information");           // 调试信息
logger.info("General information");          // 一般信息
logger.warn("Warning information");          // 警告信息
logger.error("Error information");           // 错误信息

2. 性能优化

批量处理
// 批量发送日志
@Async
public void batchSendLogs(List<LogEntry> logs) {// 批量发送到Logstash或Elasticsearch
}
异步日志
// 使用异步日志记录器
@Async
public void logAsync(String message) {logger.info(message);
}

3. 监控告警

告警规则配置
// 配置告警规则
{"name": "High Error Rate","type": "metric","query": {"bool": {"must": [{"range": {"@timestamp": {"gte": "now-5m"}}},{"term": {"level": "ERROR"}}]}},"threshold": 10,"action": "send_email"
}

4. 数据管理

索引生命周期
// 配置索引生命周期
{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {"rollover": {"max_size": "50GB","max_age": "1d"}}},"warm": {"min_age": "1d","actions": {"forcemerge": {"max_num_segments": 1}}},"delete": {"min_age": "30d","actions": {"delete": {}}}}}
}

总结

ELK是一个强大的日志分析平台,通过合理配置和使用,可以实现高效的日志收集、分析和监控。在Spring Boot应用中集成ELK,可以大大提升系统的可观测性和运维效率。

关键要点

  1. 理解ELK架构: 掌握三个核心组件的作用和关系
  2. 合理配置: 根据业务需求配置索引、分片、副本等参数
  3. 性能优化: 使用合适的查询策略和索引优化技术
  4. 监控告警: 建立完善的监控和告警机制
  5. 最佳实践: 遵循日志设计、性能优化、数据管理等最佳实践

应用场景

  • 微服务日志聚合: 集中管理分布式系统的日志
  • 应用性能监控: 监控系统性能和用户体验
  • 安全事件监控: 实时监控安全威胁和异常行为
  • 业务数据分析: 分析用户行为和业务趋势

通过合理使用ELK平台,可以构建高效、可靠的日志分析系统,为业务决策和系统运维提供有力支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919848.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】单对象分割项目

对象分割是在图像中找到目标对象的边界的过程。单目标分割的重点是自动勾勒出图像中一个目标对象的边界。对象边界通常由二进制掩码定义。 通过二进制掩码&#xff0c;可以在图像上覆盖轮廓以勾勒出对象边界。例如以下图片描绘了胎儿的超声图像、胎儿头部的二进制掩码以及覆盖在…

esp dl

放下了好多年 又回到了dl 该忘的也忘的差不多了 其实没啥复杂的 只是不习惯 熟悉而已 好吧 现代的人工智能体 还是存在着很大的问题 眼睛 耳朵 思考 虽然功能是正常的 但距离&#xff02;真正&#xff02;(&#xff09;意思上的独立意识个体 还是差别很大 再等个几十年 看看…

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城

详解ThreadLocal<HttpServletRequest> requestThreadLocal

public static ThreadLocal<HttpServletRequest> requestThreadLocal ThreadLocal.withInitial(() -> null);一、代码逐部分详解 1. public static public&#xff1a;表示这个变量是公开的&#xff0c;其他类可以访问。static&#xff1a;表示这是类变量&#xff0c…

Vue2 响应式系统设计原理与实现

文章目录Vue2 响应式系统设计原理与实现Vue2 响应式系统设计原理与实现 Vue2 的响应式原理主要基于以下几点&#xff1a; 使用 Object.defineProperty () 方法对数据对象的属性进行劫持 当数据发生变化时&#xff0c;通知依赖该数据的视图进行更新 实现一个发布 - 订阅模式&a…

探索 JUC:Java 并发编程的神奇世界

探索 JUC&#xff1a;Java 并发编程的神奇世界 在 Java 编程领域&#xff0c;随着多核处理器的普及和应用场景复杂度的提升&#xff0c;并发编程变得愈发重要。Java 并发包&#xff08;JUC&#xff0c;Java.util.concurrent&#xff09;就像是一座宝藏库&#xff0c;为开发者提…

selenium采集数据怎么应对反爬机制?

selenium是一个非常强大的浏览器自动化工具&#xff0c;通过操作浏览器来抓取动态网页内容&#xff0c;可以很好的处理JavaScript和AJAX加载的网页。 它能支持像点击按钮、悬停元素、填写表单等各种自动化操作&#xff0c;所以很适合自动化测试和数据采集。 selenium与各种主流…

指定文件夹上的压缩图像格式tiff转换为 jpg 批量脚本

文章大纲 背景简介 代码 背景简介 随着数字成像技术在科研、医学影像和遥感等领域的广泛应用,多页TIFF(Tag Image File Format)文件因其支持多维数据存储和高位深特性,成为存储序列图像、显微镜切片或卫星遥感数据的首选格式。然而在实际应用中,这类文件存在以下显著痛点…

Docker 部署 MySQL 8.0 完整指南:从拉取镜像到配置远程访问

目录前言一、拉取镜像二、查看镜像三、运行容器命令参数说明&#xff1a;四、查看运行容器五、进入容器内部六、修改 MySQL 配置1. 创建配置文件2. 配置内容七、重启 MySQL 服务八、设置 Docker 启动时自动启动 MySQL九、再次重启 MySQL十、授权远程访问1. 进入容器内部2. 登录…

IntelliJ IDEA 常用快捷键笔记(Windows)

前言&#xff1a;特别标注的快捷键&#xff08;Windows&#xff09;快捷键功能说明Ctrl Alt M将选中代码提取成方法Ctrl Alt T包裹选中代码块&#xff08;try/catch、if、for 等&#xff09;Ctrl H查看类的继承层次Alt 7打开项目结构面板Ctrl F12打开当前文件结构视图Ct…

疏老师-python训练营-Day54Inception网络及其思考

浙大疏锦行 DAY54 一、 inception网络介绍 今天我们介绍inception&#xff0c;也就是GoogleNet 传统计算机视觉的发展史 从上面的链接&#xff0c;可以看到其实inceptionnet是在resnet之前的&#xff0c;那为什么我今天才说呢&#xff1f;因为他要引出我们后面的特征融合和…

LeetCode第3304题 - 找出第 K 个字符 I

题目 解答 class Solution {public char kthCharacter(int k) {int n 0;int v 1;while (v < k) {v << 1;n;}String target kthCharacterString(n);return target.charAt(k - 1);}public String kthCharacterString(int n) {if (n 0) {return "a";}Str…

Codeforces Round 1043 (Div. 3) D-F 题解

D. From 1 to Infinity 题意 有一个无限长的序列&#xff0c;是把所有正整数按次序拼接&#xff1a;123456789101112131415...\texttt{123456789101112131415...}123456789101112131415...。求这个序列前 k(k≤1015)k(k\le 10^{15})k(k≤1015) 位的数位和。 思路 二分出第 …

【C语言16天强化训练】从基础入门到进阶:Day 7

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C基础知识知识强化补充、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向学习者…

【AI基础:神经网络】16、神经网络的生理学根基:从人脑结构到AI架构,揭秘道法自然的智能密码

“道法自然,久藏玄冥”——人工神经网络(ANN)的崛起并非偶然,而是对自然界最精妙的智能系统——人脑——的深度模仿与抽象。从单个神经元的信号处理到大脑皮层的层级组织,从突触可塑性的学习机制到全脑并行计算的高效能效,生物大脑的“玄冥”智慧为AI提供了源源不断的灵感…

容器安全实践(一):概念篇 - 从“想当然”到“真相”

在容器化技术日益普及的今天&#xff0c;许多开发者和运维人员都将应用部署在 Docker 或 Kubernetes 中。然而&#xff0c;一个普遍存在的误解是&#xff1a;“容器是完全隔离的&#xff0c;所以它是安全的。” 如果你也有同样的想法&#xff0c;那么你需要重新审视容器安全了。…

腾讯开源WeKnora:新一代文档理解与检索框架

引言&#xff1a;文档智能处理的新范式 在数字化时代&#xff0c;企业和个人每天都面临着海量文档的处理需求&#xff0c;从产品手册到学术论文&#xff0c;从合同条款到医疗报告&#xff0c;非结构化文档的高效处理一直是技术痛点。2025年8月&#xff0c;腾讯正式开源了基于大…

C++之list类的代码及其逻辑详解 (中)

接下来我会依照前面所说的一些接口以及list的结构来进行讲解。1. list_node的结构1.1 list_node结构体list由于其结构为双向循环链表&#xff0c;所以我们在这里要这么初始化_next&#xff1a;指向链表中下一个节点的指针_prev&#xff1a;指向链表中上一个节点的指针_val&…

新能源汽车热管理仿真:蒙特卡洛助力神经网络训练

研究背景在新能源汽车的热管理仿真研究中&#xff0c;神经网络训练技术常被应用于系统降阶建模。通过这一方法&#xff0c;可以构建出高效准确的代理模型&#xff0c;进而用于控制策略的优化、系统性能的预测与评估&#xff0c;以及实时仿真等任务&#xff0c;有效提升开发效率…

第十九讲:C++11第一部分

目录 1、C11简介 2、列表初始化 2.1、{}初始化 2.2、initializer_list 2.2.1、成员函数 2.2.2、应用 3、变量类型推导 3.1、auto 3.2、decltype 3.3、nullptr 4、范围for 5、智能指针 6、STL的一些变化 7、右值引用和移动语义 7.1、右值引用 7.2、右值与左值引…